<?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>141160</bug_id>
          
          <creation_ts>2015-02-02 07:26:32 -0800</creation_ts>
          <short_desc>[Streams API] Support the start function parameter in ReadableStream constructor</short_desc>
          <delta_ts>2015-04-08 23:49:21 -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>
          <dependson>141650</dependson>
    
    <dependson>142397</dependson>
    
    <dependson>142399</dependson>
          <blocked>138967</blocked>
    
    <blocked>141162</blocked>
    
    <blocked>142435</blocked>
    
    <blocked>143363</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066090</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-02 07:26:32 -0800</bug_when>
    <thetext>As per https://streams.spec.whatwg.org/#rs-constructor, the object passed to the ReadableStream constructor may have a start parameter.
This start parameter must be a method that is called when constructing the ReadableStream object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066098</commentid>
    <comment_count>1</comment_count>
      <attachid>245877</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-02 08:18:41 -0800</bug_when>
    <thetext>Created attachment 245877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067072</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-05 02:35:49 -0800</bug_when>
    <thetext>hmm, I see part of this patch was in patch attached to bug #138967, if that patch is now obsolete, please mark it as obsolete :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067086</commentid>
    <comment_count>3</comment_count>
      <attachid>246098</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-05 06:18:16 -0800</bug_when>
    <thetext>Created attachment 246098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067090</commentid>
    <comment_count>4</comment_count>
      <attachid>246100</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-05 07:25:05 -0800</bug_when>
    <thetext>Created attachment 246100
Adding missing include for mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068022</commentid>
    <comment_count>5</comment_count>
      <attachid>246100</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-10 04:03:52 -0800</bug_when>
    <thetext>Comment on attachment 246100
Adding missing include for mac builds

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

&gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; -        wrapper.resolve(stream.get());
&gt; +    auto successCallback = [wrapper]() mutable {
&gt; +        wrapper.resolve(jsUndefined());

Was this wrong?

&gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:65
&gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; -        wrapper.resolve(stream.get());
&gt; +    auto successCallback = [wrapper]() mutable {
&gt; +        wrapper.resolve(jsUndefined());

Ditto.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:62
&gt; +    Identifier propertyIdentifier(exec, identifier);
&gt; +    PropertyName propertyName = propertyIdentifier;

This could probably be PropertyName propertyName = Identifier(exec, identifier);

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:75
&gt; +inline static JSValue getPropertyFromObject(ExecState* exec, JSObject* object, const char* identifier)

static inline

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:89
&gt; +    JSValue value = call(exec, jsFunction, callType, callData, thisValue.isUndefined() ? m_readableStream : thisValue, arguments, &amp;exception);

How can this be called with m_readableStream == nullptr? Isn&apos;t start function a member of the underlaying source and not of readable stream?

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:121
&gt;          return;
&gt;      }

I know this is not part of this patch, but it looks weird to me that the underlaying source raises exceptions for construct parameters of the ReadableStream object. Also I wonder if the internal error is supposed to be used also for these kind of errors during constructor. If I understood the spec correctly, the internal error is set when the error function moves the stream to errored state. I think this arguments parsing should be done in constructJSReadableStream() returning directly throwVMError with a TypeError in this cases. That also prevents that a ReadableStreamJSSource is created just to return an error. If the parsing is done before, the constructor might receive the JSObject s parameter.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:127
&gt; +    JSValue argumentValue = exec-&gt;argument(0);
&gt; +    JSObject* argument = argumentValue.getObject();
&gt; +
&gt; +    JSValue startFunction = getPropertyFromObject(exec, argument, &quot;start&quot;);
&gt; +    if (!startFunction.isUndefined() &amp;&amp; !startFunction.isFunction()) {

You don&apos;t need argumentValue and argument, you can use exec-&gt;argument(0).getObject() directly.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:129
&gt; +        setInternalError(exec, ASCIILiteral(&quot;ReadableStream constructor object start property should be functions.&quot;));
&gt; +        return;

Same here, I wonder if this should prevent the stream from being created, or if this should raise an exception when start is called. And the same for the other functions when they are implemented. If we want to handle that before the stream is created, I think we could do that in the create() method, and pass start, pull and cancel functions as parameters of the constructor, or don&apos;t create the object and throw exceptions in case of errors. I also wonder why the underlaying object needs to be refcounted, It&apos;s created at the ReadableStream construction and the only instance is always owned only by the ReadableStream.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:189
&gt; +    m_readableStream = readableStream;
&gt; +
&gt; +    JSValue enqueueFunction = createReadableStreamEnqueueFunction(exec);
&gt; +    JSValue closeFunction = createReadableStreamCloseFunction(exec);
&gt; +    JSValue errorFunction = createReadableStreamErrorFunction(exec);
&gt; +
&gt; +    m_enqueueFunction.set(exec-&gt;vm(), enqueueFunction);
&gt; +    m_closeFunction.set(exec-&gt;vm(), closeFunction);
&gt; +    m_errorFunction.set(exec-&gt;vm(), errorFunction);
&gt; +
&gt; +    JSValue streamValue = m_readableStream;
&gt; +    setSlotToObject(exec, m_enqueueFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; +    setSlotToObject(exec, m_closeFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; +    setSlotToObject(exec, m_errorFunction.get(), &quot;ReadableStream&quot;, streamValue);

I&apos;m not sure I understand this. enqueue, close and error functions are members of ReadableStream, not the underlaying source, right? why are they created here then? Shouldn&apos;t they be created by ReadableStream and passed as arguments to start? Couldn&apos;t we call ReadableStream::start() instead of source-&gt;start()? Then the ReadableStream would call source-&gt;start() passing the 3 functions as arguments. If the source has a start function it will be called. If we can do that, maybe the underlaying source doesn&apos;t need know about the ReadableStream and we don&apos;t need the setStream, nor getJSReadableStream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068038</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-02-10 05:46:36 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; 
&gt; Was this wrong?

Yes. The spec says that promises should be resolved with undefined and we were resolving them wrong before.

&gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:65
&gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; 
&gt; Ditto.

Ditto.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:62
&gt; &gt; +    Identifier propertyIdentifier(exec, identifier);
&gt; &gt; +    PropertyName propertyName = propertyIdentifier;
&gt; 
&gt; This could probably be PropertyName propertyName = Identifier(exec,
&gt; identifier);

No, it can&apos;t. We had it like that before and the Identified object was going out of scope after the assignment and getting the slot could end up in a crash. Checked it with gdb, that&apos;s why I rewrote it like that.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:75
&gt; &gt; +inline static JSValue getPropertyFromObject(ExecState* exec, JSObject* object, const char* identifier)
&gt; 
&gt; static inline

Roger.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:89
&gt; &gt; +    JSValue value = call(exec, jsFunction, callType, callData, thisValue.isUndefined() ? m_readableStream : thisValue, arguments, &amp;exception);
&gt; 
&gt; How can this be called with m_readableStream == nullptr? Isn&apos;t start
&gt; function a member of the underlaying source and not of readable stream?

This doesn&apos;t mean that. We are there checking the passed thisValue and if that thisValue is undefined, then we pass m_readableStream as this object when invoking the function.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:121
&gt; &gt;          return;
&gt; &gt;      }
&gt; 
&gt; I know this is not part of this patch, but it looks weird to me that the
&gt; underlaying source raises exceptions for construct parameters of the
&gt; ReadableStream object. Also I wonder if the internal error is supposed to be
&gt; used also for these kind of errors during constructor. If I understood the
&gt; spec correctly, the internal error is set when the error function moves the
&gt; stream to errored state. I think this arguments parsing should be done in
&gt; constructJSReadableStream() returning directly throwVMError with a TypeError
&gt; in this cases. That also prevents that a ReadableStreamJSSource is created
&gt; just to return an error. If the parsing is done before, the constructor
&gt; might receive the JSObject s parameter.

This is a pending subject that we have. IMHO, we should continue improving the way we manage errors among the three worlds, JS, ReadableStream and the source.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:127
&gt; &gt; +    JSValue argumentValue = exec-&gt;argument(0);
&gt; &gt; +    JSObject* argument = argumentValue.getObject();
&gt; &gt; +
&gt; &gt; +    JSValue startFunction = getPropertyFromObject(exec, argument, &quot;start&quot;);
&gt; &gt; +    if (!startFunction.isUndefined() &amp;&amp; !startFunction.isFunction()) {
&gt; 
&gt; You don&apos;t need argumentValue and argument, you can use
&gt; exec-&gt;argument(0).getObject() directly.

Roger.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:129
&gt; &gt; +        setInternalError(exec, ASCIILiteral(&quot;ReadableStream constructor object start property should be functions.&quot;));
&gt; &gt; +        return;
&gt; 
&gt; Same here, I wonder if this should prevent the stream from being created, or
&gt; if this should raise an exception when start is called. And the same for the
&gt; other functions when they are implemented. If we want to handle that before
&gt; the stream is created, I think we could do that in the create() method, and
&gt; pass start, pull and cancel functions as parameters of the constructor, or
&gt; don&apos;t create the object and throw exceptions in case of errors.

Sorry, but I didn&apos;t understand you comment. What we are doing now is bailing out with an exception, meaning that the JSRS is not created, when the source finds any of those problems. And I don&apos;t think we can do that any other way because both objects are entangled, meaning that the spec says that we have to do somethings in some order, but we try to keep separated as much as possible the JSC world from the pure WebCore world. That&apos;s why we have to do things in a certain order.

&gt; I also
&gt; wonder why the underlaying object needs to be refcounted, It&apos;s created at
&gt; the ReadableStream construction and the only instance is always owned only
&gt; by the ReadableStream.

I am trying to know now if there is any case were the source can live by itself. I could give this a try, but it might happen that I should get to the RefCounted in case of native sources, like the XHR one, that we have developed but didn&apos;t push to bugzilla yet.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:189
&gt; &gt; +    m_readableStream = readableStream;
&gt; &gt; +
&gt; &gt; +    JSValue enqueueFunction = createReadableStreamEnqueueFunction(exec);
&gt; &gt; +    JSValue closeFunction = createReadableStreamCloseFunction(exec);
&gt; &gt; +    JSValue errorFunction = createReadableStreamErrorFunction(exec);
&gt; &gt; +
&gt; &gt; +    m_enqueueFunction.set(exec-&gt;vm(), enqueueFunction);
&gt; &gt; +    m_closeFunction.set(exec-&gt;vm(), closeFunction);
&gt; &gt; +    m_errorFunction.set(exec-&gt;vm(), errorFunction);
&gt; &gt; +
&gt; &gt; +    JSValue streamValue = m_readableStream;
&gt; &gt; +    setSlotToObject(exec, m_enqueueFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; +    setSlotToObject(exec, m_closeFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; +    setSlotToObject(exec, m_errorFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; 
&gt; I&apos;m not sure I understand this. enqueue, close and error functions are
&gt; members of ReadableStream, not the underlaying source, right? why are they
&gt; created here then? Shouldn&apos;t they be created by ReadableStream and passed as
&gt; arguments to start? Couldn&apos;t we call ReadableStream::start() instead of
&gt; source-&gt;start()? Then the ReadableStream would call source-&gt;start() passing
&gt; the 3 functions as arguments. If the source has a start function it will be
&gt; called. If we can do that, maybe the underlaying source doesn&apos;t need know
&gt; about the ReadableStream and we don&apos;t need the setStream, nor
&gt; getJSReadableStream.

Doing that would mean adding a lot of JSC code to the ReadableStream class, which we try to make as JSC unaware as possible.

It might be difficult to see it now, but this source is not the only one, we have right now working the XHR adaptation, which has a completely different source and it doesn&apos;t have anything to do with JS one, neither it needs all that JS adaptation, just to create a JSReadableStream with a custom XHR source providing the streams interface.

We decided to create this architecture and make the ReadableStreamJSSource because it makes sense from the architecture POV as the ReadableStream performs the common actions needed for JS and native sources and we create different sources for different things, like the XHR and the JS one, that is invoked only when we create a ReadableStream manually, but using the JS contructor. In the case of XHR, for example, you don&apos;t need any of this, just create the XMLHttpRequest object, set the response to &quot;stream&quot; type and get it with .response() (these api calls might not be accurate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068048</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-10 07:10:16 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; 
&gt; &gt; Was this wrong?
&gt; 
&gt; Yes. The spec says that promises should be resolved with undefined and we
&gt; were resolving them wrong before.

Ok, just curious, the changelog doesn&apos;t explain why this change, and it looked unrelated to the start implementation.

&gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:65
&gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Ditto.

Ditto :-)

&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:62
&gt; &gt; &gt; +    Identifier propertyIdentifier(exec, identifier);
&gt; &gt; &gt; +    PropertyName propertyName = propertyIdentifier;
&gt; &gt; 
&gt; &gt; This could probably be PropertyName propertyName = Identifier(exec,
&gt; &gt; identifier);
&gt; 
&gt; No, it can&apos;t. We had it like that before and the Identified object was going
&gt; out of scope after the assignment and getting the slot could end up in a
&gt; crash. Checked it with gdb, that&apos;s why I rewrote it like that.

Oh, ok.

&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:75
&gt; &gt; &gt; +inline static JSValue getPropertyFromObject(ExecState* exec, JSObject* object, const char* identifier)
&gt; &gt; 
&gt; &gt; static inline
&gt; 
&gt; Roger.
&gt; 
&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:89
&gt; &gt; &gt; +    JSValue value = call(exec, jsFunction, callType, callData, thisValue.isUndefined() ? m_readableStream : thisValue, arguments, &amp;exception);
&gt; &gt; 
&gt; &gt; How can this be called with m_readableStream == nullptr? Isn&apos;t start
&gt; &gt; function a member of the underlaying source and not of readable stream?
&gt; 
&gt; This doesn&apos;t mean that. We are there checking the passed thisValue and if
&gt; that thisValue is undefined, then we pass m_readableStream as this object
&gt; when invoking the function.

Right, I understood it wrongly, but still, callFunction is never called with a thisValue, or am I wrong again?

&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:121
&gt; &gt; &gt;          return;
&gt; &gt; &gt;      }
&gt; &gt; 
&gt; &gt; I know this is not part of this patch, but it looks weird to me that the
&gt; &gt; underlaying source raises exceptions for construct parameters of the
&gt; &gt; ReadableStream object. Also I wonder if the internal error is supposed to be
&gt; &gt; used also for these kind of errors during constructor. If I understood the
&gt; &gt; spec correctly, the internal error is set when the error function moves the
&gt; &gt; stream to errored state. I think this arguments parsing should be done in
&gt; &gt; constructJSReadableStream() returning directly throwVMError with a TypeError
&gt; &gt; in this cases. That also prevents that a ReadableStreamJSSource is created
&gt; &gt; just to return an error. If the parsing is done before, the constructor
&gt; &gt; might receive the JSObject s parameter.
&gt; 
&gt; This is a pending subject that we have. IMHO, we should continue improving
&gt; the way we manage errors among the three worlds, JS, ReadableStream and the
&gt; source.

Just looked weird to me saving the type errors that happen while constructing the JS objects in an m_error, instead of just throwing the exceptions.

&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:127
&gt; &gt; &gt; +    JSValue argumentValue = exec-&gt;argument(0);
&gt; &gt; &gt; +    JSObject* argument = argumentValue.getObject();
&gt; &gt; &gt; +
&gt; &gt; &gt; +    JSValue startFunction = getPropertyFromObject(exec, argument, &quot;start&quot;);
&gt; &gt; &gt; +    if (!startFunction.isUndefined() &amp;&amp; !startFunction.isFunction()) {
&gt; &gt; 
&gt; &gt; You don&apos;t need argumentValue and argument, you can use
&gt; &gt; exec-&gt;argument(0).getObject() directly.
&gt; 
&gt; Roger.
&gt; 
&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:129
&gt; &gt; &gt; +        setInternalError(exec, ASCIILiteral(&quot;ReadableStream constructor object start property should be functions.&quot;));
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; Same here, I wonder if this should prevent the stream from being created, or
&gt; &gt; if this should raise an exception when start is called. And the same for the
&gt; &gt; other functions when they are implemented. If we want to handle that before
&gt; &gt; the stream is created, I think we could do that in the create() method, and
&gt; &gt; pass start, pull and cancel functions as parameters of the constructor, or
&gt; &gt; don&apos;t create the object and throw exceptions in case of errors.
&gt; 
&gt; Sorry, but I didn&apos;t understand you comment. What we are doing now is bailing
&gt; out with an exception, meaning that the JSRS is not created, when the source
&gt; finds any of those problems. And I don&apos;t think we can do that any other way
&gt; because both objects are entangled, meaning that the spec says that we have
&gt; to do somethings in some order, but we try to keep separated as much as
&gt; possible the JSC world from the pure WebCore world. That&apos;s why we have to do
&gt; things in a certain order.

I&apos;m not talking about changing the order things happen, just moving the code where it logically belongs, but you know the spec better than me.

&gt; &gt; I also
&gt; &gt; wonder why the underlaying object needs to be refcounted, It&apos;s created at
&gt; &gt; the ReadableStream construction and the only instance is always owned only
&gt; &gt; by the ReadableStream.
&gt; 
&gt; I am trying to know now if there is any case were the source can live by
&gt; itself. I could give this a try, but it might happen that I should get to
&gt; the RefCounted in case of native sources, like the XHR one, that we have
&gt; developed but didn&apos;t push to bugzilla yet.

What&apos;s the XHR source? could you point me to the spec and code you have for that?

&gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:189
&gt; &gt; &gt; +    m_readableStream = readableStream;
&gt; &gt; &gt; +
&gt; &gt; &gt; +    JSValue enqueueFunction = createReadableStreamEnqueueFunction(exec);
&gt; &gt; &gt; +    JSValue closeFunction = createReadableStreamCloseFunction(exec);
&gt; &gt; &gt; +    JSValue errorFunction = createReadableStreamErrorFunction(exec);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    m_enqueueFunction.set(exec-&gt;vm(), enqueueFunction);
&gt; &gt; &gt; +    m_closeFunction.set(exec-&gt;vm(), closeFunction);
&gt; &gt; &gt; +    m_errorFunction.set(exec-&gt;vm(), errorFunction);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    JSValue streamValue = m_readableStream;
&gt; &gt; &gt; +    setSlotToObject(exec, m_enqueueFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; &gt; +    setSlotToObject(exec, m_closeFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; &gt; +    setSlotToObject(exec, m_errorFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand this. enqueue, close and error functions are
&gt; &gt; members of ReadableStream, not the underlaying source, right? why are they
&gt; &gt; created here then? Shouldn&apos;t they be created by ReadableStream and passed as
&gt; &gt; arguments to start? Couldn&apos;t we call ReadableStream::start() instead of
&gt; &gt; source-&gt;start()? Then the ReadableStream would call source-&gt;start() passing
&gt; &gt; the 3 functions as arguments. If the source has a start function it will be
&gt; &gt; called. If we can do that, maybe the underlaying source doesn&apos;t need know
&gt; &gt; about the ReadableStream and we don&apos;t need the setStream, nor
&gt; &gt; getJSReadableStream.
&gt; 
&gt; Doing that would mean adding a lot of JSC code to the ReadableStream class,
&gt; which we try to make as JSC unaware as possible.

I&apos;m not talking about ReadableStream class, but about JSReadableStream

&gt; It might be difficult to see it now, but this source is not the only one, we
&gt; have right now working the XHR adaptation, which has a completely different
&gt; source and it doesn&apos;t have anything to do with JS one, neither it needs all
&gt; that JS adaptation, just to create a JSReadableStream with a custom XHR
&gt; source providing the streams interface.
&gt; 
&gt; We decided to create this architecture and make the ReadableStreamJSSource
&gt; because it makes sense from the architecture POV as the ReadableStream
&gt; performs the common actions needed for JS and native sources and we create
&gt; different sources for different things, like the XHR and the JS one, that is
&gt; invoked only when we create a ReadableStream manually, but using the JS
&gt; contructor. In the case of XHR, for example, you don&apos;t need any of this,
&gt; just create the XMLHttpRequest object, set the response to &quot;stream&quot; type and
&gt; get it with .response() (these api calls might not be accurate).

I didn&apos;t know there were more kind of underlaying sources, I&apos;ll check the spec again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068090</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-10 09:49:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; &gt; 
&gt; &gt; &gt; Was this wrong?
&gt; &gt; 
&gt; &gt; Yes. The spec says that promises should be resolved with undefined and we
&gt; &gt; were resolving them wrong before.
&gt; 
&gt; Ok, just curious, the changelog doesn&apos;t explain why this change, and it
&gt; looked unrelated to the start implementation.


Yep, it should go in the changelog.

&gt; &gt; It might be difficult to see it now, but this source is not the only one, we
&gt; &gt; have right now working the XHR adaptation, which has a completely different
&gt; &gt; source and it doesn&apos;t have anything to do with JS one, neither it needs all
&gt; &gt; that JS adaptation, just to create a JSReadableStream with a custom XHR
&gt; &gt; source providing the streams interface.
&gt; &gt; 
&gt; &gt; We decided to create this architecture and make the ReadableStreamJSSource
&gt; &gt; because it makes sense from the architecture POV as the ReadableStream
&gt; &gt; performs the common actions needed for JS and native sources and we create
&gt; &gt; different sources for different things, like the XHR and the JS one, that is
&gt; &gt; invoked only when we create a ReadableStream manually, but using the JS
&gt; &gt; contructor. In the case of XHR, for example, you don&apos;t need any of this,
&gt; &gt; just create the XMLHttpRequest object, set the response to &quot;stream&quot; type and
&gt; &gt; get it with .response() (these api calls might not be accurate).
&gt; 
&gt; I didn&apos;t know there were more kind of underlaying sources, I&apos;ll check the
&gt; spec again.

At the time we developed the XHR source, it was supposed for streams to be integrated into XHR. The spec that was used has now been deprecated, although it is already implemented in other browsers.
It seems the overall direction is to add streams support for the replacement of XHR, the fetch API.

In any case, streams can either have JS sources/consumers or native sources/consumers: XHR/Fetch, media stream...
That is why we are trying hard to keep ReadableStream as JSC unaware as possible.
Similar strategies have been used for other promise-related APIs in WebKit by the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068153</commentid>
    <comment_count>9</comment_count>
      <attachid>246100</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-10 15:03:37 -0800</bug_when>
    <thetext>Comment on attachment 246100
Adding missing include for mac builds

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

I only had time for a quick review. Here is some comment:

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:89
&gt; +    callOnMainThread(std::bind(WTF::move(m_closedCallback)));

I would ASSERT(!m_closedCallback) after this since keeping the promise alive would be pretty bad.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:96
&gt; +    if (m_state == State::Closed)
&gt; +        resolveClosedCallback();

I don&apos;t get why you resolve immediately on closed().

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:104
&gt; +        m_state = State::Closed;
&gt; +        resolveReadyCallback();
&gt; +        resolveClosedCallback();

Shouldn&apos;t this be:
    resolveReadyCallback();
    m_state = State::Closed;
    resolveClosedCallback();

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:111
&gt; +    if (!m_readyCallback)

Add ASSERT(m_state == State::Waiting)?

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:113
&gt; +    callOnMainThread(std::bind(WTF::move(m_readyCallback)));

I would ASSERT(!m_readyCallback) after this since keeping the promise alive would be pretty bad.

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:120
&gt; +    if (m_state != State::Waiting)
&gt; +        resolveReadyCallback();

I don&apos;t get why you resolve immediately on ready().

&gt;&gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt;&gt; +        wrapper.resolve(jsUndefined());
&gt; 
&gt; Was this wrong?

Good catch.

It is a bit weird to use undefined but that&apos;s what the spec says...

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:113
&gt; +    m_startFunction.set(exec-&gt;vm(), jsUndefined());

I don&apos;t get this.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:67
&gt; +    JSReadableStream* m_readableStream;

m_readableStream = nullptr;

And you can remove the initialization from the constructor.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:75
&gt; +    // Functions given as constructor parameters.
&gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_startFunction;
&gt; +
&gt; +    // Functions passed as parameters when calling the functions passed in the constructor.
&gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_enqueueFunction;
&gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_closeFunction;
&gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_errorFunction;

Why aren&apos;t those typed?

&gt; LayoutTests/ChangeLog:15
&gt; +        * streams/readablestream-start-expected.txt: Added.
&gt; +        * streams/readablestream-start.html: Added.

Do you have coverage for reusing the premise object?

You create a new promise every time, which is observable. I am actually unconvinced it is correct.

For example:
    var promise1 = readableStream.ready;
    promise1.then(foobar);
    readableStream.ready === promise1; // Shouldn&apos;t this be true? Is it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068287</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-11 00:16:23 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; &gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Was this wrong?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes. The spec says that promises should be resolved with undefined and we
&gt; &gt; &gt; were resolving them wrong before.
&gt; &gt; 
&gt; &gt; Ok, just curious, the changelog doesn&apos;t explain why this change, and it
&gt; &gt; looked unrelated to the start implementation.
&gt; 
&gt; 
&gt; Yep, it should go in the changelog.

Or in a different patch if it&apos;s unrelated to this bug :-)

&gt; &gt; &gt; It might be difficult to see it now, but this source is not the only one, we
&gt; &gt; &gt; have right now working the XHR adaptation, which has a completely different
&gt; &gt; &gt; source and it doesn&apos;t have anything to do with JS one, neither it needs all
&gt; &gt; &gt; that JS adaptation, just to create a JSReadableStream with a custom XHR
&gt; &gt; &gt; source providing the streams interface.
&gt; &gt; &gt; 
&gt; &gt; &gt; We decided to create this architecture and make the ReadableStreamJSSource
&gt; &gt; &gt; because it makes sense from the architecture POV as the ReadableStream
&gt; &gt; &gt; performs the common actions needed for JS and native sources and we create
&gt; &gt; &gt; different sources for different things, like the XHR and the JS one, that is
&gt; &gt; &gt; invoked only when we create a ReadableStream manually, but using the JS
&gt; &gt; &gt; contructor. In the case of XHR, for example, you don&apos;t need any of this,
&gt; &gt; &gt; just create the XMLHttpRequest object, set the response to &quot;stream&quot; type and
&gt; &gt; &gt; get it with .response() (these api calls might not be accurate).
&gt; &gt; 
&gt; &gt; I didn&apos;t know there were more kind of underlaying sources, I&apos;ll check the
&gt; &gt; spec again.
&gt; 
&gt; At the time we developed the XHR source, it was supposed for streams to be
&gt; integrated into XHR. The spec that was used has now been deprecated,
&gt; although it is already implemented in other browsers.
&gt; It seems the overall direction is to add streams support for the replacement
&gt; of XHR, the fetch API.
&gt; 
&gt; In any case, streams can either have JS sources/consumers or native
&gt; sources/consumers: XHR/Fetch, media stream...
&gt; That is why we are trying hard to keep ReadableStream as JSC unaware as
&gt; possible.
&gt; Similar strategies have been used for other promise-related APIs in WebKit
&gt; by the way.

And I agree, but I meant JSReadableStream, not ReadableStream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068311</commentid>
    <comment_count>11</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-02-11 03:12:02 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; &gt; &gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; &gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; &gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; &gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Was this wrong?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes. The spec says that promises should be resolved with undefined and we
&gt; &gt; &gt; &gt; were resolving them wrong before.
&gt; &gt; &gt; 
&gt; &gt; &gt; Ok, just curious, the changelog doesn&apos;t explain why this change, and it
&gt; &gt; &gt; looked unrelated to the start implementation.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Yep, it should go in the changelog.
&gt; 
&gt; Or in a different patch if it&apos;s unrelated to this bug :-)

I agree on having it on a different patch. Makes sense.

&gt; &gt; &gt; &gt; It might be difficult to see it now, but this source is not the only one, we
&gt; &gt; &gt; &gt; have right now working the XHR adaptation, which has a completely different
&gt; &gt; &gt; &gt; source and it doesn&apos;t have anything to do with JS one, neither it needs all
&gt; &gt; &gt; &gt; that JS adaptation, just to create a JSReadableStream with a custom XHR
&gt; &gt; &gt; &gt; source providing the streams interface.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We decided to create this architecture and make the ReadableStreamJSSource
&gt; &gt; &gt; &gt; because it makes sense from the architecture POV as the ReadableStream
&gt; &gt; &gt; &gt; performs the common actions needed for JS and native sources and we create
&gt; &gt; &gt; &gt; different sources for different things, like the XHR and the JS one, that is
&gt; &gt; &gt; &gt; invoked only when we create a ReadableStream manually, but using the JS
&gt; &gt; &gt; &gt; contructor. In the case of XHR, for example, you don&apos;t need any of this,
&gt; &gt; &gt; &gt; just create the XMLHttpRequest object, set the response to &quot;stream&quot; type and
&gt; &gt; &gt; &gt; get it with .response() (these api calls might not be accurate).
&gt; &gt; &gt; 
&gt; &gt; &gt; I didn&apos;t know there were more kind of underlaying sources, I&apos;ll check the
&gt; &gt; &gt; spec again.
&gt; &gt; 
&gt; &gt; At the time we developed the XHR source, it was supposed for streams to be
&gt; &gt; integrated into XHR. The spec that was used has now been deprecated,
&gt; &gt; although it is already implemented in other browsers.
&gt; &gt; It seems the overall direction is to add streams support for the replacement
&gt; &gt; of XHR, the fetch API.
&gt; &gt; 
&gt; &gt; In any case, streams can either have JS sources/consumers or native
&gt; &gt; sources/consumers: XHR/Fetch, media stream...
&gt; &gt; That is why we are trying hard to keep ReadableStream as JSC unaware as
&gt; &gt; possible.
&gt; &gt; Similar strategies have been used for other promise-related APIs in WebKit
&gt; &gt; by the way.
&gt; 
&gt; And I agree, but I meant JSReadableStream, not ReadableStream

I might not be clear explaining the whole architecture. We have

* JSReadableStream which is the autogenerated class from the IDL bridging from JS to WebCore. There we adapt only the methods declared in the IDL file, including the constructor. A JS created stream might use all methods including the constructor (actually the constructor is compulsory in this case) and a native stream might use all methods but it won&apos;t use the constructor as the object will be constructed somewhere else, say XMLHttpRequest.response().

* ReadableStream implements the common parts of the algorithm for native and JS sources, it delegates some parts of the code on the ReadableStreamSource abstract class.

* ReadableStreamJSSource, inherits ReadableStreamSource and implements the specific parts of the spec that have to do only with JS, say invoking JS methods, preparing exceptions to be launched, etc. In this class we have to adapt data and operations between ReadableStream and JSReadableStream, so that ReadableStream stays as JSC unaware as possible and we can put things directly to JSReadableStream. That&apos;s why sometimes JSReadableStream deals directly with the source, because of the data we don&apos;t want to store in ReadableStream.

I hope to have been a bit clearer now and please do not hesitate to put in doubt any decission or ask any questions. That&apos;s what we are here for :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068318</commentid>
    <comment_count>12</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-02-11 03:43:33 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:89
&gt; &gt; +    callOnMainThread(std::bind(WTF::move(m_closedCallback)));
&gt; 
&gt; I would ASSERT(!m_closedCallback) after this since keeping the promise alive
&gt; would be pretty bad.

Roger.

&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:96
&gt; &gt; +    if (m_state == State::Closed)
&gt; &gt; +        resolveClosedCallback();
&gt; 
&gt; I don&apos;t get why you resolve immediately on closed().

Imagine a code like:

rs.close();
rs.closed().then(whatever);

We might have already transitioned to &quot;closed&quot; before the promise was requested and if we don&apos;t do this, the promise might end up unresolved. Btw, by immediatelly resolving we understand here that we call the resolve function, but it is deferred to the main thread.

&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:104
&gt; &gt; +        m_state = State::Closed;
&gt; &gt; +        resolveReadyCallback();
&gt; &gt; +        resolveClosedCallback();
&gt; 
&gt; Shouldn&apos;t this be:
&gt;     resolveReadyCallback();
&gt;     m_state = State::Closed;
&gt;     resolveClosedCallback();

The spec says that when closing we have to fulfill both ready and closed. We want that the state is already marked as closed while we resolve the ready callback because the client has to get the proper state. That&apos;s why semantically, IMHO, it is better this way.

Why did I write &quot;semantically&quot;? Because it doesn&apos;t matter as promises are resolved asynchronously so the state will be the right one when the promise is actually going to be fulfilled.
 
&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:111
&gt; &gt; +    if (!m_readyCallback)
&gt; 
&gt; Add ASSERT(m_state == State::Waiting)?

I don&apos;t think we can, because I am almost positive that we have to resolve any pending ready promises in other states too, for example when we move to errored.

&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:113
&gt; &gt; +    callOnMainThread(std::bind(WTF::move(m_readyCallback)));
&gt; 
&gt; I would ASSERT(!m_readyCallback) after this since keeping the promise alive
&gt; would be pretty bad.

Roger.

&gt; &gt; Source/WebCore/Modules/streams/ReadableStream.cpp:120
&gt; &gt; +    if (m_state != State::Waiting)
&gt; &gt; +        resolveReadyCallback();
&gt; 
&gt; I don&apos;t get why you resolve immediately on ready().

Same case as for closed.
 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt;&gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; 
&gt; &gt; Was this wrong?
&gt; 
&gt; Good catch.
&gt; 
&gt; It is a bit weird to use undefined but that&apos;s what the spec says...

No need to tell me :) actually there is a reference test checking these things O_O

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:113
&gt; &gt; +    m_startFunction.set(exec-&gt;vm(), jsUndefined());
&gt; 
&gt; I don&apos;t get this.

We initialize all these functions to undefined and after that we overwrite then with the corresponding value given in the constructor if any, but it is good to have them like that to check later if the value is undefined, that means that it wasn&apos;t set by the constructor and we have to go with the spec default behavior.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:67
&gt; &gt; +    JSReadableStream* m_readableStream;
&gt; 
&gt; m_readableStream = nullptr;
&gt; 
&gt; And you can remove the initialization from the constructor.

Roger.

&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:75
&gt; &gt; +    // Functions given as constructor parameters.
&gt; &gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_startFunction;
&gt; &gt; +
&gt; &gt; +    // Functions passed as parameters when calling the functions passed in the constructor.
&gt; &gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_enqueueFunction;
&gt; &gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_closeFunction;
&gt; &gt; +    JSC::Strong&lt;JSC::Unknown&gt; m_errorFunction;
&gt; 
&gt; Why aren&apos;t those typed?

Roger.

&gt; &gt; LayoutTests/ChangeLog:15
&gt; &gt; +        * streams/readablestream-start-expected.txt: Added.
&gt; &gt; +        * streams/readablestream-start.html: Added.
&gt; 
&gt; Do you have coverage for reusing the premise object?
&gt; 
&gt; You create a new promise every time, which is observable. I am actually
&gt; unconvinced it is correct.
&gt; 
&gt; For example:
&gt;     var promise1 = readableStream.ready;
&gt;     promise1.then(foobar);
&gt;     readableStream.ready === promise1; // Shouldn&apos;t this be true? Is it?

Very interesting comment. The spec speaks about storing the promises in slots and, they are returned when requested and replaced when they are resolved. So I conclude your assumption is right. We&apos;ll look at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068326</commentid>
    <comment_count>13</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-02-11 04:37:20 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:89
&gt; &gt; &gt; &gt; +    JSValue value = call(exec, jsFunction, callType, callData, thisValue.isUndefined() ? m_readableStream : thisValue, arguments, &amp;exception);
&gt; &gt; &gt; 
&gt; &gt; &gt; How can this be called with m_readableStream == nullptr? Isn&apos;t start
&gt; &gt; &gt; function a member of the underlaying source and not of readable stream?
&gt; &gt; 
&gt; &gt; This doesn&apos;t mean that. We are there checking the passed thisValue and if
&gt; &gt; that thisValue is undefined, then we pass m_readableStream as this object
&gt; &gt; when invoking the function.
&gt; 
&gt; Right, I understood it wrongly, but still, callFunction is never called with
&gt; a thisValue, or am I wrong again?

It is, I don&apos;t remember more places, but we have at least the strategy methods:

unsigned ReadableStreamJSSource::chunkSize(ExecState* exec, JSValue chunk);
bool ReadableStreamJSSource::shouldApplyBackpressure(unsigned queueSize);

Actually I had to do this when I wrote one of the test using a different strategy that was created as an object with its attributes that were never reached with the former implementation we were passing undefined there.

&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:127
&gt; &gt; &gt; &gt; +    JSValue argumentValue = exec-&gt;argument(0);
&gt; &gt; &gt; &gt; +    JSObject* argument = argumentValue.getObject();
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    JSValue startFunction = getPropertyFromObject(exec, argument, &quot;start&quot;);
&gt; &gt; &gt; &gt; +    if (!startFunction.isUndefined() &amp;&amp; !startFunction.isFunction()) {
&gt; &gt; &gt; 
&gt; &gt; &gt; You don&apos;t need argumentValue and argument, you can use
&gt; &gt; &gt; exec-&gt;argument(0).getObject() directly.
&gt; &gt; 
&gt; &gt; Roger.
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:129
&gt; &gt; &gt; &gt; +        setInternalError(exec, ASCIILiteral(&quot;ReadableStream constructor object start property should be functions.&quot;));
&gt; &gt; &gt; &gt; +        return;
&gt; &gt; &gt; 
&gt; &gt; &gt; Same here, I wonder if this should prevent the stream from being created, or
&gt; &gt; &gt; if this should raise an exception when start is called. And the same for the
&gt; &gt; &gt; other functions when they are implemented. If we want to handle that before
&gt; &gt; &gt; the stream is created, I think we could do that in the create() method, and
&gt; &gt; &gt; pass start, pull and cancel functions as parameters of the constructor, or
&gt; &gt; &gt; don&apos;t create the object and throw exceptions in case of errors.
&gt; &gt; 
&gt; &gt; Sorry, but I didn&apos;t understand you comment. What we are doing now is bailing
&gt; &gt; out with an exception, meaning that the JSRS is not created, when the source
&gt; &gt; finds any of those problems. And I don&apos;t think we can do that any other way
&gt; &gt; because both objects are entangled, meaning that the spec says that we have
&gt; &gt; to do somethings in some order, but we try to keep separated as much as
&gt; &gt; possible the JSC world from the pure WebCore world. That&apos;s why we have to do
&gt; &gt; things in a certain order.
&gt; 
&gt; I&apos;m not talking about changing the order things happen, just moving the code
&gt; where it logically belongs, but you know the spec better than me.

From my POV it is a trade off between architecture and spec and it is not easy :)

&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:189
&gt; &gt; &gt; &gt; +    m_readableStream = readableStream;
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    JSValue enqueueFunction = createReadableStreamEnqueueFunction(exec);
&gt; &gt; &gt; &gt; +    JSValue closeFunction = createReadableStreamCloseFunction(exec);
&gt; &gt; &gt; &gt; +    JSValue errorFunction = createReadableStreamErrorFunction(exec);
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    m_enqueueFunction.set(exec-&gt;vm(), enqueueFunction);
&gt; &gt; &gt; &gt; +    m_closeFunction.set(exec-&gt;vm(), closeFunction);
&gt; &gt; &gt; &gt; +    m_errorFunction.set(exec-&gt;vm(), errorFunction);
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    JSValue streamValue = m_readableStream;
&gt; &gt; &gt; &gt; +    setSlotToObject(exec, m_enqueueFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; &gt; &gt; +    setSlotToObject(exec, m_closeFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; &gt; &gt; +    setSlotToObject(exec, m_errorFunction.get(), &quot;ReadableStream&quot;, streamValue);
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure I understand this. enqueue, close and error functions are
&gt; &gt; &gt; members of ReadableStream, not the underlaying source, right? why are they
&gt; &gt; &gt; created here then? Shouldn&apos;t they be created by ReadableStream and passed as
&gt; &gt; &gt; arguments to start? Couldn&apos;t we call ReadableStream::start() instead of
&gt; &gt; &gt; source-&gt;start()? Then the ReadableStream would call source-&gt;start() passing
&gt; &gt; &gt; the 3 functions as arguments. If the source has a start function it will be
&gt; &gt; &gt; called. If we can do that, maybe the underlaying source doesn&apos;t need know
&gt; &gt; &gt; about the ReadableStream and we don&apos;t need the setStream, nor
&gt; &gt; &gt; getJSReadableStream.
&gt; &gt; 
&gt; &gt; Doing that would mean adding a lot of JSC code to the ReadableStream class,
&gt; &gt; which we try to make as JSC unaware as possible.
&gt; 
&gt; I&apos;m not talking about ReadableStream class, but about JSReadableStream

enqueue, close and error are one of those things that only make sense in the JS world with JS based streams and that&apos;s why given our arch, we create them in the ReadableStreamJSSource to adapt code from the ReadableStream. They don&apos;t make sense in a native source, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069459</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-16 09:28:15 -0800</bug_when>
    <thetext>&gt; &gt; &gt; LayoutTests/ChangeLog:15
&gt; &gt; &gt; +        * streams/readablestream-start-expected.txt: Added.
&gt; &gt; &gt; +        * streams/readablestream-start.html: Added.
&gt; &gt; 
&gt; &gt; Do you have coverage for reusing the premise object?
&gt; &gt; 
&gt; &gt; You create a new promise every time, which is observable. I am actually
&gt; &gt; unconvinced it is correct.
&gt; &gt; 
&gt; &gt; For example:
&gt; &gt;     var promise1 = readableStream.ready;
&gt; &gt;     promise1.then(foobar);
&gt; &gt;     readableStream.ready === promise1; // Shouldn&apos;t this be true? Is it?
&gt; 
&gt; Very interesting comment. The spec speaks about storing the promises in
&gt; slots and, they are returned when requested and replaced when they are
&gt; resolved. So I conclude your assumption is right. We&apos;ll look at this.

Good point, I created bug 141650 to capture that. It seems to be best handled separately, especially if we handle that at JSReadableStream level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069465</commentid>
    <comment_count>15</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-16 09:38:00 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSReadableStreamCustom.cpp:54
&gt; &gt; &gt; &gt; &gt; &gt; &gt; -    auto successCallback = [wrapper](RefPtr&lt;ReadableStream&gt; stream) mutable {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; -        wrapper.resolve(stream.get());
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +    auto successCallback = [wrapper]() mutable {
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +        wrapper.resolve(jsUndefined());
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Was this wrong?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Yes. The spec says that promises should be resolved with undefined and we
&gt; &gt; &gt; &gt; &gt; were resolving them wrong before.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Ok, just curious, the changelog doesn&apos;t explain why this change, and it
&gt; &gt; &gt; &gt; looked unrelated to the start implementation.
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Yep, it should go in the changelog.
&gt; &gt; 
&gt; &gt; Or in a different patch if it&apos;s unrelated to this bug :-)
&gt; 
&gt; I agree on having it on a different patch. Makes sense.

Well, we are not able to test that behaviour without adding some functionality that triggers promise resolution.
We can split this in two bugs, but we would end up changing code twice.

I would prefer keeping the fix here, as we would have the functionality right from the beginning, and the tests will be marked passed.
But I am ok if you prefer to have it as two patches to get a easier/better review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071192</commentid>
    <comment_count>16</comment_count>
      <attachid>247116</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-23 06:58:11 -0800</bug_when>
    <thetext>Created attachment 247116
Updated according review and bug 141650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071649</commentid>
    <comment_count>17</comment_count>
      <attachid>247231</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-24 07:05:07 -0800</bug_when>
    <thetext>Created attachment 247231
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072062</commentid>
    <comment_count>18</comment_count>
      <attachid>247331</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-02-25 08:20:22 -0800</bug_when>
    <thetext>Created attachment 247331
Improving style and comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074981</commentid>
    <comment_count>19</comment_count>
      <attachid>248073</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-06 09:46:16 -0800</bug_when>
    <thetext>Created attachment 248073
Rebasing a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075248</commentid>
    <comment_count>20</comment_count>
      <attachid>248148</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-07 01:13:38 -0800</bug_when>
    <thetext>Created attachment 248148
Removing promise resolution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075644</commentid>
    <comment_count>21</comment_count>
      <attachid>248253</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-09 10:28:48 -0700</bug_when>
    <thetext>Created attachment 248253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076095</commentid>
    <comment_count>22</comment_count>
      <attachid>248253</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-10 14:57:08 -0700</bug_when>
    <thetext>Comment on attachment 248253
Patch

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

Quick review. Nothing bad so far, some comments:

&gt; Source/WebCore/ChangeLog:9
&gt; +        This function takes three functions (close , enqueue and error) as

&quot; , &quot; -&gt; &quot;, &quot;

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:34
&gt;  #include &quot;ReadableStreamJSSource.h&quot;
&gt; +#include &quot;ScriptExecutionContext.h&quot;

Let&apos;s fix the headers:
    #include &quot;ReadableStreamJSSource.h&quot;
should be just after
    #include &quot;config.h&quot;

All the other includes should be together.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:130
&gt; +    // FIXME: Implement this method.

No need for this FIXME, notImplemented() has the same information.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:154
&gt; +    // FIXME: Implement this method.

No need for this.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:64
&gt; +    JSC::JSValue callFunction(JSC::ExecState*, JSC::JSValue /* jsFunction */, JSC::JSValue /* thisValue */, const JSC::ArgList&amp;);

There should be no need to comment the argument names here.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_enqueueFunction;
&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_closeFunction;
&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_errorFunction;

I am quite confused why you hold strongly onto those.

It looks to me like they could be created on the fly when calling the function and never needed again.

Can you explain?

&gt; LayoutTests/ChangeLog:9
&gt; +        Added a test to check that ReadableStream constructor accepts an empty object as parameter.
&gt; +        Added tests to check that start JS function is called, can close a stream and can throw errors.

IMHO you should have two more test:
-Test what is the &quot;this&quot; argument in the start function.
-Check the types of enqueue, close, error

&gt; LayoutTests/streams/readablestream-start.html:23
&gt; +    mashedError = new Error(&apos;potato&apos;);

hehe

&gt; LayoutTests/streams/readablestream-start.html:28
&gt; +            function(enqueue, close, error) {
&gt; +                throw mashedError;

Good test!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076146</commentid>
    <comment_count>23</comment_count>
      <attachid>248253</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-10 17:34:08 -0700</bug_when>
    <thetext>Comment on attachment 248253
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        This function takes three functions (close , enqueue and error) as
&gt; 
&gt; &quot; , &quot; -&gt; &quot;, &quot;

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:34
&gt;&gt; +#include &quot;ScriptExecutionContext.h&quot;
&gt; 
&gt; Let&apos;s fix the headers:
&gt;     #include &quot;ReadableStreamJSSource.h&quot;
&gt; should be just after
&gt;     #include &quot;config.h&quot;
&gt; 
&gt; All the other includes should be together.

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:130
&gt;&gt; +    // FIXME: Implement this method.
&gt; 
&gt; No need for this FIXME, notImplemented() has the same information.

OK

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:135
&gt; +static JSFunction* createReadableStreamEnqueueFunction(ExecState* exec)

Will add &quot;inline&quot; to all three create functions.

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:154
&gt;&gt; +    // FIXME: Implement this method.
&gt; 
&gt; No need for this.

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:64
&gt;&gt; +    JSC::JSValue callFunction(JSC::ExecState*, JSC::JSValue /* jsFunction */, JSC::JSValue /* thisValue */, const JSC::ArgList&amp;);
&gt; 
&gt; There should be no need to comment the argument names here.

This is purely informal, I will remove them.

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt;&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_errorFunction;
&gt; 
&gt; I am quite confused why you hold strongly onto those.
&gt; 
&gt; It looks to me like they could be created on the fly when calling the function and never needed again.
&gt; 
&gt; Can you explain?

Enqueue and close are passed as parameters to the pull function, which may be called several times.
We could create error on the fly given how we plan to handle pull promise resolution.
I will add a FIXME so that we can revisit that case later on.

&gt;&gt; LayoutTests/ChangeLog:9
&gt;&gt; +        Added tests to check that start JS function is called, can close a stream and can throw errors.
&gt; 
&gt; IMHO you should have two more test:
&gt; -Test what is the &quot;this&quot; argument in the start function.
&gt; -Check the types of enqueue, close, error

The types of enqueue, close and error are already checked.
I will add an assert for &quot;this&quot; and improve the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076149</commentid>
    <comment_count>24</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-10 17:38:26 -0700</bug_when>
    <thetext>
&gt; &gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:64
&gt; &gt;&gt; +    JSC::JSValue callFunction(JSC::ExecState*, JSC::JSValue /* jsFunction */, JSC::JSValue /* thisValue */, const JSC::ArgList&amp;);
&gt; &gt; 
&gt; &gt; There should be no need to comment the argument names here.
&gt; 
&gt; This is purely informal, I will remove them.
s/informal/informative/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076165</commentid>
    <comment_count>25</comment_count>
      <attachid>248381</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-10 18:20:29 -0700</bug_when>
    <thetext>Created attachment 248381
Fix according review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076231</commentid>
    <comment_count>26</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-10 22:17:50 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:64
&gt; &gt;&gt; +    JSC::JSValue callFunction(JSC::ExecState*, JSC::JSValue /* jsFunction */, JSC::JSValue /* thisValue */, const JSC::ArgList&amp;);
&gt; &gt; 
&gt; &gt; There should be no need to comment the argument names here.
&gt; 
&gt; This is purely informal, I will remove them.

Note that having the argument names is good here because it is not clear what the arguments are from their type.

My comment was referring to the &quot;/* */&quot;, those should be unnecessary, the name will just be ignored by the compiler.

&gt; &gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt; &gt;&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_errorFunction;
&gt; &gt; 
&gt; &gt; I am quite confused why you hold strongly onto those.
&gt; &gt; 
&gt; &gt; It looks to me like they could be created on the fly when calling the function and never needed again.
&gt; &gt; 
&gt; &gt; Can you explain?
&gt; 
&gt; Enqueue and close are passed as parameters to the pull function, which may
&gt; be called several times.
&gt; We could create error on the fly given how we plan to handle pull promise
&gt; resolution.
&gt; I will add a FIXME so that we can revisit that case later on.

Who call them several times? JavaScript?

If JavaScript holds onto them, they will have a strong reference on the heap or the JS Stack. There should be no need to keep a strong reference in your object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076308</commentid>
    <comment_count>27</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-11 07:07:39 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #23)
&gt; &gt; &gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:64
&gt; &gt; &gt;&gt; +    JSC::JSValue callFunction(JSC::ExecState*, JSC::JSValue /* jsFunction */, JSC::JSValue /* thisValue */, const JSC::ArgList&amp;);
&gt; &gt; &gt; 
&gt; &gt; &gt; There should be no need to comment the argument names here.
&gt; &gt; 
&gt; &gt; This is purely informal, I will remove them.
&gt; 
&gt; Note that having the argument names is good here because it is not clear
&gt; what the arguments are from their type.
&gt; 
&gt; My comment was referring to the &quot;/* */&quot;, those should be unnecessary, the
&gt; name will just be ignored by the compiler.

I see. I used to &quot;/* */&quot; because of some check-webkit-style warnings I got in the past.
I prefer then re-adding the names, this may be done at cq time I guess.

&gt; &gt; &gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt; &gt; &gt;&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_errorFunction;
&gt; &gt; &gt; 
&gt; &gt; &gt; I am quite confused why you hold strongly onto those.
&gt; &gt; &gt; 
&gt; &gt; &gt; It looks to me like they could be created on the fly when calling the function and never needed again.
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you explain?
&gt; &gt; 
&gt; &gt; Enqueue and close are passed as parameters to the pull function, which may
&gt; &gt; be called several times.
&gt; &gt; We could create error on the fly given how we plan to handle pull promise
&gt; &gt; resolution.
&gt; &gt; I will add a FIXME so that we can revisit that case later on.
&gt; 
&gt; Who call them several times? JavaScript?

Pull is called by the readable stream.
For instance, JavaScript may call ReadableStream.read. 
The stream then returns the first value in the queue.
Then the stream calls UnderlyingSource.pull if data in the queue is low.

&gt; If JavaScript holds onto them, they will have a strong reference on the heap
&gt; or the JS Stack. There should be no need to keep a strong reference in your
&gt; object.

The spec currently mandates this approach but this could be done differently.
I would tend to go forward with the current approach and in parallel discuss this with streams spec editors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076311</commentid>
    <comment_count>28</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-11 07:15:30 -0700</bug_when>
    <thetext>&gt; &gt; If JavaScript holds onto them, they will have a strong reference on the heap
&gt; &gt; or the JS Stack. There should be no need to keep a strong reference in your
&gt; &gt; object.
&gt; 
&gt; The spec currently mandates this approach but this could be done differently.
&gt; I would tend to go forward with the current approach and in parallel discuss
&gt; this with streams spec editors.

I opened https://github.com/whatwg/streams/issues/292.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077521</commentid>
    <comment_count>29</comment_count>
      <attachid>248381</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-16 12:14:42 -0700</bug_when>
    <thetext>Comment on attachment 248381
Fix according review

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

Partial review. I&apos;ll have to look into the scope of the JSLockHolder.

I think there is a bug with the callback function names.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:96
&gt; +    if (callType == CallTypeNone)

I am confused by this, when would the call type not be CallTypeHost?

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:136
&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 1, ASCIILiteral(&quot;CreateReadableStreamEnqueueFunction&quot;), enqueueReadableStreamFunction);

The spec says the functions are anonymous. Isn&apos;t the 4th argument the name?
I think you are supposed to pass String() for the name here.

I guess you do not have tests for that, time to add one :)

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:148
&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 0, ASCIILiteral(&quot;CreateReadableStreamCloseFunction&quot;), closeReadableStreamFunction);

Ditto.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:159
&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 1, ASCIILiteral(&quot;CreateReadableStreamErrorFunction&quot;), errorReadableStreamFunction);

Ditto.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:172
&gt; +    setInternalSlotToObject(exec, m_enqueueFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; +    setInternalSlotToObject(exec, m_closeFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; +    setInternalSlotToObject(exec, m_errorFunction.get(), readableStreamSlotName(), m_readableStream);

Shame we have to do this, I wish NativeFunction was a std::function.
We would have to teach the JIT how to invoke closure. :(

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt; +    // FIXME: Decide whether creating the error function on the fly when calling the start source function.

Unless we have a reason to keep this object alive, let&apos;s change this right now.

It is likely the implementation of start() will not hold onto the error function. Let&apos;s not hold a JSCell alive for a function we don&apos;t need.

&gt; LayoutTests/streams/readablestream-start.html:16
&gt; +            assert_array_equals(Object.getOwnPropertyNames(close), [&apos;name&apos;, &apos;length&apos;]);

Could you generalize this to the other two arguments if that&apos;s not already covered elsewhere?
You should test length and name on every one of them too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077565</commentid>
    <comment_count>30</comment_count>
      <attachid>248381</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-16 14:34:28 -0700</bug_when>
    <thetext>Comment on attachment 248381
Fix according review

As of JSLockHolder scope, we could add it after the startFunction.isFunction test.
We add it in the start method and not within the callFunction method as it is needed 
before creating JS functions which will happen for resolving start promise and the error function wrapper as well.

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

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:96
&gt;&gt; +    if (callType == CallTypeNone)
&gt; 
&gt; I am confused by this, when would the call type not be CallTypeHost?

Right, it is no longer needed since we check that jsFunction is a function.

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:136
&gt;&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 1, ASCIILiteral(&quot;CreateReadableStreamEnqueueFunction&quot;), enqueueReadableStreamFunction);
&gt; 
&gt; The spec says the functions are anonymous. Isn&apos;t the 4th argument the name?
&gt; I think you are supposed to pass String() for the name here.
&gt; 
&gt; I guess you do not have tests for that, time to add one :)

Ah!!!
The function length should also be checked in the same test I guess.

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:148
&gt;&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 0, ASCIILiteral(&quot;CreateReadableStreamCloseFunction&quot;), closeReadableStreamFunction);
&gt; 
&gt; Ditto.

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:159
&gt;&gt; +    return JSFunction::create(exec-&gt;vm(), exec-&gt;callee()-&gt;globalObject(), 1, ASCIILiteral(&quot;CreateReadableStreamErrorFunction&quot;), errorReadableStreamFunction);
&gt; 
&gt; Ditto.

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:172
&gt;&gt; +    setInternalSlotToObject(exec, m_errorFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; 
&gt; Shame we have to do this, I wish NativeFunction was a std::function.
&gt; We would have to teach the JIT how to invoke closure. :(

Yep, a FIXME may be good...

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:77
&gt;&gt; +    // FIXME: Decide whether creating the error function on the fly when calling the start source function.
&gt; 
&gt; Unless we have a reason to keep this object alive, let&apos;s change this right now.
&gt; 
&gt; It is likely the implementation of start() will not hold onto the error function. Let&apos;s not hold a JSCell alive for a function we don&apos;t need.

OK

&gt;&gt; LayoutTests/streams/readablestream-start.html:16
&gt;&gt; +            assert_array_equals(Object.getOwnPropertyNames(close), [&apos;name&apos;, &apos;length&apos;]);
&gt; 
&gt; Could you generalize this to the other two arguments if that&apos;s not already covered elsewhere?
&gt; You should test length and name on every one of them too.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077996</commentid>
    <comment_count>31</comment_count>
      <attachid>248381</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-17 15:42:32 -0700</bug_when>
    <thetext>Comment on attachment 248381
Fix according review

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

Ok, let&apos;s r- from the previous comments and missing test cases. I have not spotted anything else but I&apos;d like a second look.

Poke me when it is ready :)

&gt;&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:172
&gt;&gt;&gt; +    setInternalSlotToObject(exec, m_errorFunction.get(), readableStreamSlotName(), m_readableStream);
&gt;&gt; 
&gt;&gt; Shame we have to do this, I wish NativeFunction was a std::function.
&gt;&gt; We would have to teach the JIT how to invoke closure. :(
&gt; 
&gt; Yep, a FIXME may be good...

I think the FIXME would not been seen since the part to change is in JSC.

If you want to start hacking on JSC, that could be a nice little project to prototype :)

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:192
&gt; +            throwVMError(exec, createTypeError(exec, ASCIILiteral(&quot;ReadableStream constructor object start property should be a function.&quot;)));

Is this standard? The spec says InvokeOrNoop on start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080598</commentid>
    <comment_count>32</comment_count>
      <attachid>249569</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-03-27 08:02:55 -0700</bug_when>
    <thetext>Created attachment 249569
Adding reader support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082498</commentid>
    <comment_count>33</comment_count>
      <attachid>250054</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-03 03:11:09 -0700</bug_when>
    <thetext>Created attachment 250054
Removing close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082535</commentid>
    <comment_count>34</comment_count>
      <attachid>250054</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-03 05:44:51 -0700</bug_when>
    <thetext>Comment on attachment 250054
Removing close

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

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:156
&gt; +    if (!m_source) {

We could probably initialize m_source as an empty object if there is no given JS object to ReadableStreamJSSource constructor.
That would remove that test and similar tests for pull and cancel.
Will add a FIXME at cq time if there is no further change envisioned.

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.h:69
&gt; +    JSC::Strong&lt;JSC::JSFunction&gt; m_errorFunction;

We store m_errorFunction as it will be reused as start/pull promise rejection callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082727</commentid>
    <comment_count>35</comment_count>
      <attachid>250054</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-03 17:19:45 -0700</bug_when>
    <thetext>Comment on attachment 250054
Removing close

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

Some minor comments.

Reading through the spec of ReadableStream&apos;s constructor: isn&apos;t one of the big use case a start function that return a promise?
I am a bit confused by the spec to be honest :). Do you know where is the definition of &quot;Resolve [arbitrary object] as a promise&quot;?

&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:63
&gt; +    // FIXME: Implement pulling data

notImplemented();

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:142
&gt; +    setInternalSlotToObject(exec, m_enqueueFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; +    setInternalSlotToObject(exec, m_closeFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; +    setInternalSlotToObject(exec, m_errorFunction.get(), readableStreamSlotName(), m_readableStream);

You need tests making sure none of them are observable.

&gt; LayoutTests/streams/readablestream-start.html:33
&gt; +    var rs = new ReadableStream(source);

Do you already have tests passing a object without start method as the source?
-undefined as the source?
-null as the source?
-no source?

It would also be good to have a test with the start function somewhere on the prototype chain of the source object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082782</commentid>
    <comment_count>36</comment_count>
      <attachid>250054</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-04 09:17:13 -0700</bug_when>
    <thetext>Comment on attachment 250054
Removing close

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


&gt;Reading through the spec of ReadableStream&apos;s constructor: isn&apos;t one of the big use case a start function that return a promise?

Probably, although pull can also return a promise.

&gt;I am a bit confused by the spec to be honest :). Do you know where is the definition of &quot;Resolve [arbitrary object] as a promise&quot;?

I think it is under standardization.
See https://github.com/domenic/promises-unwrapping

&gt;&gt; Source/WebCore/Modules/streams/ReadableStream.cpp:63
&gt;&gt; +    // FIXME: Implement pulling data
&gt; 
&gt; notImplemented();

OK

&gt;&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:142
&gt;&gt; +    setInternalSlotToObject(exec, m_errorFunction.get(), readableStreamSlotName(), m_readableStream);
&gt; 
&gt; You need tests making sure none of them are observable.

It is part of the first test in streams/readablestream-start.html

&gt;&gt; LayoutTests/streams/readablestream-start.html:33
&gt;&gt; +    var rs = new ReadableStream(source);
&gt; 
&gt; Do you already have tests passing a object without start method as the source?
&gt; -undefined as the source?
&gt; -null as the source?
&gt; -no source?
&gt; 
&gt; It would also be good to have a test with the start function somewhere on the prototype chain of the source object.

There are tests for 1 and 4, but not 2 and 3. I will add them.
Ok also for adding a test on start function being on the prototype chain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082794</commentid>
    <comment_count>37</comment_count>
      <attachid>250131</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-04 10:35:46 -0700</bug_when>
    <thetext>Created attachment 250131
Adding test, better init of m_source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082795</commentid>
    <comment_count>38</comment_count>
      <attachid>250132</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-04 10:42:55 -0700</bug_when>
    <thetext>Created attachment 250132
Adding test, better init of m_source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083077</commentid>
    <comment_count>39</comment_count>
      <attachid>250201</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-06 06:43:57 -0700</bug_when>
    <thetext>Created attachment 250201
Introducing controller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083085</commentid>
    <comment_count>40</comment_count>
      <attachid>250201</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-06 07:55:50 -0700</bug_when>
    <thetext>Comment on attachment 250201
Introducing controller

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This function takes a controller object that has three JS functions as members: close, enqueue and error.

Controller is described in https://streams.spec.whatwg.org/#rs-controller-class
It is probably not worth introducing it as a JS interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083796</commentid>
    <comment_count>41</comment_count>
      <attachid>250201</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-08 18:02:55 -0700</bug_when>
    <thetext>Comment on attachment 250201
Introducing controller

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

Let&apos;s move forward. I am more unconvinced by the spec that the patch :)

&gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:136
&gt; +    setPropertyToObject(exec, controller, &quot;enqueue&quot;, enqueueFunction);
&gt; +    setPropertyToObject(exec, controller, &quot;close&quot;, closeFunction);
&gt; +    setPropertyToObject(exec, controller, &quot;error&quot;, errorFunction);

Should those really be on the object itself and not the prototype?
The spec is crazy vague about the definition of ReadableStreamController.

Can you please ask the working group to have a normative definition of the ReadableStreamController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083891</commentid>
    <comment_count>42</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-08 23:42:45 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Comment on attachment 250201 [details]
&gt; Introducing controller
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250201&amp;action=review
&gt; 
&gt; Let&apos;s move forward. I am more unconvinced by the spec that the patch :)
&gt; 
&gt; &gt; Source/WebCore/bindings/js/ReadableStreamJSSource.cpp:136
&gt; &gt; +    setPropertyToObject(exec, controller, &quot;enqueue&quot;, enqueueFunction);
&gt; &gt; +    setPropertyToObject(exec, controller, &quot;close&quot;, closeFunction);
&gt; &gt; +    setPropertyToObject(exec, controller, &quot;error&quot;, errorFunction);
&gt; 
&gt; Should those really be on the object itself and not the prototype?
&gt; The spec is crazy vague about the definition of ReadableStreamController.

Yes, they should be on the prototype.
This should be improved later on. 

&gt; Can you please ask the working group to have a normative definition of the
&gt; ReadableStreamController?

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083894</commentid>
    <comment_count>43</comment_count>
      <attachid>250201</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-08 23:49:13 -0700</bug_when>
    <thetext>Comment on attachment 250201
Introducing controller

Clearing flags on attachment: 250201

Committed r182591: &lt;http://trac.webkit.org/changeset/182591&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083895</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-08 23:49:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245877</attachid>
            <date>2015-02-02 08:18:41 -0800</date>
            <delta_ts>2015-02-05 06:18:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141160-20150202171850.patch</filename>
            <type>text/plain</type>
            <size>19324</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTEyYzIwOWViYmJmYzY2
MmI4YjQzZWMzZjJhMTYxN2I4MzkwNTU5OC4uYzVmYTZmYWMwZGQzMzVmNGZmZWNkZGI5NDAwZDAz
MDBlYjMyYWQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE1LTAyLTAyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVT
dHJlYW0gY29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIHN0b3JhZ2Ugb2YgdGhlIHN0YXJ0IGZ1bmN0aW9uIGluIEpTUmVhZGFi
bGVTdHJlYW1Tb3VyY2UuCisgICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gY2FsbCB0aGUgc3RhcnQg
ZnVuY3Rpb24uCisgICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gY2xvc2UgYSBzdHJlYW0gaW4gdGhl
IHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFRlc3Q6IHN0cmVhbXMvcmVhZGFibGVzdHJlYW0t
c3RhcnQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlQ2xvc2VkQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNsb3NlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlUmVhZHlDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTUmVhZGFibGVT
dHJlYW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0U2xvdFRvT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFNsb3RGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJl
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpKU1JlYWRhYmxlU3RyZWFtU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Jl
YWRhYmxlU3RyZWFtU291cmNlOjpzZXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFk
YWJsZVN0cmVhbVNvdXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlLmg6CisKIDIwMTUtMDEtMjkgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4gYW5kIFhhYmllciBSb2RyaWd1ZXogQ2Fs
dmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVt
ZW50IGEgYmFyZWJvbmUgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcAppbmRleCBlOGRiOTE3MzRj
YzY0ZGRhYTFiNzFkNDkxZjZkMTUwMTBmM2E5NjlkLi5kMjMwOTgwYWRhZDI1NGM0MmY1ZTgyY2Yy
OTM2N2Q0ZGE2MDk2Y2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW0uaCIKIAorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03OSwxNCArODAsNDggQEAgU3RyaW5nIFJlYWRhYmxlU3RyZWFt
OjpzdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiIik7CiB9CiAKLXZvaWQg
UmVhZGFibGVTdHJlYW06OmNsb3NlZChTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3Ry
ZWFtOjpyZXNvbHZlQ2xvc2VkQ2FsbGJhY2soKQogewotICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBs
ZW1lbnRlZAorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpOworICAgIGlmICgh
bV9jbG9zZWRDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIGNhbGxPbk1haW5UaHJlYWQo
c3RkOjpiaW5kKFdURjo6bW92ZShtX2Nsb3NlZENhbGxiYWNrKSwgbnVsbHB0cikpOwogfQogCi12
b2lkIFJlYWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxl
U3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1F
OiBUbyBiZSBpbXBsZW1lbnRlZAorICAgIG1fY2xvc2VkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoY2Fs
bGJhY2spOworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpCisgICAgICAgIHJlc29s
dmVDbG9zZWRDYWxsYmFjaygpOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpjcmVhdGVSZWFk
YWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpX
YWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2xvc2VkOworICAgICAgICByZXNv
bHZlUmVhZHlDYWxsYmFjaygpOworICAgICAgICByZXNvbHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAg
ICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBTdGF0ZTo6UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlz
IHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJh
Y2soKQoreworICAgIGlmICghbV9yZWFkeUNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAg
Y2FsbE9uTWFpblRocmVhZChzdGQ6OmJpbmQoV1RGOjptb3ZlKG1fcmVhZHlDYWxsYmFjayksIG51
bGxwdHIpKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbTo6cmVhZHkoU3VjY2Vzc0NhbGxiYWNr
IGNhbGxiYWNrKQoreworICAgIG1fcmVhZHlDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7
CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OldhaXRpbmcpCisgICAgICAgIHJlc29sdmVSZWFk
eUNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnN0YXJ0KCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHB1bGxpbmcgZGF0YQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IGM4NDVmZWRiODZkYTdh
ZWI3YjdhMGJjNjg5ZGQ4ZjVlMWFhMWM5YTAuLjQxYzc1ZmM2NThmZjdhNWFkZTZmMjg5ODBlYTYz
YWU3MjEwZjEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5oCkBAIC02NywxMSArNjcsMjEgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2Vk
KFN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgdm9pZCByZWFkeShTdWNjZXNzQ2FsbGJhY2spOwogCisg
ICAgLy8gQVBJIHVzZWQgZnJvbSB0aGUgSlMgYmluZGluZy4KKyAgICB2b2lkIHN0YXJ0KCk7CisK
KyAgICB2b2lkIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbigpOworCiBwcml2YXRl
OgogICAgIFJlYWRhYmxlU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFi
bGVTdHJlYW1Tb3VyY2U+JiYpOworICAgIHZvaWQgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7Cisg
ICAgdm9pZCByZXNvbHZlUmVhZHlDYWxsYmFjaygpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAg
ICBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworCisgICAgU3VjY2Vzc0NhbGxi
YWNrIG1fY2xvc2VkQ2FsbGJhY2s7CisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fcmVhZHlDYWxsYmFj
azsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVh
ZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFk
YWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggYjU5ZWJhMmYzMTg2MWQxMDJmNDcxN2U2M2VhMjAw
YmFiNDI5M2QzYy4uMDI0ODUzYTAzYzcyM2YyN2Q0MzBkZWYzMDgxNzM0M2JkMDkxYjJmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1
c3RvbS5jcHAKQEAgLTEwMyw2ICsxMDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJlYW06
OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSwg
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJlYW0u
cmVsZWFzZU5vbk51bGwoKSk7CiAKKyAgICBzb3VyY2UtPnNldFN0cmVhbShleGVjLCBqc1JlYWRh
YmxlU3RyZWFtKTsKICAgICBpZiAoIXNvdXJjZS0+c3RhcnQoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzb3VyY2UtPmVycm9yKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IGU4Y2Zl
NjU4MTM5ZGFlYjJmZGUwOGNjNGI4YzUzNmE4N2UyZjE1NTIuLjUyMTM5NjQ1MzJkZWI3NDRmMTM0
NjFmYTk4N2MzMTgwMzcyZjM3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVhZGFibGVTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zMiwxNCArMzIsNzcgQEAKICNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbVNvdXJjZS5o
IgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5o
IgogI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW0uaCIKKyNpbmNsdWRlICJSZWFkYWJsZVN0cmVh
bS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJy
YXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU1Byb21pc2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTUHJvbWlzZURl
ZmVycmVkLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gV2UgdXNlIHNl
dFNsb3RUb09iamVjdCBvbiBKUyBmdW5jdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmV0cmlldmUgdGhl
IEpTUmVhZGFibGVTdHJlYW0gb2JqZWN0IGluc2lkZSB0aGUgY29ycmVzcG9uZGluZyBKUyBmdW5j
dGlvbi4KK3N0YXRpYyB2b2lkIHNldFNsb3RUb09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgb2JqZWN0VmFsdWUsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAg
IFB1dFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3Qob2JqZWN0VmFsdWUpOworICAgIG9iamVjdC0+
cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyKSwgdmFsdWUsIHBy
b3BlcnR5U2xvdCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGdldFNsb3RGcm9tT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBvYmplY3RWYWx1ZSwgY29uc3QgY2hhciogaWRlbnRpZmllcikK
K3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gb2JqZWN0VmFsdWUudG9PYmplY3QoZXhlYyk7Cisg
ICAgUHJvcGVydHlTbG90IHByb3BlcnR5U2xvdChvYmplY3RWYWx1ZSk7CisgICAgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXIoZXhlYywgaWRlbnRpZmllcik7CisgICAgaWYg
KCFvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
cHJvcGVydHlTbG90KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IHByb3BlcnR5U2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCitzdGF0aWMg
SlNSZWFkYWJsZVN0cmVhbSogZ2V0SlNSZWFkYWJsZVN0cmVhbShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IGpzRHluYW1pY0Nhc3Q8
SlNSZWFkYWJsZVN0cmVhbSo+KGdldFNsb3RGcm9tT2JqZWN0KGV4ZWMsIGV4ZWMtPmNhbGxlZSgp
LCAiUmVhZGFibGVTdHJlYW0iKSk7CisgICAgQVNTRVJUKGpzUmVhZGFibGVTdHJlYW0pOworICAg
IHJldHVybiBqc1JlYWRhYmxlU3RyZWFtOworfQorCitpbmxpbmUgc3RhdGljIEpTVmFsdWUgZ2V0
UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29u
c3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCBpZGVudGlmaWVyKSk7Cit9CisKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVh
bVNvdXJjZTo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9u
LCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CisKKyAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGpz
RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkKCkgPyBt
X3JlYWRhYmxlU3RyZWFtIDogdGhpc1ZhbHVlLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisg
ICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBleGNl
cHRpb24pOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkgeworICAgICAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiQWJydXB0IGNhbGwuIikpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQor
CisgICAgcmV0dXJuIHZhbHVlOworfQorCiBSZWY8SlNSZWFkYWJsZVN0cmVhbVNvdXJjZT4gSlNS
ZWFkYWJsZVN0cmVhbVNvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEpTUmVhZGFibGVTdHJlYW1Tb3VyY2UoZXhlYykpOwpAQCAt
NDcsNyArMTEwLDEwIEBAIFJlZjxKU1JlYWRhYmxlU3RyZWFtU291cmNlPiBKU1JlYWRhYmxlU3Ry
ZWFtU291cmNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTUmVhZGFibGVTdHJl
YW1Tb3VyY2U6OkpTUmVhZGFibGVTdHJlYW1Tb3VyY2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgOiBtX2Vycm9yKGV4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpCisgICAgLCBtX3JlYWRhYmxl
U3RyZWFtKG51bGxwdHIpCiB7CisgICAgbV9zdGFydEZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBq
c1VuZGVmaW5lZCgpKTsKKwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTU2LDggKzEyMiwxNiBAQCBKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpK
U1JlYWRhYmxlU3RyZWFtU291cmNlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBwYXJhbWV0ZXJzIHN1cHBvcnQK
LSAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbWV0ZXIgeWV0LiIpKTsKKyAgICBKU1Zh
bHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU09iamVjdCogYXJn
dW1lbnQgPSBhcmd1bWVudFZhbHVlLmdldE9iamVjdCgpOworCisgICAgSlNWYWx1ZSBzdGFydEZ1
bmN0aW9uID0gZ2V0UHJvcGVydHlGcm9tT2JqZWN0KGV4ZWMsIGFyZ3VtZW50LCAic3RhcnQiKTsK
KyAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiAhc3RhcnRGdW5jdGlvbi5p
c0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBwcm9wZXJ0eSBzaG91
bGQgYmUgZnVuY3Rpb25zLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3Rh
cnRGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgc3RhcnRGdW5jdGlvbik7CiB9CiAKIHZvaWQgSlNS
ZWFkYWJsZVN0cmVhbVNvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNjUsNiArMTM5LDkxIEBAIHZvaWQgSlNSZWFk
YWJsZVN0cmVhbVNvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nCiAgICAgbV9lcnJvci5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJsZVN0
cmVhbUVucXVldWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCks
IDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24iKSwg
ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBnZXRKU1Jl
YWRhYmxlU3RyZWFtKGV4ZWMpOworICAgIGpzUmVhZGFibGVTdHJlYW0tPmltcGwoKS5jcmVhdGVS
ZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVT
dHJlYW1DbG9zZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwg
MCwgQVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24iKSwgY2xv
c2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVh
ZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgMSwgQVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24i
KSwgZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKwordm9pZCBKU1JlYWRhYmxlU3Ry
ZWFtU291cmNlOjpzZXRTdHJlYW0oRXhlY1N0YXRlKiBleGVjLCBKU1JlYWRhYmxlU3RyZWFtKiBy
ZWFkYWJsZVN0cmVhbSkKK3sKKyAgICBtX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07
CisKKyAgICBKU1ZhbHVlIGVucXVldWVGdW5jdGlvbiA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5x
dWV1ZUZ1bmN0aW9uKGV4ZWMpOworICAgIEpTVmFsdWUgY2xvc2VGdW5jdGlvbiA9IGNyZWF0ZVJl
YWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbihleGVjKTsKKyAgICBKU1ZhbHVlIGVycm9yRnVuY3Rp
b24gPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24oZXhlYyk7CisKKyAgICBtX2Vu
cXVldWVGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgZW5xdWV1ZUZ1bmN0aW9uKTsKKyAgICBtX2Ns
b3NlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNsb3NlRnVuY3Rpb24pOworICAgIG1fZXJyb3JG
dW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgZXJyb3JGdW5jdGlvbik7CisKKyAgICBKU1ZhbHVlIHN0
cmVhbVZhbHVlID0gbV9yZWFkYWJsZVN0cmVhbTsKKyAgICBzZXRTbG90VG9PYmplY3QoZXhlYywg
bV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCksICJSZWFkYWJsZVN0cmVhbSIsIHN0cmVhbVZhbHVlKTsK
KyAgICBzZXRTbG90VG9PYmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgpLCAiUmVhZGFi
bGVTdHJlYW0iLCBzdHJlYW1WYWx1ZSk7CisgICAgc2V0U2xvdFRvT2JqZWN0KGV4ZWMsIG1fZXJy
b3JGdW5jdGlvbi5nZXQoKSwgIlJlYWRhYmxlU3RyZWFtIiwgc3RyZWFtVmFsdWUpOworfQorCit2
b2lkIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpCit7
CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBtX3JlYWRhYmxlU3RyZWFt
LT5pbXBsKCkuc3RhcnQoKTsKKyAgICB9KTsgCit9CisKK2Jvb2wgSlNSZWFkYWJsZVN0cmVhbVNv
dXJjZTo6c3RhcnQoKQoreworICAgIC8vIE5vLW9wIGZ1bmN0aW9uPworICAgIGlmIChtX3N0YXJ0
RnVuY3Rpb24uZ2V0KCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBzdGFydFJlYWRhYmxlU3Ry
ZWFtQXN5bmMoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9yZWFkYWJsZVN0cmVhbS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
KworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBw
ZW5kKG1fZW5xdWV1ZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2xv
c2VGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Vycm9yRnVuY3Rpb24u
Z2V0KCkpOworCisgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fc3RhcnRGdW5jdGlvbi5nZXQoKSwg
YXJndW1lbnRzKTsKKworICAgIGlmICghbV9lcnJvci5nZXQoKS5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGhhbmRsaW5nIHBy
b21pc2UgYXMgcmVzdWx0IG9mIGNhbGxpbmcgc3RhcnQgZnVuY3Rpb24KKworICAgIHN0YXJ0UmVh
ZGFibGVTdHJlYW1Bc3luYygpOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZWFkYWJsZVN0cmVhbVNvdXJjZS5oCmluZGV4IDY3ZWMyZmE2ZTcwMDUzODIxYmQ1YjI2OGFj
OTY1MmU4MDQxODc5OGIuLjIyMGFkMGJlMjQyNDk0OTUzOTVmNWZkOGI0NTJjYjZhMjk0MDM2NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1T
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
U291cmNlLmgKQEAgLTQ3LDggKzQ3LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEpTUmVh
ZGFibGVTdHJlYW1Tb3VyY2U+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogICAgIH5KU1JlYWRh
YmxlU3RyZWFtU291cmNlKCkgeyB9CiAKKyAgICB2b2lkIHNldFN0cmVhbShKU0M6OkV4ZWNTdGF0
ZSosIEpTUmVhZGFibGVTdHJlYW0qKTsKKwogICAgIEpTQzo6SlNWYWx1ZSBlcnJvcigpIHsgcmV0
dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBib29sIHN0YXJ0KCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIGJvb2wgc3RhcnQoKTsKIAogICAgIC8vIFJlYWRhYmxlU3RyZWFtU291cmNlIEFQSS4KICAg
ICB2aXJ0dWFsIGJvb2wgaXNFcnJvcmVkKCkgeyByZXR1cm4gIW1fZXJyb3IuZ2V0KCkuaXNVbmRl
ZmluZWQoKTsgfQpAQCAtNTcsOCArNTksMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEludGVy
bmFsRXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIEpTUmVhZGFi
bGVTdHJlYW1Tb3VyY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBKU0M6OkpTVmFsdWUgY2FsbEZ1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpKTsKKyAgICB2b2lk
IHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworCiAgICAgLy8gbV9lcnJvciBtYXkgYmUgYW4g
ZXJyb3IgZ2VuZXJhdGVkIGZyb20gSlNSZWFkYWJsZVN0cmVhbVNvdXJjZSBvciBmcm9tIEpTIGNh
bGxiYWNrcy4KICAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fZXJyb3I7CisgICAgSlNS
ZWFkYWJsZVN0cmVhbSogbV9yZWFkYWJsZVN0cmVhbTsKKworICAgIC8vIEZ1bmN0aW9ucyBnaXZl
biBhcyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzCisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiBtX3N0YXJ0RnVuY3Rpb247CisKKyAgICAvLyBGdW5jdGlvbnMgcGFzc2VkIGFzIHBhcmFtZXRl
cnMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgZ2l2ZW4gYXMgY29uc3RydWN0b3IgcGFyYW1l
dGVycworICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9lbnF1ZXVlRnVuY3Rpb247Cisg
ICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Nsb3NlRnVuY3Rpb247CisgICAgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiBtX2Vycm9yRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYjQxOWUwMDYxOWI2NDRjYmRmN2ExOTZmYmQ1OTdjZDdmMDE2MTEw
ZC4uNmViYjdhNmQ0MGI2YTY1ZjFkNTQxN2M0OWUyZTFlYzgwNWM4NjZmNSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDE1LTAyLTAyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYu
Y2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBTdXBwb3J0IHRoZSBzdGFydCBmdW5j
dGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE2MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBjaGVj
ayB0aGF0IFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gZW1wdHkgb2JqZWN0
IGFzIHBhcmFtZXRlci4KKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIGNsb3NpbmcgYSBz
dHJlYW0gaW4gc3RhcnQgZnVuY3Rpb24uCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBjaGVjayB0
aHJvd2luZyBhbiBlcnJvciBpbiBzdGFydCBmdW5jdGlvbi4KKworICAgICAgICAqIHN0cmVhbXMv
cmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0cmVh
bXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sOiBBZGRlZC4KKwogMjAxNS0wMS0yOSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPiBhbmQgWGFiaWVyIFJvZHJpZ3Vl
eiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBJ
bXBsZW1lbnQgYSBiYXJlYm9uZSBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKaW5kZXggZjA4MDM0Yzk5ODVhZmNmOTI5NWZmMGU2YTNlNGU3MjcwMTgwZTU1OS4u
NDRmZjMyMTk5OTgyMzkxZDhiNzNhZjM0NDNmMzg2ZjE5NjhjOWNmMCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKQEAgLTEsNSArMSw2IEBACiAKIFBBU1MgUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNv
bnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBjYW4gYmUg
Y29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBvYmplY3QgYXMgYXJndW1lbnQgCiBQQVNTIFJlYWRh
YmxlU3RyZWFtIGluc3RhbmNlcyBoYXZlIHRoZSBjb3JyZWN0IG1ldGhvZHMgYW5kIHByb3BlcnRp
ZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYW4gb2JqZWN0
IGFzIGFyZ3VtZW50IAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxl
c3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3Ry
ZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggM2RmYzE1MDU1MjhmNzE5MTMwZDFiMzI4Y2JiNzI2
ZDk0ZTZjN2Y1Zi4uOGM0NjI0NzM0ZGFjMGQ2NzZkMTMzZDE3ZjBiZWI0Njk3YWM3MmVhMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3Iu
aHRtbApAQCAtOCw2ICs4LDEwIEBAIHRlc3QoZnVuY3Rpb24oKSB7CiB9LCAnUmVhZGFibGVTdHJl
YW0gY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzJyk7CiAKIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0g
Y2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50Jyk7CisK
K3Rlc3QoZnVuY3Rpb24oKSB7CiAgICAgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICBh
c3NlcnRfZXF1YWxzKHR5cGVvZiBycy5yZWFkLCAnZnVuY3Rpb24nLCAnaGFzIGEgcmVhZCBtZXRo
b2QnKTsKICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBycy5jYW5jZWwsICdmdW5jdGlvbicsICdo
YXMgYW4gY2FuY2VsIG1ldGhvZCcpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODIxZmVkNDQ0MWE5
OWQzNDkyNThiYWRlYTk2YWU3ZjExOTVjYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1
IEBACisKK1BBU1MgUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cg
CitQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYSBmdW5jdGlvbiBh
cyBzdGFydCAgYXJndW1lbnQgCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBh
YmxlIHRvIGNsb3NlIHRoZSBzdHJlYW0gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tc3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWVkZDMwZDA5YmRlMDEyZTNjZjkxMzVj
NzEzYTg2MjA3NmFhOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1s
PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzJz48L3NjcmlwdD4K
KzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIGFzc2VydF90aHJvd3MobmV3IEVy
cm9yKCdlcnJvcicpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxl
U3RyZWFtKAorICAgICAgICB7IHN0YXJ0OgorICAgICAgICAgICAgZnVuY3Rpb24oZW5xdWV1ZSwg
Y2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvcicp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVh
bSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgJ3N0YXJ0JyA6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9
LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0
YXJ0ICBhcmd1bWVudCcpOworCit0ZXN0MSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIHN0
YXJ0IHNob3VsZCBiZSBhYmxlIHRvIGNsb3NlIHRoZSBzdHJlYW0nKTsKK3Rlc3QxLnN0ZXAoZnVu
Y3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0
OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAg
IGNsb3NlKCkKKyAgICAgICAgfQorICAgIH0pOworCisgICAgdmFyIHJlYWR5RG9uZSA9IGZhbHNl
OworICAgIHJzLnJlYWR5LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHJlYWR5RG9uZSA9IHRy
dWU7CisgICAgICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdjbG9zZWQnKTsKKyAgICB9KTsK
KworICAgIHJzLmNsb3NlZC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBhc3NlcnRfZXF1YWxz
KHJlYWR5RG9uZSwgdHJ1ZSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdjbG9z
ZWQnKTsKKyAgICAgICAgdGVzdDEuZG9uZSgpOworICAgIH0pOworfSk7CisKKzwvc2NyaXB0Pgor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246098</attachid>
            <date>2015-02-05 06:18:16 -0800</date>
            <delta_ts>2015-02-05 07:24:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141160-20150205151815.patch</filename>
            <type>text/plain</type>
            <size>21226</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Njg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYwMTc3MmU1NDk3NmM2
YjQ1ODJlYzAxYjM0MmU5OWFmOTM1M2ZhNS4uOGYzY2I4ODgzYzM5NjRmMWY2MWM3ODU5N2FjYmI1
YzA0MzRkYjhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTAyLTA1ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBj
b25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3RvcmFnZSBvZiB0aGUgSlMgc3RhcnQgZnVuY3Rpb24gaW4gSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSBpbiB0aGUg
c3RhcnQgZnVuY3Rpb24uCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1z
dGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlQ2xvc2VkQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJlc29sdmVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVz
b2x2ZTxKU0M6OkpTVmFsdWU+KTogQWRkZWQgdG8gcmVzb2x2ZSBwcm9taXNlIHdpdGggdW5kZWZp
bmVkIHZhbHVlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbTo6Y2xvc2VkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFNs
b3RGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5j
dGlvbik6CisKIDIwMTUtMDItMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4gYW5kIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVtZW50IGEgYmFyZWJvbmUgUmVhZGFibGVT
dHJlYW0gaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmNwcAppbmRleCAzZTRmYzY1OTkwNzljMDBmYjY3OTQ3NjA5ZGQzYWM2MmI1
ZGQ5YTRlLi5jM2E2MDNiYzRlZmVhYmFkMTNkMjJjNjI1NGIwMjNmZTFkMWM4Yzc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAg
LTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nywx
NyArNzgsNTEgQEAgU3RyaW5nIFJlYWRhYmxlU3RyZWFtOjpzdGF0ZSgpIGNvbnN0CiAgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImVycm9yZWQiKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiIik7CisgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi12b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrKQor
dm9pZCBSZWFkYWJsZVN0cmVhbTo6cmVzb2x2ZUNsb3NlZENhbGxiYWNrKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpOworICAg
IGlmICghbV9jbG9zZWRDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIGNhbGxPbk1haW5U
aHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX2Nsb3NlZENhbGxiYWNrKSkpOwogfQogCi12b2lk
IFJlYWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3Ry
ZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgbV9jbG9zZWRDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxi
YWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAg
ICByZXNvbHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBT
dGF0ZTo6UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIGlmICghbV9yZWFkeUNh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgY2FsbE9uTWFpblRocmVhZChzdGQ6OmJpbmQo
V1RGOjptb3ZlKG1fcmVhZHlDYWxsYmFjaykpKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbTo6
cmVhZHkoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIG1fcmVhZHlDYWxsYmFjayA9
IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OldhaXRpbmcp
CisgICAgICAgIHJlc29sdmVSZWFkeUNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJl
YW06OnN0YXJ0KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHB1bGxpbmcgZGF0YQogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5o
CmluZGV4IGM4NDVmZWRiODZkYTdhZWI3YjdhMGJjNjg5ZGQ4ZjVlMWFhMWM5YTAuLmMxZGYyYWJj
YTUyNTJhM2ZhNTVmODg5NTE1NTdlMGZkMjg1ZTFkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC02MywxNSArNjMsMjUgQEAgcHVi
bGljOgogICAgIC8vIEpTIEFQSSBpbXBsZW1lbnRhdGlvbi4KICAgICBTdHJpbmcgc3RhdGUoKSBj
b25zdDsKIAotICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxSZWFkYWJsZVN0
cmVhbT4pPiBTdWNjZXNzQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gU3VjY2Vzc0NhbGxiYWNrOwogICAgIHZvaWQgY2xvc2VkKFN1Y2Nlc3NDYWxsYmFjayk7CiAg
ICAgdm9pZCByZWFkeShTdWNjZXNzQ2FsbGJhY2spOwogCisgICAgLy8gQVBJIHVzZWQgZnJvbSB0
aGUgSlMgYmluZGluZy4KKyAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICB2b2lkIGNoYW5nZVN0YXRl
VG9DbG9zZWQoKTsKKwogcHJpdmF0ZToKICAgICBSZWFkYWJsZVN0cmVhbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmKTsKKyAgICB2b2lkIHJlc29s
dmVDbG9zZWRDYWxsYmFjaygpOworICAgIHZvaWQgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKIAog
ICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiBtX3NvdXJj
ZTsKKworICAgIFN1Y2Nlc3NDYWxsYmFjayBtX2Nsb3NlZENhbGxiYWNrOworICAgIFN1Y2Nlc3ND
YWxsYmFjayBtX3JlYWR5Q2FsbGJhY2s7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUHJvbWlzZS5oCmluZGV4IDBkNjU2YzU5MjdiNTA0OGNkNjFhY2RlMzQ0NGVhM2U4
NDJlNTlmMmMuLmUzNTI5ZDgzZTU1NmVjM2FlZDk0MmIxNjZjNWM0MjI5NmVjMzcwZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCkBAIC05Nyw2ICs5NywxNCBA
QCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmU8Ym9vbD4oY29uc3QgYm9vbCYg
cmVzdWx0KQogfQogCiB0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
c29sdmU8SlNDOjpKU1ZhbHVlPihjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQoreworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgcmVzb2x2ZShleGVjLCB2YWx1ZSk7
Cit9CisKK3RlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxW
ZWN0b3I8dW5zaWduZWQgY2hhcj4+KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgcmVzdWx0
KQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVT
dHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbUN1c3RvbS5jcHAKaW5kZXggNGEwNWI3MGYyNjU5MzlkZTIwMzVkZDc0YTgzY2JjYmM1MmQ4
NTYwOC4uYTA0ZWZmYzNiMjZhOGVhMGEwMzUwNTcwYWM5ODRhYTNjOTRjN2NmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5j
cHAKQEAgLTUwLDggKzUwLDggQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpyZWFkKEV4ZWNT
dGF0ZSogZXhlYykKIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cmVhZHkoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVh
ZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShz
dHJlYW0uZ2V0KCkpOworICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0
YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Owog
ICAgIGltcGwoKS5yZWFkeShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTYxLDgg
KzYxLDggQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpyZWFkeShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OmNsb3NlZChFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0
KCkpOwotICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKFJlZlB0cjxSZWFkYWJs
ZVN0cmVhbT4gc3RyZWFtKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKHN0cmVh
bS5nZXQoKSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxl
IHsKKyAgICAgICAgd3JhcHBlci5yZXNvbHZlKGpzVW5kZWZpbmVkKCkpOwogICAgIH07CiAgICAg
aW1wbCgpLmNsb3NlZChXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTEwMyw2ICsx
MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVT
dHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSog
anNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3Ry
ZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6
Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAK
KyAgICBzb3VyY2UtPnNldFN0cmVhbShleGVjLCBqc1JlYWRhYmxlU3RyZWFtKTsKICAgICBpZiAo
IXNvdXJjZS0+c3RhcnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzb3Vy
Y2UtPmVycm9yKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwCmluZGV4IDliNDM0NTdmOGRjNGI5NjZiYTk0ZTc3Mzlh
ODczMDljNWYyM2VmMTQuLmFhZTNmMWIwYzI0ZDJlZGFmZWRhNTJmOGJkMjJhOTU5YWQyNTQ5MmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFt
SlNTb3VyY2UuY3BwCkBAIC0yOCwxOCArMjgsNzcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIgogCiAjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKIAogI2luY2x1
ZGUgIkpTUmVhZGFibGVTdHJlYW0uaCIKKyNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbS5oIgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBXZSB1c2Ugc2V0U2xvdFRvT2JqZWN0IG9uIEpTIGZ1bmN0aW9ucyBzbyB0
aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGUgSlNSZWFkYWJsZVN0cmVhbSBvYmplY3QgaW5zaWRlIHRo
ZSBjb3JyZXNwb25kaW5nIEpTIGZ1bmN0aW9uLgorc3RhdGljIHZvaWQgc2V0U2xvdFRvT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvYmplY3RWYWx1ZSwgY29uc3QgY2hhciogaWRlbnRp
ZmllciwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gb2JqZWN0VmFs
dWUudG9PYmplY3QoZXhlYyk7CisgICAgUHV0UHJvcGVydHlTbG90IHByb3BlcnR5U2xvdChvYmpl
Y3RWYWx1ZSk7CisgICAgb2JqZWN0LT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IGlkZW50aWZpZXIpLCB2YWx1ZSwgcHJvcGVydHlTbG90KTsKK30KKworc3RhdGljIEpTVmFsdWUg
Z2V0U2xvdEZyb21PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9iamVjdFZhbHVlLCBj
b25zdCBjaGFyKiBpZGVudGlmaWVyKQoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBvYmplY3RW
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBQcm9wZXJ0eVNsb3QgcHJvcGVydHlTbG90KG9iamVj
dFZhbHVlKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHlJZGVudGlmaWVyKGV4ZWMsIGlkZW50
aWZpZXIpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUlkZW50aWZp
ZXI7CisgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgcHJvcGVydHlTbG90KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgcmV0dXJuIHByb3BlcnR5U2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwor
fQorCitzdGF0aWMgSlNSZWFkYWJsZVN0cmVhbSogZ2V0SlNSZWFkYWJsZVN0cmVhbShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IGpz
RHluYW1pY0Nhc3Q8SlNSZWFkYWJsZVN0cmVhbSo+KGdldFNsb3RGcm9tT2JqZWN0KGV4ZWMsIGV4
ZWMtPmNhbGxlZSgpLCAiUmVhZGFibGVTdHJlYW0iKSk7CisgICAgQVNTRVJUKGpzUmVhZGFibGVT
dHJlYW0pOworICAgIHJldHVybiBqc1JlYWRhYmxlU3RyZWFtOworfQorCitpbmxpbmUgc3RhdGlj
IEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gb2JqZWN0LT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyKSk7Cit9CisKK0pTVmFsdWUgUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBqc0Z1bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUgdGhpc1ZhbHVl
KQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgQ2FsbERhdGEgY2FsbERh
dGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxs
RGF0YSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBj
YWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLmlzVW5k
ZWZpbmVkKCkgPyBtX3JlYWRhYmxlU3RyZWFtIDogdGhpc1ZhbHVlLCBhcmd1bWVudHMsICZleGNl
cHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICBtX2Vycm9yLnNldChleGVj
LT52bSgpLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgeworICAgICAgICBzZXRJbnRlcm5hbEVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQWJydXB0IGNhbGwuIikpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOworfQorCiBSZWY8UmVhZGFibGVTdHJlYW1K
U1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Uo
ZXhlYykpOwpAQCAtNDcsNyArMTA2LDEwIEBAIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNlPiBS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAKIFJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgOiBtX2Vycm9yKGV4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpCisgICAg
LCBtX3JlYWRhYmxlU3RyZWFtKG51bGxwdHIpCiB7CisgICAgbV9zdGFydEZ1bmN0aW9uLnNldChl
eGVjLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKKwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU2LDggKzExOCwxNiBAQCBSZWFkYWJsZVN0cmVh
bUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBwYXJhbWV0
ZXJzIHN1cHBvcnQKLSAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbWV0ZXIgeWV0LiIp
KTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBK
U09iamVjdCogYXJndW1lbnQgPSBhcmd1bWVudFZhbHVlLmdldE9iamVjdCgpOworCisgICAgSlNW
YWx1ZSBzdGFydEZ1bmN0aW9uID0gZ2V0UHJvcGVydHlGcm9tT2JqZWN0KGV4ZWMsIGFyZ3VtZW50
LCAic3RhcnQiKTsKKyAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiAhc3Rh
cnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJvcihleGVj
LCBBU0NJSUxpdGVyYWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBw
cm9wZXJ0eSBzaG91bGQgYmUgZnVuY3Rpb25zLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgc3RhcnRGdW5jdGlvbik7CiB9
CiAKIHZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNjUsNiArMTM1LDkxIEBA
IHZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAgICAgbV9lcnJvci5zZXQoZXhlYy0+dm0oKSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVl
RnVuY3Rpb24iKSwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJl
YW0gPSBnZXRKU1JlYWRhYmxlU3RyZWFtKGV4ZWMpOworICAgIGpzUmVhZGFibGVTdHJlYW0tPmlt
cGwoKS5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3Ry
ZWFtQ2xvc2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDAs
IEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uIiksIGNsb3Nl
UmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3RhdGUqKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRh
YmxlU3RyZWFtRXJyb3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCksIDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uIiks
IGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1K
U1NvdXJjZTo6c2V0U3RyZWFtKEV4ZWNTdGF0ZSogZXhlYywgSlNSZWFkYWJsZVN0cmVhbSogcmVh
ZGFibGVTdHJlYW0pCit7CisgICAgbV9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOwor
CisgICAgSlNWYWx1ZSBlbnF1ZXVlRnVuY3Rpb24gPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVl
dWVGdW5jdGlvbihleGVjKTsKKyAgICBKU1ZhbHVlIGNsb3NlRnVuY3Rpb24gPSBjcmVhdGVSZWFk
YWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oZXhlYyk7CisgICAgSlNWYWx1ZSBlcnJvckZ1bmN0aW9u
ID0gY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKGV4ZWMpOworCisgICAgbV9lbnF1
ZXVlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGVucXVldWVGdW5jdGlvbik7CisgICAgbV9jbG9z
ZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBjbG9zZUZ1bmN0aW9uKTsKKyAgICBtX2Vycm9yRnVu
Y3Rpb24uc2V0KGV4ZWMtPnZtKCksIGVycm9yRnVuY3Rpb24pOworCisgICAgSlNWYWx1ZSBzdHJl
YW1WYWx1ZSA9IG1fcmVhZGFibGVTdHJlYW07CisgICAgc2V0U2xvdFRvT2JqZWN0KGV4ZWMsIG1f
ZW5xdWV1ZUZ1bmN0aW9uLmdldCgpLCAiUmVhZGFibGVTdHJlYW0iLCBzdHJlYW1WYWx1ZSk7Cisg
ICAgc2V0U2xvdFRvT2JqZWN0KGV4ZWMsIG1fY2xvc2VGdW5jdGlvbi5nZXQoKSwgIlJlYWRhYmxl
U3RyZWFtIiwgc3RyZWFtVmFsdWUpOworICAgIHNldFNsb3RUb09iamVjdChleGVjLCBtX2Vycm9y
RnVuY3Rpb24uZ2V0KCksICJSZWFkYWJsZVN0cmVhbSIsIHN0cmVhbVZhbHVlKTsKK30KKwordm9p
ZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKQorewor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgbV9yZWFkYWJsZVN0cmVhbS0+
aW1wbCgpLnN0YXJ0KCk7CisgICAgfSk7IAorfQorCitib29sIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U6OnN0YXJ0KCkKK3sKKyAgICAvLyBOby1vcCBmdW5jdGlvbj8KKyAgICBpZiAobV9zdGFydEZ1
bmN0aW9uLmdldCgpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVh
bUFzeW5jKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fcmVhZGFibGVTdHJlYW0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVu
ZChtX2VucXVldWVGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Nsb3Nl
RnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lcnJvckZ1bmN0aW9uLmdl
dCgpKTsKKworICAgIGNhbGxGdW5jdGlvbihleGVjLCBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCksIGFy
Z3VtZW50cyk7CisKKyAgICBpZiAoIW1fZXJyb3IuZ2V0KCkuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBwcm9t
aXNlIGFzIHJlc3VsdCBvZiBjYWxsaW5nIHN0YXJ0IGZ1bmN0aW9uCisKKyAgICBzdGFydFJlYWRh
YmxlU3RyZWFtQXN5bmMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuaAppbmRleCBlNzIwZmEyM2FkNzhkOWE0YjhhNDYzOTkwMTg2
YjRiMGFmOTMxNWJhLi45OWY2NTM1YmM2OTA3OTc5YzdkNWJjZGVlMmQ2YzVlYTQwNDMxMDE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZS5oCkBAIC00Nyw4ICs0NywxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxSZWFkYWJs
ZVN0cmVhbUpTU291cmNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB+UmVhZGFibGVT
dHJlYW1KU1NvdXJjZSgpIHsgfQogCisgICAgdm9pZCBzZXRTdHJlYW0oSlNDOjpFeGVjU3RhdGUq
LCBKU1JlYWRhYmxlU3RyZWFtKik7CisKICAgICBKU0M6OkpTVmFsdWUgZXJyb3IoKSB7IHJldHVy
biBtX2Vycm9yLmdldCgpOyB9Ci0gICAgYm9vbCBzdGFydCgpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBib29sIHN0YXJ0KCk7CiAKICAgICAvLyBSZWFkYWJsZVN0cmVhbVNvdXJjZSBBUEkuCiAgICAg
dmlydHVhbCBib29sIGlzRXJyb3JlZCgpIHsgcmV0dXJuICFtX2Vycm9yLmdldCgpLmlzVW5kZWZp
bmVkKCk7IH0KQEAgLTU3LDggKzU5LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbnRlcm5h
bEVycm9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiAKICAgICBSZWFkYWJsZVN0
cmVhbUpTU291cmNlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgSlNDOjpKU1ZhbHVlIGNhbGxGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jiwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAgdm9pZCBz
dGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKwogICAgIC8vIG1fZXJyb3IgbWF5IGJlIGFuIGVy
cm9yIGdlbmVyYXRlZCBmcm9tIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Ugb3IgZnJvbSBKUyBjYWxs
YmFja3MuCiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Vycm9yOworICAgIEpTUmVh
ZGFibGVTdHJlYW0qIG1fcmVhZGFibGVTdHJlYW07CisKKyAgICAvLyBGdW5jdGlvbnMgZ2l2ZW4g
YXMgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KKyAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
IG1fc3RhcnRGdW5jdGlvbjsKKworICAgIC8vIEZ1bmN0aW9ucyBwYXNzZWQgYXMgcGFyYW1ldGVy
cyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgor
ICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9lbnF1ZXVlRnVuY3Rpb247CisgICAgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Nsb3NlRnVuY3Rpb247CisgICAgSlNDOjpTdHJvbmc8
SlNDOjpVbmtub3duPiBtX2Vycm9yRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMzQxMjM0YmQ3NTE0YmIyZjA2ODM1YzUwNzY1ZDkwZjdkZmZlYjRlMy4uMTZm
ODA1MjJjYjRkNGM2YmVjZDFiNTVkM2I0M2YyODY4ODhjN2VmMSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDE1LTAyLTA1ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlh
LmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKwor
ICAgICAgICBbU3RyZWFtcyBBUEldIFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRl
ciBpbiBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgUmVhZGFi
bGVTdHJlYW0gY29uc3RydWN0b3IgYWNjZXB0cyBhbiBlbXB0eSBvYmplY3QgYXMgcGFyYW1ldGVy
LgorICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY2hlY2sgY2xvc2luZyBhIHN0cmVhbSBpbiBzdGFy
dCBmdW5jdGlvbiB3aXRoIGFuZCB3aXRob3V0IHByb21pc2UgY2FsbGJhY2tzIHNldC4KKyAgICAg
ICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRocm93aW5nIGFuIGVycm9yIGluIHN0YXJ0IGZ1bmN0
aW9uLgorCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5o
dG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWw6IEFk
ZGVkLgorCiAyMDE1LTAyLTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fu
b24uZnI+IGFuZCBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbU3RyZWFtcyBBUEldIEltcGxlbWVudCBhIGJhcmVib25lIFJlYWRhYmxlU3Ry
ZWFtIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0
cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCA5MGNkMjRlOGU2Y2VjMjNk
ODcwNjU0NjA4ZWYzMzBmODRlM2RiZDlkLi5hNWQ2ZGZmMTU3YTliZjlhZmI4YjU5NWNjN2RjMmYy
Mzk3MThkMTQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFt
LWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDYgQEAKIFBBU1Mg
UmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhbiBvYmplY3QgYXMgYXJndW1l
bnQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBzaG91bGQgaGF2ZSB0aGUgY29ycmVj
dCBsaXN0IG9mIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBiZSBjb25zdHJ1
Y3RlZCB3aXRoIG5vIGFyZ3VtZW50cyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0
cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBSZWFkYWJsZVN0
cmVhbSBpbnN0YW5jZXMgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIAog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVj
dG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9y
Lmh0bWwKaW5kZXggNTJlNTViNmIyZDQwNzAwMmFhZWJkZTQ2ZGExMjBmMzI4NWI0YzY5YS4uY2M0
OTJjYjdmYzI5NDI5NGRiMDkyOGI5YWZjMDE2OTFhMzEwYTlhZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbApAQCAtNDYsNiAr
NDYsMTAgQEAgdGVzdChmdW5jdGlvbigpIHsKIH0sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29u
c3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHMnKTsKIAogdGVzdChmdW5jdGlvbigpIHsKKyAgICBu
ZXcgUmVhZGFibGVTdHJlYW0oeyB9KTsKK30sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3Ry
dWN0ZWQgd2l0aCBhbiBlbXB0eSBvYmplY3QgYXMgYXJndW1lbnQnKTsKKwordGVzdChmdW5jdGlv
bigpIHsKICAgICBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgpOwogICAgIGFzc2VydF9lcXVhbHMo
dHlwZW9mIHJzLnJlYWQsICdmdW5jdGlvbicsICdoYXMgYSByZWFkIG1ldGhvZCcpOwogICAgIGFz
c2VydF9lcXVhbHModHlwZW9mIHJzLmNhbmNlbCwgJ2Z1bmN0aW9uJywgJ2hhcyBhbiBjYW5jZWwg
bWV0aG9kJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFt
LXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0t
c3RhcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwMDUwN2Y0MzZlYzcwZjcyMDBmMWMzYTI0
OGQ5NzgyNjg4YjRjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBS
ZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdyAKK1BBU1MgUmVhZGFi
bGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0ICBhcmd1
bWVudCAKK1BBU1MgUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2Ug
dGhlIHN0cmVhbSAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2xvc2Ugc2hvdWxkIGZ1bGZpbGwgcmVh
ZHkgYW5kIGNsb3NlZCBwcm9taXNlcyAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MDc3YWY2N2VmMDRhNDJhMzg4ZTBhNDBk
ZGIxNDViYjQ4ZGIxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBFIGh0bWw+
Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMnPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKwordGVzdChmdW5jdGlvbigpCit7CisgICAgYXNzZXJ0X3Rocm93cyhuZXcgRXJy
b3IoJ2Vycm9yJyksIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVT
dHJlYW0oCisgICAgICAgIHsgc3RhcnQ6CisgICAgICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBj
bG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yJyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfSwgJ1JlYWRhYmxlU3RyZWFt
IHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHRocm93Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICBuZXcgUmVhZGFibGVTdHJlYW0oeyAnc3RhcnQnIDogJ3BvdGF0byd9KTsKKyAgICB9KTsKK30s
ICdSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3Rh
cnQgIGFyZ3VtZW50Jyk7CisKK3Rlc3QxID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gc3Rh
cnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScpOwordGVzdDEuc3RlcChmdW5j
dGlvbigpCit7CisgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKAorICAgIHsgc3RhcnQ6
CisgICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAg
Y2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc2V0VGltZW91dCh0ZXN0MS5zdGVw
X2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdjbG9z
ZWQnKTsKKyAgICAgICAgdGVzdDEuZG9uZSgpOworICAgIH0pLCAwKTsKK30pOworCit0ZXN0MiA9
IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFu
ZCBjbG9zZWQgcHJvbWlzZXMnKTsKK3Rlc3QyLnN0ZXAoZnVuY3Rpb24oKQoreworICAgIHZhciBy
cyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihl
bnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHZhciByZWFkeURvbmUgPSBmYWxzZTsKKyAgICBycy5yZWFkeS50aGVu
KGZ1bmN0aW9uKHYpIHsKKyAgICAgICAgcmVhZHlEb25lID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJz
LnN0YXRlLCAnY2xvc2VkJyk7CisgICAgfSk7CisKKyAgICBycy5jbG9zZWQudGhlbihmdW5jdGlv
bih2KSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVhZHlEb25lLCB0cnVlKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7CisgICAgICAgIHRlc3QyLmRvbmUoKTsKKyAgICB9KTsK
K30pOworCisKKzwvc2NyaXB0PgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246100</attachid>
            <date>2015-02-05 07:25:05 -0800</date>
            <delta_ts>2015-02-23 06:58:02 -0800</delta_ts>
            <desc>Adding missing include for mac builds</desc>
            <filename>bug-141160-20150205162504.patch</filename>
            <type>text/plain</type>
            <size>21276</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Njg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYwMTc3MmU1NDk3NmM2
YjQ1ODJlYzAxYjM0MmU5OWFmOTM1M2ZhNS4uOGYzY2I4ODgzYzM5NjRmMWY2MWM3ODU5N2FjYmI1
YzA0MzRkYjhhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTAyLTA1ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBj
b25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3RvcmFnZSBvZiB0aGUgSlMgc3RhcnQgZnVuY3Rpb24gaW4gSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSBpbiB0aGUg
c3RhcnQgZnVuY3Rpb24uCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1z
dGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlQ2xvc2VkQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJlc29sdmVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVz
b2x2ZTxKU0M6OkpTVmFsdWU+KTogQWRkZWQgdG8gcmVzb2x2ZSBwcm9taXNlIHdpdGggdW5kZWZp
bmVkIHZhbHVlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbTo6Y2xvc2VkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFNs
b3RGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5j
dGlvbik6CisKIDIwMTUtMDItMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4gYW5kIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVtZW50IGEgYmFyZWJvbmUgUmVhZGFibGVT
dHJlYW0gaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmNwcAppbmRleCAzZTRmYzY1OTkwNzljMDBmYjY3OTQ3NjA5ZGQzYWM2MmI1
ZGQ5YTRlLi5jM2E2MDNiYzRlZmVhYmFkMTNkMjJjNjI1NGIwMjNmZTFkMWM4Yzc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAg
LTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nywx
NyArNzgsNTEgQEAgU3RyaW5nIFJlYWRhYmxlU3RyZWFtOjpzdGF0ZSgpIGNvbnN0CiAgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImVycm9yZWQiKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiIik7CisgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi12b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrKQor
dm9pZCBSZWFkYWJsZVN0cmVhbTo6cmVzb2x2ZUNsb3NlZENhbGxiYWNrKCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQpOworICAg
IGlmICghbV9jbG9zZWRDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIGNhbGxPbk1haW5U
aHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX2Nsb3NlZENhbGxiYWNrKSkpOwogfQogCi12b2lk
IFJlYWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3Ry
ZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgbV9jbG9zZWRDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxi
YWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAg
ICByZXNvbHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBT
dGF0ZTo6UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIGlmICghbV9yZWFkeUNh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgY2FsbE9uTWFpblRocmVhZChzdGQ6OmJpbmQo
V1RGOjptb3ZlKG1fcmVhZHlDYWxsYmFjaykpKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbTo6
cmVhZHkoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIG1fcmVhZHlDYWxsYmFjayA9
IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OldhaXRpbmcp
CisgICAgICAgIHJlc29sdmVSZWFkeUNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJl
YW06OnN0YXJ0KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHB1bGxpbmcgZGF0YQogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5o
CmluZGV4IGM4NDVmZWRiODZkYTdhZWI3YjdhMGJjNjg5ZGQ4ZjVlMWFhMWM5YTAuLmMxZGYyYWJj
YTUyNTJhM2ZhNTVmODg5NTE1NTdlMGZkMjg1ZTFkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC02MywxNSArNjMsMjUgQEAgcHVi
bGljOgogICAgIC8vIEpTIEFQSSBpbXBsZW1lbnRhdGlvbi4KICAgICBTdHJpbmcgc3RhdGUoKSBj
b25zdDsKIAotICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxSZWFkYWJsZVN0
cmVhbT4pPiBTdWNjZXNzQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gU3VjY2Vzc0NhbGxiYWNrOwogICAgIHZvaWQgY2xvc2VkKFN1Y2Nlc3NDYWxsYmFjayk7CiAg
ICAgdm9pZCByZWFkeShTdWNjZXNzQ2FsbGJhY2spOwogCisgICAgLy8gQVBJIHVzZWQgZnJvbSB0
aGUgSlMgYmluZGluZy4KKyAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICB2b2lkIGNoYW5nZVN0YXRl
VG9DbG9zZWQoKTsKKwogcHJpdmF0ZToKICAgICBSZWFkYWJsZVN0cmVhbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmKTsKKyAgICB2b2lkIHJlc29s
dmVDbG9zZWRDYWxsYmFjaygpOworICAgIHZvaWQgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKIAog
ICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiBtX3NvdXJj
ZTsKKworICAgIFN1Y2Nlc3NDYWxsYmFjayBtX2Nsb3NlZENhbGxiYWNrOworICAgIFN1Y2Nlc3ND
YWxsYmFjayBtX3JlYWR5Q2FsbGJhY2s7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUHJvbWlzZS5oCmluZGV4IDBkNjU2YzU5MjdiNTA0OGNkNjFhY2RlMzQ0NGVhM2U4
NDJlNTlmMmMuLmUzNTI5ZDgzZTU1NmVjM2FlZDk0MmIxNjZjNWM0MjI5NmVjMzcwZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCkBAIC05Nyw2ICs5NywxNCBA
QCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmU8Ym9vbD4oY29uc3QgYm9vbCYg
cmVzdWx0KQogfQogCiB0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJl
c29sdmU8SlNDOjpKU1ZhbHVlPihjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQoreworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgcmVzb2x2ZShleGVjLCB2YWx1ZSk7
Cit9CisKK3RlbXBsYXRlPD4KIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxW
ZWN0b3I8dW5zaWduZWQgY2hhcj4+KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgcmVzdWx0
KQogewogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVT
dHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbUN1c3RvbS5jcHAKaW5kZXggNGEwNWI3MGYyNjU5MzlkZTIwMzVkZDc0YTgzY2JjYmM1MmQ4
NTYwOC4uYTA0ZWZmYzNiMjZhOGVhMGEwMzUwNTcwYWM5ODRhYTNjOTRjN2NmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5j
cHAKQEAgLTUwLDggKzUwLDggQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpyZWFkKEV4ZWNT
dGF0ZSogZXhlYykKIEpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbTo6cmVhZHkoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGdsb2JhbE9i
amVjdCgpKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVh
ZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShz
dHJlYW0uZ2V0KCkpOworICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0
YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Owog
ICAgIGltcGwoKS5yZWFkeShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTYxLDgg
KzYxLDggQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpyZWFkeShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OmNsb3NlZChFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7CiAgICAgRGVmZXJyZWRXcmFwcGVyIHdyYXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0
KCkpOwotICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKFJlZlB0cjxSZWFkYWJs
ZVN0cmVhbT4gc3RyZWFtKSBtdXRhYmxlIHsKLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKHN0cmVh
bS5nZXQoKSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxl
IHsKKyAgICAgICAgd3JhcHBlci5yZXNvbHZlKGpzVW5kZWZpbmVkKCkpOwogICAgIH07CiAgICAg
aW1wbCgpLmNsb3NlZChXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTEwMyw2ICsx
MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVT
dHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSog
anNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3Ry
ZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6
Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAK
KyAgICBzb3VyY2UtPnNldFN0cmVhbShleGVjLCBqc1JlYWRhYmxlU3RyZWFtKTsKICAgICBpZiAo
IXNvdXJjZS0+c3RhcnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzb3Vy
Y2UtPmVycm9yKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwCmluZGV4IDliNDM0NTdmOGRjNGI5NjZiYTk0ZTc3Mzlh
ODczMDljNWYyM2VmMTQuLjY2ZGM5YTA1OTlhMWI2NmRiZDI2NjJlMzVlYWRjNmE0M2E2ODUzY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFt
SlNTb3VyY2UuY3BwCkBAIC0yOCwxOCArMjgsNzkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIgogCiAjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQotI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKIAorI2luY2x1
ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW0uaCIKKyNpbmNs
dWRlICJSZWFkYWJsZVN0cmVhbS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0
cmluZy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorLy8gV2UgdXNlIHNldFNsb3RUb09iamVjdCBvbiBKUyBmdW5jdGlvbnMgc28g
dGhhdCB3ZSBjYW4gcmV0cmlldmUgdGhlIEpTUmVhZGFibGVTdHJlYW0gb2JqZWN0IGluc2lkZSB0
aGUgY29ycmVzcG9uZGluZyBKUyBmdW5jdGlvbi4KK3N0YXRpYyB2b2lkIHNldFNsb3RUb09iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0VmFsdWUsIGNvbnN0IGNoYXIqIGlkZW50
aWZpZXIsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZh
bHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFB1dFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3Qob2Jq
ZWN0VmFsdWUpOworICAgIG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVj
LCBpZGVudGlmaWVyKSwgdmFsdWUsIHByb3BlcnR5U2xvdCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
IGdldFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvYmplY3RWYWx1ZSwg
Y29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICBKU09iamVjdCogb2JqZWN0ID0gb2JqZWN0
VmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUHJvcGVydHlTbG90IHByb3BlcnR5U2xvdChvYmpl
Y3RWYWx1ZSk7CisKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5SWRlbnRpZmllcihleGVjLCBpZGVu
dGlmaWVyKTsKKyAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJZGVudGlm
aWVyOworICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHByb3BlcnR5U2xvdCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIHJldHVybiBwcm9wZXJ0eVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKworc3RhdGljIEpTUmVhZGFibGVTdHJlYW0qIGdldEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBq
c0R5bmFtaWNDYXN0PEpTUmVhZGFibGVTdHJlYW0qPihnZXRTbG90RnJvbU9iamVjdChleGVjLCBl
eGVjLT5jYWxsZWUoKSwgIlJlYWRhYmxlU3RyZWFtIikpOworICAgIEFTU0VSVChqc1JlYWRhYmxl
U3RyZWFtKTsKKyAgICByZXR1cm4ganNSZWFkYWJsZVN0cmVhbTsKK30KKworaW5saW5lIHN0YXRp
YyBKU1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIG9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgaWRlbnRpZmllcikpOworfQorCitKU1ZhbHVlIFJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUganNGdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzLCBKU1ZhbHVlIHRoaXNWYWx1
ZSkKK3sKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgIENhbGxEYXRhIGNhbGxE
YXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2Fs
bERhdGEpOworCisgICAgSlNWYWx1ZSBleGNlcHRpb247CisKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZCgpID8gbV9yZWFkYWJsZVN0cmVhbSA6IHRoaXNWYWx1ZSwgYXJndW1lbnRzLCAmZXhj
ZXB0aW9uKTsKKworICAgIGlmIChleGNlcHRpb24pIHsKKyAgICAgICAgbV9lcnJvci5zZXQoZXhl
Yy0+dm0oKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkFicnVwdCBjYWxsLiIpKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZTsKK30KKwogUmVmPFJlYWRhYmxlU3RyZWFt
SlNTb3VyY2U+IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkYWJsZVN0cmVhbUpTU291cmNl
KGV4ZWMpKTsKQEAgLTQ3LDcgKzEwOCwxMCBAQCBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4g
UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogCiBS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogICAgIDogbV9lcnJvcihleGVjLT52bSgpLCBqc1VuZGVmaW5lZCgpKQorICAg
ICwgbV9yZWFkYWJsZVN0cmVhbShudWxscHRyKQogeworICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQo
ZXhlYy0+dm0oKSwganNVbmRlZmluZWQoKSk7CisKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01Niw4ICsxMjAsMTYgQEAgUmVhZGFibGVTdHJl
YW1KU1NvdXJjZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFyYW1l
dGVycyBzdXBwb3J0Ci0gICAgc2V0SW50ZXJuYWxFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJl
YWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcGFyYW1ldGVyIHlldC4i
KSk7CisgICAgSlNWYWx1ZSBhcmd1bWVudFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAg
SlNPYmplY3QqIGFyZ3VtZW50ID0gYXJndW1lbnRWYWx1ZS5nZXRPYmplY3QoKTsKKworICAgIEpT
VmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5RnJvbU9iamVjdChleGVjLCBhcmd1bWVu
dCwgInN0YXJ0Iik7CisgICAgaWYgKCFzdGFydEZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkgJiYgIXN0
YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKSB7CisgICAgICAgIHNldEludGVybmFsRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBvYmplY3Qgc3RhcnQg
cHJvcGVydHkgc2hvdWxkIGJlIGZ1bmN0aW9ucy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIHN0YXJ0RnVuY3Rpb24pOwog
fQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnNldEludGVybmFsRXJyb3IoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTY1LDYgKzEzNyw5MSBA
QCB2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnNldEludGVybmFsRXJyb3IoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZwogICAgIG1fZXJyb3Iuc2V0KGV4ZWMtPnZtKCksIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CiB9CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSop
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3Jl
YXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLCAxLCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1
ZUZ1bmN0aW9uIiksIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3Ry
ZWFtID0gZ2V0SlNSZWFkYWJsZVN0cmVhbShleGVjKTsKKyAgICBqc1JlYWRhYmxlU3RyZWFtLT5p
bXBsKCkuY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJsZVN0
cmVhbUNsb3NlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLCAw
LCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbiIpLCBjbG9z
ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBlcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFk
YWJsZVN0cmVhbUVycm9yRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVj
dCgpLCAxLCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbiIp
LCBlcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFt
SlNTb3VyY2U6OnNldFN0cmVhbShFeGVjU3RhdGUqIGV4ZWMsIEpTUmVhZGFibGVTdHJlYW0qIHJl
YWRhYmxlU3RyZWFtKQoreworICAgIG1fcmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbTsK
KworICAgIEpTVmFsdWUgZW5xdWV1ZUZ1bmN0aW9uID0gY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1
ZXVlRnVuY3Rpb24oZXhlYyk7CisgICAgSlNWYWx1ZSBjbG9zZUZ1bmN0aW9uID0gY3JlYXRlUmVh
ZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKGV4ZWMpOworICAgIEpTVmFsdWUgZXJyb3JGdW5jdGlv
biA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihleGVjKTsKKworICAgIG1fZW5x
dWV1ZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBlbnF1ZXVlRnVuY3Rpb24pOworICAgIG1fY2xv
c2VGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY2xvc2VGdW5jdGlvbik7CisgICAgbV9lcnJvckZ1
bmN0aW9uLnNldChleGVjLT52bSgpLCBlcnJvckZ1bmN0aW9uKTsKKworICAgIEpTVmFsdWUgc3Ry
ZWFtVmFsdWUgPSBtX3JlYWRhYmxlU3RyZWFtOworICAgIHNldFNsb3RUb09iamVjdChleGVjLCBt
X2VucXVldWVGdW5jdGlvbi5nZXQoKSwgIlJlYWRhYmxlU3RyZWFtIiwgc3RyZWFtVmFsdWUpOwor
ICAgIHNldFNsb3RUb09iamVjdChleGVjLCBtX2Nsb3NlRnVuY3Rpb24uZ2V0KCksICJSZWFkYWJs
ZVN0cmVhbSIsIHN0cmVhbVZhbHVlKTsKKyAgICBzZXRTbG90VG9PYmplY3QoZXhlYywgbV9lcnJv
ckZ1bmN0aW9uLmdldCgpLCAiUmVhZGFibGVTdHJlYW0iLCBzdHJlYW1WYWx1ZSk7Cit9CisKK3Zv
aWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCkKK3sK
KyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIG1fcmVhZGFibGVTdHJlYW0t
PmltcGwoKS5zdGFydCgpOworICAgIH0pOyAKK30KKworYm9vbCBSZWFkYWJsZVN0cmVhbUpTU291
cmNlOjpzdGFydCgpCit7CisgICAgLy8gTm8tb3AgZnVuY3Rpb24/CisgICAgaWYgKG1fc3RhcnRG
dW5jdGlvbi5nZXQoKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJl
YW1Bc3luYygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBtX3JlYWRhYmxlU3RyZWFtLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwor
CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBl
bmQobV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jbG9z
ZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1fZXJyb3JGdW5jdGlvbi5n
ZXQoKSk7CisKKyAgICBjYWxsRnVuY3Rpb24oZXhlYywgbV9zdGFydEZ1bmN0aW9uLmdldCgpLCBh
cmd1bWVudHMpOworCisgICAgaWYgKCFtX2Vycm9yLmdldCgpLmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJv
bWlzZSBhcyByZXN1bHQgb2YgY2FsbGluZyBzdGFydCBmdW5jdGlvbgorCisgICAgc3RhcnRSZWFk
YWJsZVN0cmVhbUFzeW5jKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKaW5kZXggZTcyMGZhMjNhZDc4ZDlhNGI4YTQ2Mzk5MDE4
NmI0YjBhZjkzMTViYS4uOTlmNjUzNWJjNjkwNzk3OWM3ZDViY2RlZTJkNmM1ZWE0MDQzMTAxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNT
b3VyY2UuaApAQCAtNDcsOCArNDcsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8UmVhZGFi
bGVTdHJlYW1KU1NvdXJjZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgflJlYWRhYmxl
U3RyZWFtSlNTb3VyY2UoKSB7IH0KIAorICAgIHZvaWQgc2V0U3RyZWFtKEpTQzo6RXhlY1N0YXRl
KiwgSlNSZWFkYWJsZVN0cmVhbSopOworCiAgICAgSlNDOjpKU1ZhbHVlIGVycm9yKCkgeyByZXR1
cm4gbV9lcnJvci5nZXQoKTsgfQotICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBzdGFydCgpOwogCiAgICAgLy8gUmVhZGFibGVTdHJlYW1Tb3VyY2UgQVBJLgogICAg
IHZpcnR1YWwgYm9vbCBpc0Vycm9yZWQoKSB7IHJldHVybiAhbV9lcnJvci5nZXQoKS5pc1VuZGVm
aW5lZCgpOyB9CkBAIC01Nyw4ICs1OSwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW50ZXJu
YWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAgICAgUmVhZGFibGVT
dHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBjYWxsRnVu
Y3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYs
IEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgIHZvaWQg
c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisKICAgICAvLyBtX2Vycm9yIG1heSBiZSBhbiBl
cnJvciBnZW5lcmF0ZWQgZnJvbSBSZWFkYWJsZVN0cmVhbUpTU291cmNlIG9yIGZyb20gSlMgY2Fs
bGJhY2tzLgogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9lcnJvcjsKKyAgICBKU1Jl
YWRhYmxlU3RyZWFtKiBtX3JlYWRhYmxlU3RyZWFtOworCisgICAgLy8gRnVuY3Rpb25zIGdpdmVu
IGFzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuCisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiBtX3N0YXJ0RnVuY3Rpb247CisKKyAgICAvLyBGdW5jdGlvbnMgcGFzc2VkIGFzIHBhcmFtZXRl
cnMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4K
KyAgICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fZW5xdWV1ZUZ1bmN0aW9uOworICAgIEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jbG9zZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4gbV9lcnJvckZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDM0MTIzNGJkNzUxNGJiMmYwNjgzNWM1MDc2NWQ5MGY3ZGZmZWI0ZTMuLjE2
ZjgwNTIyY2I0ZDRjNmJlY2QxYjU1ZDNiNDNmMjg2ODg4YzdlZjEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAxNS0wMi0wNSAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxp
YS5jb20+IGFuZCBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisK
KyAgICAgICAgW1N0cmVhbXMgQVBJXSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0
ZXIgaW4gUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBjaGVjayB0aGF0IFJlYWRh
YmxlU3RyZWFtIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gZW1wdHkgb2JqZWN0IGFzIHBhcmFtZXRl
ci4KKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIGNsb3NpbmcgYSBzdHJlYW0gaW4gc3Rh
cnQgZnVuY3Rpb24gd2l0aCBhbmQgd2l0aG91dCBwcm9taXNlIGNhbGxiYWNrcyBzZXQuCisgICAg
ICAgIEFkZGVkIGEgdGVzdCB0byBjaGVjayB0aHJvd2luZyBhbiBlcnJvciBpbiBzdGFydCBmdW5j
dGlvbi4KKworICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3Iu
aHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sOiBB
ZGRlZC4KKwogMjAxNS0wMi0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNh
bm9uLmZyPiBhbmQgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBJbXBsZW1lbnQgYSBiYXJlYm9uZSBSZWFkYWJsZVN0
cmVhbSBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVz
dHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFk
YWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKaW5kZXggOTBjZDI0ZThlNmNlYzIz
ZDg3MDY1NDYwOGVmMzMwZjg0ZTNkYmQ5ZC4uYTVkNmRmZjE1N2E5YmY5YWZiOGI1OTVjYzdkYzJm
MjM5NzE4ZDE0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFk
YWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKQEAgLTIsNSArMiw2IEBACiBQQVNT
IFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYW4gb2JqZWN0IGFzIGFyZ3Vt
ZW50IAogUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZXMgc2hvdWxkIGhhdmUgdGhlIGNvcnJl
Y3QgbGlzdCBvZiBwcm9wZXJ0aWVzIAogUEFTUyBSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3Ry
dWN0ZWQgd2l0aCBubyBhcmd1bWVudHMgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBiZSBjb25z
dHJ1Y3RlZCB3aXRoIGFuIGVtcHR5IG9iamVjdCBhcyBhcmd1bWVudCAKIFBBU1MgUmVhZGFibGVT
dHJlYW0gaW5zdGFuY2VzIGhhdmUgdGhlIGNvcnJlY3QgbWV0aG9kcyBhbmQgcHJvcGVydGllcyAK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1
Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rv
ci5odG1sCmluZGV4IDUyZTU1YjZiMmQ0MDcwMDJhYWViZGU0NmRhMTIwZjMyODViNGM2OWEuLmNj
NDkyY2I3ZmMyOTQyOTRkYjA5MjhiOWFmYzAxNjkxYTMxMGE5YWYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTQ2LDYg
KzQ2LDEwIEBAIHRlc3QoZnVuY3Rpb24oKSB7CiB9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNv
bnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzJyk7CiAKIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
bmV3IFJlYWRhYmxlU3RyZWFtKHsgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0
cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CiAgICAgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBycy5yZWFkLCAnZnVuY3Rpb24nLCAnaGFzIGEgcmVhZCBtZXRob2QnKTsKICAgICBh
c3NlcnRfZXF1YWxzKHR5cGVvZiBycy5jYW5jZWwsICdmdW5jdGlvbicsICdoYXMgYW4gY2FuY2Vs
IG1ldGhvZCcpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1zdGFydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFt
LXN0YXJ0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDA1MDdmNDM2ZWM3MGY3MjAwZjFjM2Ey
NDhkOTc4MjY4OGI0Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACisKK1BBU1Mg
UmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cgCitQQVNTIFJlYWRh
YmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYSBmdW5jdGlvbiBhcyBzdGFydCAgYXJn
dW1lbnQgCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIGNsb3Nl
IHRoZSBzdHJlYW0gCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJl
YWR5IGFuZCBjbG9zZWQgcHJvbWlzZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tc3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJiNDdjMTY5NWEzZWM5YzI2NTU4NDVh
ZGQyYzQyMTYyZjAwNDliCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBodG1s
PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzJz48L3NjcmlwdD4K
KzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIGFzc2VydF90aHJvd3MobmV3IEVy
cm9yKCdlcnJvcicpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxl
U3RyZWFtKAorICAgICAgICB7IHN0YXJ0OgorICAgICAgICAgICAgZnVuY3Rpb24oZW5xdWV1ZSwg
Y2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvcicp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVh
bSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
bmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAnUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0ICBh
cmd1bWVudCcpOworCit0ZXN0MSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIHN0YXJ0IHNo
b3VsZCBiZSBhYmxlIHRvIGNsb3NlIHRoZSBzdHJlYW0nKTsKK3Rlc3QxLnN0ZXAoZnVuY3Rpb24o
KQoreworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAg
ICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3Nl
KCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHNldFRpbWVvdXQodGVzdDEuc3RlcF9mdW5j
KGZ1bmN0aW9uKCkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7
CisgICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICB9KSwgMCk7Cit9KTsKKwordGVzdDIgPSBhc3lu
Y190ZXN0KCdSZWFkYWJsZVN0cmVhbSBjbG9zZSBzaG91bGQgZnVsZmlsbCByZWFkeSBhbmQgY2xv
c2VkIHByb21pc2VzJyk7Cit0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgcnMgPSBu
ZXcgUmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rpb24oZW5xdWV1
ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICB9CisgICAg
fSk7CisKKyAgICB2YXIgcmVhZHlEb25lID0gZmFsc2U7CisgICAgcnMucmVhZHkudGhlbihmdW5j
dGlvbih2KSB7CisgICAgICAgIHJlYWR5RG9uZSA9IHRydWU7CisgICAgICAgIGFzc2VydF9lcXVh
bHModHlwZW9mIHYsICd1bmRlZmluZWQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhycy5zdGF0
ZSwgJ2Nsb3NlZCcpOworICAgIH0pOworCisgICAgcnMuY2xvc2VkLnRoZW4oZnVuY3Rpb24odikg
eworICAgICAgICBhc3NlcnRfZXF1YWxzKHJlYWR5RG9uZSwgdHJ1ZSk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHModHlwZW9mIHYsICd1bmRlZmluZWQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhy
cy5zdGF0ZSwgJ2Nsb3NlZCcpOworICAgICAgICB0ZXN0Mi5kb25lKCk7CisgICAgfSk7Cit9KTsK
KworPC9zY3JpcHQ+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247116</attachid>
            <date>2015-02-23 06:58:11 -0800</date>
            <delta_ts>2015-02-24 07:04:59 -0800</delta_ts>
            <desc>Updated according review and bug 141650</desc>
            <filename>bug-141160-20150223155759.patch</filename>
            <type>text/plain</type>
            <size>21620</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDBlMzU2MmNjNjAzM2Fk
MmNmYTk2ODc5NTg4ODRjYzQ5ZjE1ZjFhOC4uMDBjZDA5ZTM0ZTQzNGI4NGY4YWIxMWZmNjUyZjNh
M2E2OGVkNGU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTAyLTIzICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBj
b25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3RvcmFnZSBvZiB0aGUgSlMgc3RhcnQgZnVuY3Rpb24gaW4gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSB3aXRoaW4g
dGhlIHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgUmVhZGFibGVTdHJlYW0gcHJv
bWlzZSByZXNvbHV0aW9uIGNhbGxiYWNrcyB0byB0YWtlIG5vIHBhcmFtZXRlci4KKworICAgICAg
ICBUZXN0OiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJl
c29sdmVDbG9zZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6
Y2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlUmVhZHlD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6
OkpTVmFsdWU+KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OnJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OmNsb3NlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFi
bGVTdHJlYW06OmNhbmNlbCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UHJvcGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxl
U3RyZWFtRXJyb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpT
U291cmNlOjpzZXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbUpTU291cmNlLmg6CisKIDIwMTUtMDItMjIgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5n
LmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIHN0ZDo6dW5pcXVlX3B0cjw+fG1ha2Vf
dW5pcXVlPD4gdG8gV2ViQ29yZS9wYWdlL3Njcm9sbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggM2U0ZmM2NTk5MDc5YzAw
ZmI2Nzk0NzYwOWRkM2FjNjJiNWRkOWE0ZS4uODhkY2MzNDFlYjJjZWQ0MjMxMzIwZmYyNDZlNWEx
YmFiNGIyNGE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNzcsMTcgKzc4LDU0IEBAIFN0cmluZyBSZWFkYWJsZVN0cmVhbTo6c3Rh
dGUoKSBjb25zdAogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJlcnJvcmVkIik7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIiIp
OworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2xvc2Vk
KFN1Y2Nlc3NDYWxsYmFjaykKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnJlc29sdmVDbG9zZWRDYWxs
YmFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBT
dGF0ZTo6Q2xvc2VkKTsKKyAgICBpZiAoIW1fY2xvc2VkQ2FsbGJhY2spCisgICAgICAgIHJldHVy
bjsKKyAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6YmluZChXVEY6Om1vdmUobV9jbG9zZWRDYWxs
YmFjaykpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkQ2FsbGJhY2spOwogfQogCi12b2lkIFJlYWRh
YmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpj
bG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9jbG9zZWRDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7
Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQoreworICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAgICByZXNv
bHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBTdGF0ZTo6
UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFkYWJsZVN0
cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0
YXRlOjpXYWl0aW5nKTsKKyAgICBpZiAoIW1fcmVhZHlDYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworICAgIGNhbGxPbk1haW5UaHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX3JlYWR5Q2FsbGJh
Y2spKSk7CisgICAgQVNTRVJUKCFtX3JlYWR5Q2FsbGJhY2spOworfQorCit2b2lkIFJlYWRhYmxl
U3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgbV9yZWFkeUNh
bGxiYWNrID0gV1RGOjptb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
V2FpdGluZykKKyAgICAgICAgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcHVsbGluZyBk
YXRhCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmgKaW5kZXggYzg0NWZlZGI4NmRhN2FlYjdiN2EwYmM2ODlkZDhmNWUxYWExYzlhMC4u
YzFkZjJhYmNhNTI1MmEzZmE1NWY4ODk1MTU1N2UwZmQyODVlMWQ4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTYzLDE1ICs2Mywy
NSBAQCBwdWJsaWM6CiAgICAgLy8gSlMgQVBJIGltcGxlbWVudGF0aW9uLgogICAgIFN0cmluZyBz
dGF0ZSgpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPFJl
YWRhYmxlU3RyZWFtPik+IFN1Y2Nlc3NDYWxsYmFjazsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBTdWNjZXNzQ2FsbGJhY2s7CiAgICAgdm9pZCBjbG9zZWQoU3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHJlYWR5KFN1Y2Nlc3NDYWxsYmFjayk7CiAKKyAgICAvLyBBUEkgdXNl
ZCBmcm9tIHRoZSBKUyBiaW5kaW5nLgorICAgIHZvaWQgc3RhcnQoKTsKKworICAgIHZvaWQgY2hh
bmdlU3RhdGVUb0Nsb3NlZCgpOworCiBwcml2YXRlOgogICAgIFJlYWRhYmxlU3RyZWFtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+JiYpOworICAgIHZv
aWQgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7CisgICAgdm9pZCByZXNvbHZlUmVhZHlDYWxsYmFj
aygpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+
IG1fc291cmNlOworCisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fY2xvc2VkQ2FsbGJhY2s7CisgICAg
U3VjY2Vzc0NhbGxiYWNrIG1fcmVhZHlDYWxsYmFjazsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKaW5kZXggNDJkMDJkOWYyOGU5ZTZhODRhNGU3NWMz
YTczMThmOTYxNGY5YTAxYy4uZDBmNzVkMjJlMzIxNTg1MzZkM2ZlODQxYmY0OTliYmIxODhhNGM5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKQEAgLTk4LDYg
Kzk4LDE0IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxib29sPihjb25z
dCBib29sJiByZXN1bHQpCiB9CiAKIHRlbXBsYXRlPD4KK2lubGluZSB2b2lkIERlZmVycmVkV3Jh
cHBlcjo6cmVzb2x2ZTxKU0M6OkpTVmFsdWU+KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCit7
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICByZXNvbHZlKGV4ZWMs
IHZhbHVlKTsKK30KKwordGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFyPj4oY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
JiByZXN1bHQpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
YWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRleCAyNGY1NTU2MTJiMDk3NTY5NDE0MDA5ZWQ4YTVi
MzcyNTBhMjA2NGNmLi5iNTYxNWM5MGE5M2IwN2Q2NThmOTU3OTk2NDRhMGU0YTQ4YjkwNDE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
Q3VzdG9tLmNwcApAQCAtNzAsOCArNzAsOCBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnJl
YWR5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gZ2V0T3JDcmVhdGVQcm9taXNlRGVmZXJyZWRGcm9tT2JqZWN0KGV4ZWMs
IHRoaXMsIGdsb2JhbE9iamVjdCgpLCByZWFkeVByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZl
cnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVhZGFibGVT
dHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShzdHJlYW0u
Z2V0KCkpOworICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7
CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGlt
cGwoKS5yZWFkeShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTg4LDggKzg4LDgg
QEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpjbG9zZWQoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBnZXRPckNyZWF0
ZVByb21pc2VEZWZlcnJlZEZyb21PYmplY3QoZXhlYywgdGhpcywgZ2xvYmFsT2JqZWN0KCksIGNs
b3NlZFByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVj
LCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxs
YmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVhZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7
Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShzdHJlYW0uZ2V0KCkpOworICAgIGF1dG8gc3VjY2Vz
c0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGltcGwoKS5jbG9zZWQoV1RGOjptb3ZlKHN1
Y2Nlc3NDYWxsYmFjaykpOwogCkBAIC0xMzAsNiArMTMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpOwogICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBKU1JlYWRh
YmxlU3RyZWFtOjpjcmVhdGUoSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBn
bG9iYWxPYmplY3QsIEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZVByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIHJlYWRh
YmxlU3RyZWFtLnJlbGVhc2VOb25OdWxsKCkpOwogCisgICAgc291cmNlLT5zZXRTdHJlYW0oZXhl
YywganNSZWFkYWJsZVN0cmVhbSk7CiAgICAgaWYgKCFzb3VyY2UtPnN0YXJ0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc291cmNlLT5lcnJvcigpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApp
bmRleCBiOWEwZDEzNDk1MTg0NTg1NjM3NDM1NjE5YTBhNDg4NmNjNDRlZGUxLi4zNTllMzc3NWI3
Y2NkODRiNmE5ZDY2YzAwNzkyOTg0ZmViMjNhNWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApAQCAtMzgsNiArMzgs
OCBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNiArNjMsNTAgQEAgSlNWYWx1
ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvYmpl
Y3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4gcHJvcGVydHlTbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiB9CiAKKy8vIFRoaXMgc2xvdCBuYW1lIGlzIHVzZWQgdG8gc3RvcmUg
dGhlIEpTUmVhZGFibGVTdHJlYW0gaW4gY3JlYXRlZCBKUyBmdW5jdGlvbnMgKGVucXVldWUsIGNs
b3NlLi4uKS4KKy8vIFRoaXMgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSlNS
ZWFkYWJsZVN0cmVhbSB3aGVuIGV4ZWN1dGluZyB0aGUgSlMgZnVuY3Rpb24uCitzdGF0aWMgSlND
OjpQcml2YXRlTmFtZSYgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEpTQzo6UHJpdmF0ZU5hbWU+IHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoInJl
YWRhYmxlU3RyZWFtIik7CisgICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWU7Cit9CisK
K3N0YXRpYyBKU1JlYWRhYmxlU3RyZWFtKiBnZXRKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0ganNEeW5h
bWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtKj4oZ2V0SW50ZXJuYWxTbG90RnJvbU9iamVjdChleGVj
LCBleGVjLT5jYWxsZWUoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpKSk7CisgICAgQVNTRVJU
KGpzUmVhZGFibGVTdHJlYW0pOworICAgIHJldHVybiBqc1JlYWRhYmxlU3RyZWFtOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1
cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyKSk7Cit9CisK
K0pTVmFsdWUgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJndW1lbnRzKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1
bmN0aW9uLCBjYWxsRGF0YSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKworICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBleGNlcHRpb24pOworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewor
ICAgICAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQWJydXB0IGNhbGwu
IikpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOwor
fQorCiBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAtNzcsOCArMTIzLDE1IEBAIFJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHBhcmFtZXRlcnMgc3VwcG9ydAotICAgIHNldEludGVybmFsRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtZXRl
ciB5ZXQuIikpOworICAgIEpTVmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5RnJvbU9i
amVjdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKSwgInN0YXJ0Iik7CisgICAg
aWYgKHN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKQorICAgICAgICBtX3N0YXJ0RnVuY3Rpb24u
c2V0KGV4ZWMtPnZtKCksIHN0YXJ0RnVuY3Rpb24pOworICAgIGVsc2UgaWYgKCFzdGFydEZ1bmN0
aW9uLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBwcm9wZXJ0
eSBzaG91bGQgYmUgYSBmdW5jdGlvbi4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgc3VwcG9ydC4KIH0KIAogdm9p
ZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC04Niw2ICsxMzksODYgQEAgdm9pZCBS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcKICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgbWVzc2FnZSkpOwogfQogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3RhdGUqKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRh
YmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgMSwgQVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlv
biIpLCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IGdl
dEpTUmVhZGFibGVTdHJlYW0oZXhlYyk7CisgICAganNSZWFkYWJsZVN0cmVhbS0+aW1wbCgpLmNo
YW5nZVN0YXRlVG9DbG9zZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9z
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMCwgQVNDSUlM
aXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24iKSwgY2xvc2VSZWFkYWJs
ZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJl
YW1FcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwg
QVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24iKSwgZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNl
OjpzZXRTdHJlYW0oRXhlY1N0YXRlKiBleGVjLCBKU1JlYWRhYmxlU3RyZWFtKiByZWFkYWJsZVN0
cmVhbSkKK3sKKyAgICBtX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07CisKKyAgICBt
X2VucXVldWVGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1
ZXVlRnVuY3Rpb24oZXhlYykpOworICAgIG1fY2xvc2VGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwg
Y3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKGV4ZWMpKTsKKyAgICBtX2Vycm9yRnVu
Y3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihl
eGVjKSk7CisKKyAgICBKU1ZhbHVlIHN0cmVhbVZhbHVlID0gbV9yZWFkYWJsZVN0cmVhbTsKKyAg
ICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVjLCBtX2VucXVldWVGdW5jdGlvbi5nZXQoKSwg
cmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBzdHJlYW1WYWx1ZSk7CisgICAgc2V0SW50ZXJuYWxT
bG90VG9PYmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKCksIHN0cmVhbVZhbHVlKTsKKyAgICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVj
LCBtX2Vycm9yRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgc3RyZWFt
VmFsdWUpOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0UmVhZGFibGVT
dHJlYW1Bc3luYygpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBt
X3JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuc3RhcnQoKTsKKyAgICB9KTsgCit9CisKK2Jvb2wgUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoKQoreworICAgIGlmICghbV9zdGFydEZ1bmN0aW9u
KSB7CisgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3JlYWRhYmxlU3RyZWFtLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCkp
OworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jbG9zZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1
bWVudHMuYXBwZW5kKG1fZXJyb3JGdW5jdGlvbi5nZXQoKSk7CisKKyAgICBjYWxsRnVuY3Rpb24o
ZXhlYywgbV9zdGFydEZ1bmN0aW9uLmdldCgpLCBtX3JlYWRhYmxlU3RyZWFtLCBhcmd1bWVudHMp
OworCisgICAgaWYgKCFtX2Vycm9yLmdldCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJvbWlzZSBhcyBy
ZXN1bHQgb2YgY2FsbGluZyBzdGFydCBmdW5jdGlvbi4KKworICAgIHN0YXJ0UmVhZGFibGVTdHJl
YW1Bc3luYygpOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1KU1NvdXJjZS5oCmluZGV4IDQ0NjM0NjEyNjZhNmRlZjIzMzg1NTYwMGMyZjc4N2EyODMw
YTIwNzYuLjVkYjE4MDU0YjM4MmU1NjIxMmZhNzk0NDE3MTIzYmMxYjVkOWUzNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZy5oPgogI2luY2x1ZGUgPGhl
YXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJpdmF0ZU5h
bWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKQEAgLTQ4LDggKzQ5LDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U+IGNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSopOwogICAgIH5SZWFkYWJsZVN0cmVhbUpTU291cmNlKCkgeyB9CiAKKyAgICB2b2lkIHNl
dFN0cmVhbShKU0M6OkV4ZWNTdGF0ZSosIEpTUmVhZGFibGVTdHJlYW0qKTsKKwogICAgIEpTQzo6
SlNWYWx1ZSBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBib29sIHN0YXJ0
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3RhcnQoKTsKIAogICAgIC8vIFJlYWRhYmxl
U3RyZWFtU291cmNlIEFQSS4KICAgICB2aXJ0dWFsIGJvb2wgaXNFcnJvcmVkKCkgeyByZXR1cm4g
IW1fZXJyb3IuZ2V0KCkuaXNVbmRlZmluZWQoKTsgfQpAQCAtNTgsOCArNjEsMjAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldEludGVybmFsRXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsKIAogICAgIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IC8qIGpzRnVuY3Rpb24gKi8sIEpTQzo6SlNWYWx1ZSAvKiB0aGlzVmFsdWUgKi8sIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpOworICAgIHZvaWQgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisKICAg
ICAvLyBtX2Vycm9yIG1heSBiZSBhbiBlcnJvciBnZW5lcmF0ZWQgZnJvbSBSZWFkYWJsZVN0cmVh
bUpTU291cmNlIG9yIGZyb20gSlMgY2FsbGJhY2tzLgogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4gbV9lcnJvcjsKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBtX3JlYWRhYmxlU3RyZWFtIHsg
bnVsbHB0ciB9OworCisgICAgLy8gRnVuY3Rpb25zIGdpdmVuIGFzIGNvbnN0cnVjdG9yIHBhcmFt
ZXRlcnMuCisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX3N0YXJ0RnVuY3Rpb247CisK
KyAgICAvLyBGdW5jdGlvbnMgcGFzc2VkIGFzIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHRoZSBm
dW5jdGlvbnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBKU0M6OlN0cm9uZzxKU0M6
OkpTRnVuY3Rpb24+IG1fZW5xdWV1ZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNG
dW5jdGlvbj4gbV9jbG9zZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlv
bj4gbV9lcnJvckZ1bmN0aW9uOwogfTsKIAogdm9pZCBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcml2YXRlTmFtZSYsIEpTQzo6SlNW
YWx1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNDg3MmU2MzQ4MjcxOTY1Mzk5MDkyYjA0NTk4ZTNiMTM2ZGRjNzFjYi4u
MjVlZmI0YzM2NDgzODk5YjFjOWNiNjUwNzA4NjdhZWMxMTMwMDFjYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDE1LTAyLTIzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdh
bGlhLmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4K
KworICAgICAgICBbU3RyZWFtcyBBUEldIFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFt
ZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3IgYWNjZXB0cyBhbiBlbXB0eSBvYmplY3QgYXMgcGFyYW1l
dGVyLgorICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY2hlY2sgY2xvc2luZyBhIHN0cmVhbSBpbiBz
dGFydCBmdW5jdGlvbiB3aXRoIGFuZCB3aXRob3V0IHByb21pc2UgY2FsbGJhY2tzIHNldC4KKyAg
ICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRocm93aW5nIGFuIGVycm9yIGluIHN0YXJ0IGZ1
bmN0aW9uLgorCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rv
ci5odG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWw6
IEFkZGVkLgorCiAyMDE1LTAyLTIyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQcmludCBhIGNvbnNvbGUgd2FybmluZyB3aGVuIEhUTUxDYW52YXNFbGVtZW50IGV4
Y2VlZHMgdGhlIG1heGltdW0gc2l6ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCA2NTNiYmU0
YTk1NWU2YzhkYTY3NDUwZjlkYTVhOTE4Nzg3YmI3ZjNjLi4yNzk4Y2MxNThhM2I2OGE0MmNkNTIz
ZDExYTdjZDgwNjhjOTFkNDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMiw2ICsyLDcg
QEAKIFBBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhbiBvYmplY3Qg
YXMgYXJndW1lbnQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBzaG91bGQgaGF2ZSB0
aGUgY29ycmVjdCBsaXN0IG9mIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBi
ZSBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50cyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2Fu
IGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBS
ZWFkYWJsZVN0cmVhbSBpbnN0YW5jZXMgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzIGFuZCBwcm9w
ZXJ0aWVzIAogUEFTUyBSZWFkYWJsZVN0cmVhbSByZWFkeSBhbmQgY2xvc2VkIHNob3VsZCBhbHdh
eXMgcmV0dXJuIHRoZSBzYW1lIHByb21pc2Ugb2JqZWN0IAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggZWU1ZjEyMDhi
ZTRiMDM3MGE0YmM4ODZmMGI5ODZlNDdiOGM3NDU0Ny4uMjE3ZjU3ZjllNzU2OGEwZDc3ZTYzY2Mx
ZjAxZDc0ZjIwYTQ3MGE1ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbApAQCAtNDYsNiArNDYsMTAgQEAgdGVzdChmdW5jdGlv
bigpIHsKIH0sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1
bWVudHMnKTsKIAogdGVzdChmdW5jdGlvbigpIHsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyB9
KTsKK30sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBv
YmplY3QgYXMgYXJndW1lbnQnKTsKKwordGVzdChmdW5jdGlvbigpIHsKICAgICBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSgpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJzLnJlYWQsICdmdW5j
dGlvbicsICdoYXMgYSByZWFkIG1ldGhvZCcpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJz
LmNhbmNlbCwgJ2Z1bmN0aW9uJywgJ2hhcyBhbiBjYW5jZWwgbWV0aG9kJyk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5ZjhiYmY5YzNhNWE5OWI3ZmJmNWVjNGI1ODBlYTZmNGFjNjFjODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byB0aHJvdyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Ig
c2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50IAorUEFTUyBSZWFkYWJsZVN0
cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byBjbG9zZSB0aGUgc3RyZWFtIAorUEFTUyBSZWFk
YWJsZVN0cmVhbSBjbG9zZSBzaG91bGQgZnVsZmlsbCByZWFkeSBhbmQgY2xvc2VkIHByb21pc2Vz
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDg1NzEwNTgxODhlNGE2MWNkNTNjYzFhYTU5NTk3NzgyMTAzYjU1YwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRt
bApAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPScuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMnPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit0ZXN0KGZ1bmN0
aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAgYXNz
ZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9IG5l
dyBSZWFkYWJsZVN0cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0aW9u
KGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IG1hc2hlZEVy
cm9yOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0
cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAn
UmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0
IGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFk
YWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9z
ZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAg
ICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7Cit9LCAnUmVhZGFibGVTdHJlYW0g
c3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScpOworCit0ZXN0MSA9IGFz
eW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFuZCBj
bG9zZWQgcHJvbWlzZXMnKTsKK3Rlc3QxLnN0ZXAoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9
IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1
ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHZhciByZWFkeURvbmUgPSBmYWxzZTsKKyAgICBycy5yZWFkeS50aGVuKGZ1
bmN0aW9uKHYpIHsKKyAgICAgICAgcmVhZHlEb25lID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0
YXRlLCAnY2xvc2VkJyk7CisgICAgfSk7CisKKyAgICBycy5jbG9zZWQudGhlbihmdW5jdGlvbih2
KSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVhZHlEb25lLCB0cnVlKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHJzLnN0YXRlLCAnY2xvc2VkJyk7CisgICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICB9KTsKK30p
OworCis8L3NjcmlwdD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247231</attachid>
            <date>2015-02-24 07:05:07 -0800</date>
            <delta_ts>2015-02-25 08:20:07 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-141160-20150224160454.patch</filename>
            <type>text/plain</type>
            <size>21620</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDBlMzU2MmNjNjAzM2Fk
MmNmYTk2ODc5NTg4ODRjYzQ5ZjE1ZjFhOC4uMDBjZDA5ZTM0ZTQzNGI4NGY4YWIxMWZmNjUyZjNh
M2E2OGVkNGU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTAyLTIzICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBj
b25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3RvcmFnZSBvZiB0aGUgSlMgc3RhcnQgZnVuY3Rpb24gaW4gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSB3aXRoaW4g
dGhlIHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgUmVhZGFibGVTdHJlYW0gcHJv
bWlzZSByZXNvbHV0aW9uIGNhbGxiYWNrcyB0byB0YWtlIG5vIHBhcmFtZXRlci4KKworICAgICAg
ICBUZXN0OiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJl
c29sdmVDbG9zZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6
Y2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlUmVhZHlD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6
OkpTVmFsdWU+KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OnJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OmNsb3NlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFi
bGVTdHJlYW06OmNhbmNlbCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UHJvcGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxl
U3RyZWFtRXJyb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpT
U291cmNlOjpzZXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbUpTU291cmNlLmg6CisKIDIwMTUtMDItMjIgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5n
LmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIHN0ZDo6dW5pcXVlX3B0cjw+fG1ha2Vf
dW5pcXVlPD4gdG8gV2ViQ29yZS9wYWdlL3Njcm9sbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggM2U0ZmM2NTk5MDc5YzAw
ZmI2Nzk0NzYwOWRkM2FjNjJiNWRkOWE0ZS4uODhkY2MzNDFlYjJjZWQ0MjMxMzIwZmYyNDZlNWEx
YmFiNGIyNGE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNzcsMTcgKzc4LDU0IEBAIFN0cmluZyBSZWFkYWJsZVN0cmVhbTo6c3Rh
dGUoKSBjb25zdAogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJlcnJvcmVkIik7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIiIp
OworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2xvc2Vk
KFN1Y2Nlc3NDYWxsYmFjaykKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnJlc29sdmVDbG9zZWRDYWxs
YmFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBT
dGF0ZTo6Q2xvc2VkKTsKKyAgICBpZiAoIW1fY2xvc2VkQ2FsbGJhY2spCisgICAgICAgIHJldHVy
bjsKKyAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6YmluZChXVEY6Om1vdmUobV9jbG9zZWRDYWxs
YmFjaykpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkQ2FsbGJhY2spOwogfQogCi12b2lkIFJlYWRh
YmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpj
bG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9jbG9zZWRDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7
Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQoreworICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAgICByZXNv
bHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBTdGF0ZTo6
UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFkYWJsZVN0
cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0
YXRlOjpXYWl0aW5nKTsKKyAgICBpZiAoIW1fcmVhZHlDYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworICAgIGNhbGxPbk1haW5UaHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX3JlYWR5Q2FsbGJh
Y2spKSk7CisgICAgQVNTRVJUKCFtX3JlYWR5Q2FsbGJhY2spOworfQorCit2b2lkIFJlYWRhYmxl
U3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgbV9yZWFkeUNh
bGxiYWNrID0gV1RGOjptb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
V2FpdGluZykKKyAgICAgICAgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcHVsbGluZyBk
YXRhCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmgKaW5kZXggYzg0NWZlZGI4NmRhN2FlYjdiN2EwYmM2ODlkZDhmNWUxYWExYzlhMC4u
YzFkZjJhYmNhNTI1MmEzZmE1NWY4ODk1MTU1N2UwZmQyODVlMWQ4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTYzLDE1ICs2Mywy
NSBAQCBwdWJsaWM6CiAgICAgLy8gSlMgQVBJIGltcGxlbWVudGF0aW9uLgogICAgIFN0cmluZyBz
dGF0ZSgpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPFJl
YWRhYmxlU3RyZWFtPik+IFN1Y2Nlc3NDYWxsYmFjazsKKyAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBTdWNjZXNzQ2FsbGJhY2s7CiAgICAgdm9pZCBjbG9zZWQoU3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHJlYWR5KFN1Y2Nlc3NDYWxsYmFjayk7CiAKKyAgICAvLyBBUEkgdXNl
ZCBmcm9tIHRoZSBKUyBiaW5kaW5nLgorICAgIHZvaWQgc3RhcnQoKTsKKworICAgIHZvaWQgY2hh
bmdlU3RhdGVUb0Nsb3NlZCgpOworCiBwcml2YXRlOgogICAgIFJlYWRhYmxlU3RyZWFtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+JiYpOworICAgIHZv
aWQgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7CisgICAgdm9pZCByZXNvbHZlUmVhZHlDYWxsYmFj
aygpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+
IG1fc291cmNlOworCisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fY2xvc2VkQ2FsbGJhY2s7CisgICAg
U3VjY2Vzc0NhbGxiYWNrIG1fcmVhZHlDYWxsYmFjazsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKaW5kZXggNDJkMDJkOWYyOGU5ZTZhODRhNGU3NWMz
YTczMThmOTYxNGY5YTAxYy4uZDBmNzVkMjJlMzIxNTg1MzZkM2ZlODQxYmY0OTliYmIxODhhNGM5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKQEAgLTk4LDYg
Kzk4LDE0IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxib29sPihjb25z
dCBib29sJiByZXN1bHQpCiB9CiAKIHRlbXBsYXRlPD4KK2lubGluZSB2b2lkIERlZmVycmVkV3Jh
cHBlcjo6cmVzb2x2ZTxKU0M6OkpTVmFsdWU+KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCit7
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICByZXNvbHZlKGV4ZWMs
IHZhbHVlKTsKK30KKwordGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpy
ZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFyPj4oY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
JiByZXN1bHQpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
YWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRleCAyNGY1NTU2MTJiMDk3NTY5NDE0MDA5ZWQ4YTVi
MzcyNTBhMjA2NGNmLi5iNTYxNWM5MGE5M2IwN2Q2NThmOTU3OTk2NDRhMGU0YTQ4YjkwNDE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
Q3VzdG9tLmNwcApAQCAtNzAsOCArNzAsOCBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnJl
YWR5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gZ2V0T3JDcmVhdGVQcm9taXNlRGVmZXJyZWRGcm9tT2JqZWN0KGV4ZWMs
IHRoaXMsIGdsb2JhbE9iamVjdCgpLCByZWFkeVByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZl
cnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVhZGFibGVT
dHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShzdHJlYW0u
Z2V0KCkpOworICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7
CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGlt
cGwoKS5yZWFkeShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTg4LDggKzg4LDgg
QEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpjbG9zZWQoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAogewogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBnZXRPckNyZWF0
ZVByb21pc2VEZWZlcnJlZEZyb21PYmplY3QoZXhlYywgdGhpcywgZ2xvYmFsT2JqZWN0KCksIGNs
b3NlZFByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVj
LCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxs
YmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVhZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7
Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShzdHJlYW0uZ2V0KCkpOworICAgIGF1dG8gc3VjY2Vz
c0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGltcGwoKS5jbG9zZWQoV1RGOjptb3ZlKHN1
Y2Nlc3NDYWxsYmFjaykpOwogCkBAIC0xMzAsNiArMTMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpOwogICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBKU1JlYWRh
YmxlU3RyZWFtOjpjcmVhdGUoSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBn
bG9iYWxPYmplY3QsIEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZVByb3RvdHlwZSh2bSwgZ2xvYmFs
T2JqZWN0KSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIHJlYWRh
YmxlU3RyZWFtLnJlbGVhc2VOb25OdWxsKCkpOwogCisgICAgc291cmNlLT5zZXRTdHJlYW0oZXhl
YywganNSZWFkYWJsZVN0cmVhbSk7CiAgICAgaWYgKCFzb3VyY2UtPnN0YXJ0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc291cmNlLT5lcnJvcigpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApp
bmRleCBiOWEwZDEzNDk1MTg0NTg1NjM3NDM1NjE5YTBhNDg4NmNjNDRlZGUxLi4zNTllMzc3NWI3
Y2NkODRiNmE5ZDY2YzAwNzkyOTg0ZmViMjNhNWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApAQCAtMzgsNiArMzgs
OCBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNiArNjMsNTAgQEAgSlNWYWx1
ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvYmpl
Y3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4gcHJvcGVydHlTbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiB9CiAKKy8vIFRoaXMgc2xvdCBuYW1lIGlzIHVzZWQgdG8gc3RvcmUg
dGhlIEpTUmVhZGFibGVTdHJlYW0gaW4gY3JlYXRlZCBKUyBmdW5jdGlvbnMgKGVucXVldWUsIGNs
b3NlLi4uKS4KKy8vIFRoaXMgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSlNS
ZWFkYWJsZVN0cmVhbSB3aGVuIGV4ZWN1dGluZyB0aGUgSlMgZnVuY3Rpb24uCitzdGF0aWMgSlND
OjpQcml2YXRlTmFtZSYgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEpTQzo6UHJpdmF0ZU5hbWU+IHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoInJl
YWRhYmxlU3RyZWFtIik7CisgICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWU7Cit9CisK
K3N0YXRpYyBKU1JlYWRhYmxlU3RyZWFtKiBnZXRKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0ganNEeW5h
bWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtKj4oZ2V0SW50ZXJuYWxTbG90RnJvbU9iamVjdChleGVj
LCBleGVjLT5jYWxsZWUoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpKSk7CisgICAgQVNTRVJU
KGpzUmVhZGFibGVTdHJlYW0pOworICAgIHJldHVybiBqc1JlYWRhYmxlU3RyZWFtOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1
cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyKSk7Cit9CisK
K0pTVmFsdWUgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJndW1lbnRzKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1
bmN0aW9uLCBjYWxsRGF0YSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKworICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikgewor
ICAgICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBleGNlcHRpb24pOworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewor
ICAgICAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQWJydXB0IGNhbGwu
IikpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOwor
fQorCiBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6
Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAtNzcsOCArMTIzLDE1IEBAIFJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHBhcmFtZXRlcnMgc3VwcG9ydAotICAgIHNldEludGVybmFsRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtZXRl
ciB5ZXQuIikpOworICAgIEpTVmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5RnJvbU9i
amVjdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKSwgInN0YXJ0Iik7CisgICAg
aWYgKHN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKQorICAgICAgICBtX3N0YXJ0RnVuY3Rpb24u
c2V0KGV4ZWMtPnZtKCksIHN0YXJ0RnVuY3Rpb24pOworICAgIGVsc2UgaWYgKCFzdGFydEZ1bmN0
aW9uLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBwcm9wZXJ0
eSBzaG91bGQgYmUgYSBmdW5jdGlvbi4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgc3VwcG9ydC4KIH0KIAogdm9p
ZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC04Niw2ICsxMzksODYgQEAgdm9pZCBS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcKICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgbWVzc2FnZSkpOwogfQogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3RhdGUqKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRh
YmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgMSwgQVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlv
biIpLCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IGdl
dEpTUmVhZGFibGVTdHJlYW0oZXhlYyk7CisgICAganNSZWFkYWJsZVN0cmVhbS0+aW1wbCgpLmNo
YW5nZVN0YXRlVG9DbG9zZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9z
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMCwgQVNDSUlM
aXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24iKSwgY2xvc2VSZWFkYWJs
ZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJl
YW1FcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwg
QVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24iKSwgZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNl
OjpzZXRTdHJlYW0oRXhlY1N0YXRlKiBleGVjLCBKU1JlYWRhYmxlU3RyZWFtKiByZWFkYWJsZVN0
cmVhbSkKK3sKKyAgICBtX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07CisKKyAgICBt
X2VucXVldWVGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1
ZXVlRnVuY3Rpb24oZXhlYykpOworICAgIG1fY2xvc2VGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwg
Y3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKGV4ZWMpKTsKKyAgICBtX2Vycm9yRnVu
Y3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihl
eGVjKSk7CisKKyAgICBKU1ZhbHVlIHN0cmVhbVZhbHVlID0gbV9yZWFkYWJsZVN0cmVhbTsKKyAg
ICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVjLCBtX2VucXVldWVGdW5jdGlvbi5nZXQoKSwg
cmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBzdHJlYW1WYWx1ZSk7CisgICAgc2V0SW50ZXJuYWxT
bG90VG9PYmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKCksIHN0cmVhbVZhbHVlKTsKKyAgICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVj
LCBtX2Vycm9yRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgc3RyZWFt
VmFsdWUpOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0UmVhZGFibGVT
dHJlYW1Bc3luYygpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBt
X3JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuc3RhcnQoKTsKKyAgICB9KTsgCit9CisKK2Jvb2wgUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoKQoreworICAgIGlmICghbV9zdGFydEZ1bmN0aW9u
KSB7CisgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3JlYWRhYmxlU3RyZWFtLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCkp
OworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jbG9zZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1
bWVudHMuYXBwZW5kKG1fZXJyb3JGdW5jdGlvbi5nZXQoKSk7CisKKyAgICBjYWxsRnVuY3Rpb24o
ZXhlYywgbV9zdGFydEZ1bmN0aW9uLmdldCgpLCBtX3JlYWRhYmxlU3RyZWFtLCBhcmd1bWVudHMp
OworCisgICAgaWYgKCFtX2Vycm9yLmdldCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJvbWlzZSBhcyBy
ZXN1bHQgb2YgY2FsbGluZyBzdGFydCBmdW5jdGlvbi4KKworICAgIHN0YXJ0UmVhZGFibGVTdHJl
YW1Bc3luYygpOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1KU1NvdXJjZS5oCmluZGV4IDQ0NjM0NjEyNjZhNmRlZjIzMzg1NTYwMGMyZjc4N2EyODMw
YTIwNzYuLjVkYjE4MDU0YjM4MmU1NjIxMmZhNzk0NDE3MTIzYmMxYjVkOWUzNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZy5oPgogI2luY2x1ZGUgPGhl
YXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJpdmF0ZU5h
bWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKQEAgLTQ4LDggKzQ5LDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U+IGNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSopOwogICAgIH5SZWFkYWJsZVN0cmVhbUpTU291cmNlKCkgeyB9CiAKKyAgICB2b2lkIHNl
dFN0cmVhbShKU0M6OkV4ZWNTdGF0ZSosIEpTUmVhZGFibGVTdHJlYW0qKTsKKwogICAgIEpTQzo6
SlNWYWx1ZSBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KLSAgICBib29sIHN0YXJ0
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3RhcnQoKTsKIAogICAgIC8vIFJlYWRhYmxl
U3RyZWFtU291cmNlIEFQSS4KICAgICB2aXJ0dWFsIGJvb2wgaXNFcnJvcmVkKCkgeyByZXR1cm4g
IW1fZXJyb3IuZ2V0KCkuaXNVbmRlZmluZWQoKTsgfQpAQCAtNTgsOCArNjEsMjAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldEludGVybmFsRXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsKIAogICAgIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IC8qIGpzRnVuY3Rpb24gKi8sIEpTQzo6SlNWYWx1ZSAvKiB0aGlzVmFsdWUgKi8sIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpOworICAgIHZvaWQgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisKICAg
ICAvLyBtX2Vycm9yIG1heSBiZSBhbiBlcnJvciBnZW5lcmF0ZWQgZnJvbSBSZWFkYWJsZVN0cmVh
bUpTU291cmNlIG9yIGZyb20gSlMgY2FsbGJhY2tzLgogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4gbV9lcnJvcjsKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBtX3JlYWRhYmxlU3RyZWFtIHsg
bnVsbHB0ciB9OworCisgICAgLy8gRnVuY3Rpb25zIGdpdmVuIGFzIGNvbnN0cnVjdG9yIHBhcmFt
ZXRlcnMuCisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX3N0YXJ0RnVuY3Rpb247CisK
KyAgICAvLyBGdW5jdGlvbnMgcGFzc2VkIGFzIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHRoZSBm
dW5jdGlvbnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBKU0M6OlN0cm9uZzxKU0M6
OkpTRnVuY3Rpb24+IG1fZW5xdWV1ZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNG
dW5jdGlvbj4gbV9jbG9zZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlv
bj4gbV9lcnJvckZ1bmN0aW9uOwogfTsKIAogdm9pZCBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSlNDOjpQcml2YXRlTmFtZSYsIEpTQzo6SlNW
YWx1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNDg3MmU2MzQ4MjcxOTY1Mzk5MDkyYjA0NTk4ZTNiMTM2ZGRjNzFjYi4u
MjVlZmI0YzM2NDgzODk5YjFjOWNiNjUwNzA4NjdhZWMxMTMwMDFjYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDE1LTAyLTIzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdh
bGlhLmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4K
KworICAgICAgICBbU3RyZWFtcyBBUEldIFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFt
ZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3IgYWNjZXB0cyBhbiBlbXB0eSBvYmplY3QgYXMgcGFyYW1l
dGVyLgorICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY2hlY2sgY2xvc2luZyBhIHN0cmVhbSBpbiBz
dGFydCBmdW5jdGlvbiB3aXRoIGFuZCB3aXRob3V0IHByb21pc2UgY2FsbGJhY2tzIHNldC4KKyAg
ICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNoZWNrIHRocm93aW5nIGFuIGVycm9yIGluIHN0YXJ0IGZ1
bmN0aW9uLgorCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rv
ci5odG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWw6
IEFkZGVkLgorCiAyMDE1LTAyLTIyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQcmludCBhIGNvbnNvbGUgd2FybmluZyB3aGVuIEhUTUxDYW52YXNFbGVtZW50IGV4
Y2VlZHMgdGhlIG1heGltdW0gc2l6ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCA2NTNiYmU0
YTk1NWU2YzhkYTY3NDUwZjlkYTVhOTE4Nzg3YmI3ZjNjLi4yNzk4Y2MxNThhM2I2OGE0MmNkNTIz
ZDExYTdjZDgwNjhjOTFkNDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMiw2ICsyLDcg
QEAKIFBBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhbiBvYmplY3Qg
YXMgYXJndW1lbnQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBzaG91bGQgaGF2ZSB0
aGUgY29ycmVjdCBsaXN0IG9mIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBi
ZSBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50cyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2Fu
IGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBS
ZWFkYWJsZVN0cmVhbSBpbnN0YW5jZXMgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzIGFuZCBwcm9w
ZXJ0aWVzIAogUEFTUyBSZWFkYWJsZVN0cmVhbSByZWFkeSBhbmQgY2xvc2VkIHNob3VsZCBhbHdh
eXMgcmV0dXJuIHRoZSBzYW1lIHByb21pc2Ugb2JqZWN0IAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggZWU1ZjEyMDhi
ZTRiMDM3MGE0YmM4ODZmMGI5ODZlNDdiOGM3NDU0Ny4uMjE3ZjU3ZjllNzU2OGEwZDc3ZTYzY2Mx
ZjAxZDc0ZjIwYTQ3MGE1ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbApAQCAtNDYsNiArNDYsMTAgQEAgdGVzdChmdW5jdGlv
bigpIHsKIH0sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1
bWVudHMnKTsKIAogdGVzdChmdW5jdGlvbigpIHsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyB9
KTsKK30sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBv
YmplY3QgYXMgYXJndW1lbnQnKTsKKwordGVzdChmdW5jdGlvbigpIHsKICAgICBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSgpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJzLnJlYWQsICdmdW5j
dGlvbicsICdoYXMgYSByZWFkIG1ldGhvZCcpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJz
LmNhbmNlbCwgJ2Z1bmN0aW9uJywgJ2hhcyBhbiBjYW5jZWwgbWV0aG9kJyk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5ZjhiYmY5YzNhNWE5OWI3ZmJmNWVjNGI1ODBlYTZmNGFjNjFjODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byB0aHJvdyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Ig
c2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50IAorUEFTUyBSZWFkYWJsZVN0
cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byBjbG9zZSB0aGUgc3RyZWFtIAorUEFTUyBSZWFk
YWJsZVN0cmVhbSBjbG9zZSBzaG91bGQgZnVsZmlsbCByZWFkeSBhbmQgY2xvc2VkIHByb21pc2Vz
IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDg1NzEwNTgxODhlNGE2MWNkNTNjYzFhYTU5NTk3NzgyMTAzYjU1YwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRt
bApAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPScuLi9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMnPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit0ZXN0KGZ1bmN0
aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAgYXNz
ZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9IG5l
dyBSZWFkYWJsZVN0cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0aW9u
KGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IG1hc2hlZEVy
cm9yOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0
cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAn
UmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0
IGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFk
YWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9z
ZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAg
ICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7Cit9LCAnUmVhZGFibGVTdHJlYW0g
c3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScpOworCit0ZXN0MSA9IGFz
eW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFuZCBj
bG9zZWQgcHJvbWlzZXMnKTsKK3Rlc3QxLnN0ZXAoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9
IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1
ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIHZhciByZWFkeURvbmUgPSBmYWxzZTsKKyAgICBycy5yZWFkeS50aGVuKGZ1
bmN0aW9uKHYpIHsKKyAgICAgICAgcmVhZHlEb25lID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0
YXRlLCAnY2xvc2VkJyk7CisgICAgfSk7CisKKyAgICBycy5jbG9zZWQudGhlbihmdW5jdGlvbih2
KSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVhZHlEb25lLCB0cnVlKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHJzLnN0YXRlLCAnY2xvc2VkJyk7CisgICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICB9KTsKK30p
OworCis8L3NjcmlwdD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247331</attachid>
            <date>2015-02-25 08:20:22 -0800</date>
            <delta_ts>2015-03-06 09:46:07 -0800</delta_ts>
            <desc>Improving style and comments</desc>
            <filename>bug-141160-20150225172005.patch</filename>
            <type>text/plain</type>
            <size>21950</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVjMTA3YzE0ZGRhNzFi
YzY3YWJhZDZhZWNhOTQzNjQxMjlkOWU4Yy4uMmM3N2Y1MGNlZGM0YTVjYTBlMjNlNGMxNjg4MWE4
OTc5YmQ3ZDdhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTAyLTIzICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFtcyBBUEld
IFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0cmVhbSBj
b25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3RvcmFnZSBvZiB0aGUgSlMgc3RhcnQgZnVuY3Rpb24gaW4gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSB3aXRoaW4g
dGhlIHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgUmVhZGFibGVTdHJlYW0gcHJv
bWlzZSByZXNvbHV0aW9uIGNhbGxiYWNrcyB0byB0YWtlIG5vIHBhcmFtZXRlci4KKworICAgICAg
ICBUZXN0OiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJl
c29sdmVDbG9zZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6
Y2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlUmVhZHlD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6
OkpTVmFsdWU+KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OnJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OmNsb3NlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFi
bGVTdHJlYW06OmNhbmNlbCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UHJvcGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxl
U3RyZWFtRXJyb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpT
U291cmNlOjpzZXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbUpTU291cmNlLmg6CisKIDIwMTUtMDItMjUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxz
dmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gVHJhY2tzIGdy
b3dpbmcgYmV5b25kIGxpbWl0cyB3aGVuIHRoZXkgc2hvdWxkIG5vdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggM2U0ZmM2NTk5
MDc5YzAwZmI2Nzk0NzYwOWRkM2FjNjJiNWRkOWE0ZS4uODhkY2MzNDFlYjJjZWQ0MjMxMzIwZmYy
NDZlNWExYmFiNGIyNGE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsMTcgKzc4LDU0IEBAIFN0cmluZyBSZWFkYWJsZVN0cmVh
bTo6c3RhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJlcnJvcmVkIik7
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIiIpOworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBSZWFkYWJsZVN0cmVhbTo6
Y2xvc2VkKFN1Y2Nlc3NDYWxsYmFjaykKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnJlc29sdmVDbG9z
ZWRDYWxsYmFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQobV9zdGF0
ZSA9PSBTdGF0ZTo6Q2xvc2VkKTsKKyAgICBpZiAoIW1fY2xvc2VkQ2FsbGJhY2spCisgICAgICAg
IHJldHVybjsKKyAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6YmluZChXVEY6Om1vdmUobV9jbG9z
ZWRDYWxsYmFjaykpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkQ2FsbGJhY2spOwogfQogCi12b2lk
IFJlYWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3Ry
ZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgbV9jbG9zZWRDYWxsYmFjayA9IFdURjo6bW92ZShjYWxsYmFjayk7CisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxi
YWNrKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAg
ICByZXNvbHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBT
dGF0ZTo6UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX3N0YXRl
ICE9IFN0YXRlOjpXYWl0aW5nKTsKKyAgICBpZiAoIW1fcmVhZHlDYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuOworICAgIGNhbGxPbk1haW5UaHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX3JlYWR5
Q2FsbGJhY2spKSk7CisgICAgQVNTRVJUKCFtX3JlYWR5Q2FsbGJhY2spOworfQorCit2b2lkIFJl
YWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgbV9y
ZWFkeUNhbGxiYWNrID0gV1RGOjptb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBT
dGF0ZTo6V2FpdGluZykKKyAgICAgICAgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKK30KKwordm9p
ZCBSZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcHVs
bGluZyBkYXRhCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmgKaW5kZXggYzg0NWZlZGI4NmRhN2FlYjdiN2EwYmM2ODlkZDhmNWUxYWEx
YzlhMC4uYzFkZjJhYmNhNTI1MmEzZmE1NWY4ODk1MTU1N2UwZmQyODVlMWQ4YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTYzLDE1
ICs2MywyNSBAQCBwdWJsaWM6CiAgICAgLy8gSlMgQVBJIGltcGxlbWVudGF0aW9uLgogICAgIFN0
cmluZyBzdGF0ZSgpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVm
UHRyPFJlYWRhYmxlU3RyZWFtPik+IFN1Y2Nlc3NDYWxsYmFjazsKKyAgICB0eXBlZGVmIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBTdWNjZXNzQ2FsbGJhY2s7CiAgICAgdm9pZCBjbG9zZWQoU3VjY2Vz
c0NhbGxiYWNrKTsKICAgICB2b2lkIHJlYWR5KFN1Y2Nlc3NDYWxsYmFjayk7CiAKKyAgICAvLyBB
UEkgdXNlZCBmcm9tIHRoZSBKUyBiaW5kaW5nLgorICAgIHZvaWQgc3RhcnQoKTsKKworICAgIHZv
aWQgY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworCiBwcml2YXRlOgogICAgIFJlYWRhYmxlU3RyZWFt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFibGVTdHJlYW1Tb3VyY2U+JiYpOwor
ICAgIHZvaWQgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7CisgICAgdm9pZCByZXNvbHZlUmVhZHlD
YWxsYmFjaygpOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBSZWY8UmVhZGFibGVTdHJlYW1T
b3VyY2U+IG1fc291cmNlOworCisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fY2xvc2VkQ2FsbGJhY2s7
CisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fcmVhZHlDYWxsYmFjazsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKaW5kZXggNDJkMDJkOWYyOGU5ZTZhODRh
NGU3NWMzYTczMThmOTYxNGY5YTAxYy4uZDBmNzVkMjJlMzIxNTg1MzZkM2ZlODQxYmY0OTliYmIx
ODhhNGM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKQEAg
LTk4LDYgKzk4LDE0IEBAIGlubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxib29s
Pihjb25zdCBib29sJiByZXN1bHQpCiB9CiAKIHRlbXBsYXRlPD4KK2lubGluZSB2b2lkIERlZmVy
cmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6OkpTVmFsdWU+KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFs
dWUpCit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICByZXNvbHZl
KGV4ZWMsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFw
cGVyOjpyZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFyPj4oY29uc3QgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+JiByZXN1bHQpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRleCAwZjc5OTNkZWVjZTg4ZWRmNWExM2Yw
ODVhNmI5N2ViODAwYzQ1NGJlLi5hZDQxZGEwZTgyMGRlYTllMDNmZjE0MzhiMzM0MzczODk2Yjkz
MTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3Ry
ZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtQ3VzdG9tLmNwcApAQCAtNzAsOCArNzAsOCBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJl
YW06OnJlYWR5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkID0gZ2V0T3JDcmVhdGVQcm9taXNlRGVmZXJyZWRGcm9tT2JqZWN0
KGV4ZWMsIHRoaXMsIGdsb2JhbE9iamVjdCgpLCByZWFkeVByb21pc2VTbG90TmFtZSgpKTsKICAg
ICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVh
ZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShz
dHJlYW0uZ2V0KCkpOworICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0
YWJsZSB7CisgICAgICAgIHdyYXBwZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Owog
ICAgIGltcGwoKS5yZWFkeShXVEY6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSk7CiAKQEAgLTg4LDgg
Kzg4LDggQEAgSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtOjpjbG9zZWQoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogewogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBnZXRP
ckNyZWF0ZVByb21pc2VEZWZlcnJlZEZyb21PYmplY3QoZXhlYywgdGhpcywgZ2xvYmFsT2JqZWN0
KCksIGNsb3NlZFByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBl
cihleGVjLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nl
c3NDYWxsYmFjayA9IFt3cmFwcGVyXShSZWZQdHI8UmVhZGFibGVTdHJlYW0+IHN0cmVhbSkgbXV0
YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVzb2x2ZShzdHJlYW0uZ2V0KCkpOworICAgIGF1dG8g
c3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHdyYXBwZXIu
cmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGltcGwoKS5jbG9zZWQoV1RGOjpt
b3ZlKHN1Y2Nlc3NDYWxsYmFjaykpOwogCkBAIC0xMzAsNiArMTMwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSogZXhl
YykKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpOwogICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBK
U1JlYWRhYmxlU3RyZWFtOjpjcmVhdGUoSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZVByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCks
IHJlYWRhYmxlU3RyZWFtLnJlbGVhc2VOb25OdWxsKCkpOwogCisgICAgc291cmNlLT5zZXRTdHJl
YW0oZXhlYywganNSZWFkYWJsZVN0cmVhbSk7CiAgICAgaWYgKCFzb3VyY2UtPnN0YXJ0KCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc291cmNlLT5lcnJvcigpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNl
LmNwcAppbmRleCBiODFhYWNkNTAwOGI1NzQ0ODJkOWVjMTYzYTdhMzcwYWVkN2NkN2Q3Li42N2Yw
ZTVmNWI1NmVkZGE1MzMyNjY5ODM5NGRiMzI3NDBlMTFlY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApAQCAtMzgs
NiArMzgsOCBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNiArNjMsNTAgQEAg
SlNWYWx1ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBvYmplY3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4gcHJvcGVydHlTbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKKy8vIFRoaXMgc2xvdCBuYW1lIGlzIHVzZWQgdG8g
c3RvcmUgdGhlIEpTUmVhZGFibGVTdHJlYW0gaW4gY3JlYXRlZCBKUyBmdW5jdGlvbnMgKGVucXVl
dWUsIGNsb3NlLi4uKS4KKy8vIFRoaXMgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGNvcnJlc3BvbmRp
bmcgSlNSZWFkYWJsZVN0cmVhbSB3aGVuIGV4ZWN1dGluZyB0aGUgSlMgZnVuY3Rpb24uCitzdGF0
aWMgSlNDOjpQcml2YXRlTmFtZSYgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTQzo6UHJpdmF0ZU5hbWU+IHJlYWRhYmxlU3RyZWFtU2xvdE5h
bWUoInJlYWRhYmxlU3RyZWFtIik7CisgICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWU7
Cit9CisKK3N0YXRpYyBKU1JlYWRhYmxlU3RyZWFtKiBnZXRKU1JlYWRhYmxlU3RyZWFtKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0g
anNEeW5hbWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtKj4oZ2V0SW50ZXJuYWxTbG90RnJvbU9iamVj
dChleGVjLCBleGVjLT5jYWxsZWUoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpKSk7CisgICAg
QVNTRVJUKGpzUmVhZGFibGVTdHJlYW0pOworICAgIHJldHVybiBqc1JlYWRhYmxlU3RyZWFtOwor
fQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAg
ICByZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlmaWVyKSk7
Cit9CisKK0pTVmFsdWUgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJndW1lbnRzKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKworICAg
IEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlv
bikgeworICAgICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBleGNlcHRpb24pOworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkgeworICAgICAgICBzZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQWJydXB0
IGNhbGwuIikpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIHZh
bHVlOworfQorCiBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAtNzcsOCArMTIzLDE1IEBA
IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHBhcmFtZXRlcnMgc3VwcG9ydAotICAgIHNldEludGVybmFsRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBzdXBwb3J0IHBh
cmFtZXRlciB5ZXQuIikpOworICAgIEpTVmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5
RnJvbU9iamVjdChleGVjLCBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKSwgInN0YXJ0Iik7
CisgICAgaWYgKHN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKQorICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KGV4ZWMtPnZtKCksIGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHN0YXJ0RnVu
Y3Rpb24pKTsKKyAgICBlbHNlIGlmICghc3RhcnRGdW5jdGlvbi5pc1VuZGVmaW5lZCgpKSB7Cisg
ICAgICAgIHNldEludGVybmFsRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVh
bSBjb25zdHJ1Y3RvciBvYmplY3Qgc3RhcnQgcHJvcGVydHkgc2hvdWxkIGJlIGEgZnVuY3Rpb24u
IikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBv
dGhlciBwYXJhbWV0ZXJzIHN1cHBvcnQuCiB9CiAKIHZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQpAQCAtODYsNiArMTM5LDg2IEBAIHZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6
c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nCiAgICAg
bV9lcnJvci5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
IH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdWV1ZVJlYWRhYmxl
U3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgi
Q3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24iKSwgZW5xdWV1ZVJlYWRhYmxlU3Ry
ZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
bG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTUmVh
ZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBnZXRKU1JlYWRhYmxlU3RyZWFtKGV4ZWMp
OworICAgIGpzUmVhZGFibGVTdHJlYW0tPmltcGwoKS5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpT
RnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDAsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVT
dHJlYW1DbG9zZUZ1bmN0aW9uIiksIGNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUmVhZGFibGVTdHJlYW1G
dW5jdGlvbihFeGVjU3RhdGUqKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3Rh
dGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVh
ZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uIiksIGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7
Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0U3RyZWFtKEV4ZWNTdGF0ZSog
ZXhlYywgSlNSZWFkYWJsZVN0cmVhbSogcmVhZGFibGVTdHJlYW0pCit7CisgICAgbV9yZWFkYWJs
ZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOworCisgICAgbV9lbnF1ZXVlRnVuY3Rpb24uc2V0KGV4
ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKGV4ZWMpKTsKKyAg
ICBtX2Nsb3NlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xv
c2VGdW5jdGlvbihleGVjKSk7CisgICAgbV9lcnJvckZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBj
cmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24oZXhlYykpOworCisgICAgSlNWYWx1ZSBz
dHJlYW1WYWx1ZSA9IG1fcmVhZGFibGVTdHJlYW07CisgICAgc2V0SW50ZXJuYWxTbG90VG9PYmpl
Y3QoZXhlYywgbV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUo
KSwgc3RyZWFtVmFsdWUpOworICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fY2xv
c2VGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBzdHJlYW1WYWx1ZSk7
CisgICAgc2V0SW50ZXJuYWxTbG90VG9PYmplY3QoZXhlYywgbV9lcnJvckZ1bmN0aW9uLmdldCgp
LCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIHN0cmVhbVZhbHVlKTsKK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKQoreworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgbV9yZWFkYWJsZVN0cmVhbS0+aW1wbCgp
LnN0YXJ0KCk7CisgICAgfSk7IAorfQorCitib29sIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0
YXJ0KCkKK3sKKyAgICBpZiAoIW1fc3RhcnRGdW5jdGlvbikgeworICAgICAgICBzdGFydFJlYWRh
YmxlU3RyZWFtQXN5bmMoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRXhl
Y1N0YXRlKiBleGVjID0gbV9yZWFkYWJsZVN0cmVhbS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVu
dHMuYXBwZW5kKG1fZW5xdWV1ZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KG1fY2xvc2VGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Vycm9yRnVu
Y3Rpb24uZ2V0KCkpOworCisgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIG1fc3RhcnRGdW5jdGlvbi5n
ZXQoKSwgbV9yZWFkYWJsZVN0cmVhbSwgYXJndW1lbnRzKTsKKworICAgIGlmICghbV9lcnJvci5n
ZXQoKS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGhhbmRsaW5nIHByb21pc2UgYXMgcmVzdWx0IG9mIGNhbGxpbmcgc3RhcnQg
ZnVuY3Rpb24uCisKKyAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaAppbmRleCA0
NDYzNDYxMjY2YTZkZWYyMzM4NTU2MDBjMmY3ODdhMjgzMGEyMDc2Li5hNmI2ZWI0YmRjOWRmMDgz
ZWQ0NDExN2Q3NDgwNTViNmQwNzFkZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDxydW50aW1lL1ByaXZhdGVOYW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogCkBAIC00MywxMyArNDQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBK
U1JlYWRhYmxlU3RyZWFtOwogCisvLyBSZWFkYWJsZVN0cmVhbUpTU291cmNlIGlzIHRoZSBjbGFz
cyB0aGF0IG1ha2VzIHRoZSBsaW5rIGJldHdlZW4gV2ViQ29yZTo6UmVhZGFibGVTdHJlYW0gb2Jq
ZWN0cyBhbmQKKy8vIHRoZSBKYXZhU2NyaXB0IHNvdXJjZSBnaXZlbiB3aXRoaW4gUmVhZGFibGVT
dHJlYW0ganMgY29uc3RydWN0b3IuCiBjbGFzcyBSZWFkYWJsZVN0cmVhbUpTU291cmNlOiBwdWJs
aWMgUmVhZGFibGVTdHJlYW1Tb3VyY2UgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8UmVhZGFi
bGVTdHJlYW1KU1NvdXJjZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgflJlYWRhYmxl
U3RyZWFtSlNTb3VyY2UoKSB7IH0KIAorICAgIHZvaWQgc2V0U3RyZWFtKEpTQzo6RXhlY1N0YXRl
KiwgSlNSZWFkYWJsZVN0cmVhbSopOworCiAgICAgSlNDOjpKU1ZhbHVlIGVycm9yKCkgeyByZXR1
cm4gbV9lcnJvci5nZXQoKTsgfQotICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBzdGFydCgpOwogCiAgICAgLy8gUmVhZGFibGVTdHJlYW1Tb3VyY2UgQVBJLgogICAg
IHZpcnR1YWwgYm9vbCBpc0Vycm9yZWQoKSB7IHJldHVybiAhbV9lcnJvci5nZXQoKS5pc1VuZGVm
aW5lZCgpOyB9CkBAIC01OCw4ICs2MywyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW50ZXJu
YWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAgICAgUmVhZGFibGVT
dHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBjYWxsRnVu
Y3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgLyoganNGdW5jdGlvbiAqLywgSlND
OjpKU1ZhbHVlIC8qIHRoaXNWYWx1ZSAqLywgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgdm9p
ZCBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKwogICAgIC8vIG1fZXJyb3IgbWF5IGJlIGFu
IGVycm9yIGdlbmVyYXRlZCBmcm9tIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Ugb3IgZnJvbSBKUyBj
YWxsYmFja3MuCiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Vycm9yOworICAgIEpT
UmVhZGFibGVTdHJlYW0qIG1fcmVhZGFibGVTdHJlYW0geyBudWxscHRyIH07CisKKyAgICAvLyBG
dW5jdGlvbnMgZ2l2ZW4gYXMgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KKyAgICBKU0M6OlN0cm9u
ZzxKU0M6OkpTRnVuY3Rpb24+IG1fc3RhcnRGdW5jdGlvbjsKKworICAgIC8vIEZ1bmN0aW9ucyBw
YXNzZWQgYXMgcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4g
dGhlIGNvbnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lbnF1
ZXVlRnVuY3Rpb247CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2Nsb3NlRnVu
Y3Rpb247CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2Vycm9yRnVuY3Rpb247
CiB9OwogCiB2b2lkIHNldEludGVybmFsU2xvdFRvT2JqZWN0KEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBKU0M6OlByaXZhdGVOYW1lJiwgSlNDOjpKU1ZhbHVlKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4Yjdh
YmU0OWFkYmJlOTQzNDE2ZTg3MzA0Y2QzYzhjMTBiNjJlNDRkLi5hMDRjOTY0MjQwZjc3NDc3MWQ1
ODg0Zjk5Mzk4MzQ5MTM0NTRhMDE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMDItMjMg
IFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5u
IEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFtTdHJlYW1z
IEFQSV0gU3VwcG9ydCB0aGUgc3RhcnQgZnVuY3Rpb24gcGFyYW1ldGVyIGluIFJlYWRhYmxlU3Ry
ZWFtIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDExNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY2hlY2sgdGhhdCBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1
Y3RvciBhY2NlcHRzIGFuIGVtcHR5IG9iamVjdCBhcyBwYXJhbWV0ZXIuCisgICAgICAgIEFkZGVk
IGEgdGVzdCB0byBjaGVjayBjbG9zaW5nIGEgc3RyZWFtIGluIHN0YXJ0IGZ1bmN0aW9uIHdpdGgg
YW5kIHdpdGhvdXQgcHJvbWlzZSBjYWxsYmFja3Mgc2V0LgorICAgICAgICBBZGRlZCBhIHRlc3Qg
dG8gY2hlY2sgdGhyb3dpbmcgYW4gZXJyb3IgaW4gc3RhcnQgZnVuY3Rpb24uCisKKyAgICAgICAg
KiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICog
c3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbDogQWRkZWQuCisKIDIwMTUtMDIt
MjUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NTUyBHcmlkIExheW91dF0gVHJhY2tzIGdyb3dpbmcgYmV5b25kIGxpbWl0cyB3aGVuIHRoZXkg
c2hvdWxkIG5vdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxl
c3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCA2NTNiYmU0YTk1NWU2YzhkYTY3
NDUwZjlkYTVhOTE4Nzg3YmI3ZjNjLi4yNzk4Y2MxNThhM2I2OGE0MmNkNTIzZDExYTdjZDgwNjhj
OTFkNDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNv
bnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxl
c3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMiw2ICsyLDcgQEAKIFBBU1MgUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhbiBvYmplY3QgYXMgYXJndW1lbnQg
CiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBs
aXN0IG9mIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBiZSBjb25zdHJ1Y3Rl
ZCB3aXRoIG5vIGFyZ3VtZW50cyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0cnVj
dGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBSZWFkYWJsZVN0cmVh
bSBpbnN0YW5jZXMgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIAogUEFT
UyBSZWFkYWJsZVN0cmVhbSByZWFkeSBhbmQgY2xvc2VkIHNob3VsZCBhbHdheXMgcmV0dXJuIHRo
ZSBzYW1lIHByb21pc2Ugb2JqZWN0IAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1z
L3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggZDM5M2UxMmZkMzhlNTViMTBiNjNi
NjQxZDE5MWMyMmJlYWY2MGQ0Ny4uZGZhYTIxMDNiNzUzYmY0MmI1MzdhZWZmMThiZTM5Y2EwOGJj
NzJiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25z
dHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29u
c3RydWN0b3IuaHRtbApAQCAtNDYsNiArNDYsMTAgQEAgdGVzdChmdW5jdGlvbigpIHsKIH0sICdS
ZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHMnKTsKIAog
dGVzdChmdW5jdGlvbigpIHsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyB9KTsKK30sICdSZWFk
YWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBvYmplY3QgYXMgYXJn
dW1lbnQnKTsKKwordGVzdChmdW5jdGlvbigpIHsKICAgICBycyA9IG5ldyBSZWFkYWJsZVN0cmVh
bSgpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJzLnJlYWQsICdmdW5jdGlvbicsICdoYXMg
YSByZWFkIG1ldGhvZCcpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJzLmNhbmNlbCwgJ2Z1
bmN0aW9uJywgJ2hhcyBhbiBjYW5jZWwgbWV0aG9kJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5
ZjhiYmY5YzNhNWE5OWI3ZmJmNWVjNGI1ODBlYTZmNGFjNjFjODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDYgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJs
ZSB0byB0aHJvdyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBh
IGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byBjbG9zZSB0aGUgc3RyZWFtIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBj
bG9zZSBzaG91bGQgZnVsZmlsbCByZWFkeSBhbmQgY2xvc2VkIHByb21pc2VzIAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwgYi9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg1
NzEwNTgxODhlNGE2MWNkNTNjYzFhYTU5NTk3NzgyMTAzYjU1YwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbApAQCAtMCwwICsx
LDYyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMnPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyc+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAg
ICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAgYXNzZXJ0X3Rocm93cyht
YXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0
cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNs
b3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IG1hc2hlZEVycm9yOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2Vy
dF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRh
YmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAnUmVhZGFibGVTdHJl
YW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50Jyk7
CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgK
KyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsK
KyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnRfZXF1
YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7Cit9LCAnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxk
IGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScpOworCit0ZXN0MSA9IGFzeW5jX3Rlc3QoJ1Jl
YWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFuZCBjbG9zZWQgcHJvbWlz
ZXMnKTsKK3Rlc3QxLnN0ZXAoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFkYWJs
ZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwg
ZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAg
IHZhciByZWFkeURvbmUgPSBmYWxzZTsKKyAgICBycy5yZWFkeS50aGVuKGZ1bmN0aW9uKHYpIHsK
KyAgICAgICAgcmVhZHlEb25lID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2Yg
diwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2Vk
Jyk7CisgICAgfSk7CisKKyAgICBycy5jbG9zZWQudGhlbihmdW5jdGlvbih2KSB7CisgICAgICAg
IGFzc2VydF9lcXVhbHMocmVhZHlEb25lLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0
eXBlb2YgdiwgJ3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAn
Y2xvc2VkJyk7CisgICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICB9KTsKK30pOworCis8L3Njcmlw
dD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248073</attachid>
            <date>2015-03-06 09:46:16 -0800</date>
            <delta_ts>2015-03-07 01:13:25 -0800</delta_ts>
            <desc>Rebasing a</desc>
            <filename>bug-141160-20150306184555.patch</filename>
            <type>text/plain</type>
            <size>22111</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ3ODNiMTFmM2Y2OTQ1
OTIxNTYxMTkyMjkyZGQzNWM5ZWMyMjVmYS4uMWZjZmIxNjhhY2U3MmQ0YzY4YWZmNGZlNTMxNTc0
YmJiMzEwMTMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTAzLTA2ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHN0b3JhZ2Ugb2YgdGhlIEpTIHNvdXJjZSBvYmplY3QgaW4gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSB3aXRoaW4g
dGhlIHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgUmVhZGFibGVTdHJlYW0gcHJv
bWlzZSByZXNvbHV0aW9uIGNhbGxiYWNrcyB0byB0YWtlIG5vIHBhcmFtZXRlci4KKworICAgICAg
ICBUZXN0OiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZVN0cmVhbTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnJl
c29sdmVDbG9zZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6
Y2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRv
Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpyZXNvbHZlUmVhZHlD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6cmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6
OkpTVmFsdWU+KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OnJlYWR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTUmVhZGFibGVTdHJlYW06OmNsb3NlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVhZGFi
bGVTdHJlYW06OmNhbmNlbCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkYWJsZVN0cmVhbVNs
b3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UHJvcGVydHlGcm9tT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsb3NlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXJyb3JS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxl
U3RyZWFtRXJyb3JGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpT
U291cmNlOjpzZXRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbUpTU291cmNlLmg6CisKIDIwMTUtMDMtMDMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRoZSBidWlsZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCmluZGV4IGY3
NjI3NWEzNzA5MTA3ZTA3ZTI2MzJiNjAwNDJhOGQ0OGExYmY3MTkuLjI4YmViYjgxZjljMmE1OTQx
OTM5NTE4YjRhYjQ5Yzk2NjgxNzVkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiAjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsMTcgKzc3LDU0IEBAIFN0cmluZyBSZWFk
YWJsZVN0cmVhbTo6c3RhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJl
cnJvcmVkIik7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIiIpOworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBSZWFkYWJs
ZVN0cmVhbTo6Y2xvc2VkKFN1Y2Nlc3NDYWxsYmFjaykKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnJl
c29sdmVDbG9zZWRDYWxsYmFjaygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NF
UlQobV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkKTsKKyAgICBpZiAoIW1fY2xvc2VkU3VjY2Vzc0Nh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgY2FsbE9uTWFpblRocmVhZChzdGQ6OmJpbmQo
V1RGOjptb3ZlKG1fY2xvc2VkU3VjY2Vzc0NhbGxiYWNrKSkpOworICAgIEFTU0VSVCghbV9jbG9z
ZWRTdWNjZXNzQ2FsbGJhY2spOwogfQogCi12b2lkIFJlYWRhYmxlU3RyZWFtOjpyZWFkeShTdWNj
ZXNzQ2FsbGJhY2spCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fY2xvc2Vk
U3VjY2Vzc0NhbGxiYWNrID0gV1RGOjptb3ZlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAgICAgICAgcmVzb2x2ZUNsb3NlZENhbGxiYWNrKCk7
Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQoreworICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2xvc2VkOworICAgICAgICByZXNvbHZlUmVhZHlDYWxsYmFjaygpOworICAgICAgICByZXNv
bHZlQ2xvc2VkQ2FsbGJhY2soKTsKKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBTdGF0ZTo6
UmVhZGFibGUgd2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KK30KKwordm9pZCBSZWFkYWJsZVN0
cmVhbTo6cmVzb2x2ZVJlYWR5Q2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0
YXRlOjpXYWl0aW5nKTsKKyAgICBpZiAoIW1fcmVhZHlDYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworICAgIGNhbGxPbk1haW5UaHJlYWQoc3RkOjpiaW5kKFdURjo6bW92ZShtX3JlYWR5Q2FsbGJh
Y2spKSk7CisgICAgQVNTRVJUKCFtX3JlYWR5Q2FsbGJhY2spOworfQorCit2b2lkIFJlYWRhYmxl
U3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgbV9yZWFkeUNh
bGxiYWNrID0gV1RGOjptb3ZlKGNhbGxiYWNrKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6
V2FpdGluZykKKyAgICAgICAgcmVzb2x2ZVJlYWR5Q2FsbGJhY2soKTsKK30KKwordm9pZCBSZWFk
YWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcHVsbGluZyBk
YXRhCiB9CiAKIGNvbnN0IGNoYXIqIFJlYWRhYmxlU3RyZWFtOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtLmgKaW5kZXggNzY0NzNlMTU4NzI0OTdmMzY3OGVhZDY1NDBkOTJmNDA4OGUwNjIwYS4uYjRl
ZmUwYWY3YjE3NTY5NjEwYzEyMTExZjAwYzUyNWQxOTc0YzE3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTY1LDggKzY1LDE1IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsb3NlZChTdWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgcmVh
ZHkoU3VjY2Vzc0NhbGxiYWNrKTsKIAorICAgIC8vIEFQSSB1c2VkIGZyb20gdGhlIEpTIGJpbmRp
bmcuCisgICAgdm9pZCBzdGFydCgpOworCisgICAgdm9pZCBjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7
CisKIHByaXZhdGU6CiAgICAgUmVhZGFibGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFJlZjxSZWFkYWJsZVN0cmVhbVNvdXJjZT4mJik7CisgICAgdm9pZCByZXNvbHZlQ2xvc2VkQ2Fs
bGJhY2soKTsKKyAgICB2b2lkIHJlc29sdmVSZWFkeUNhbGxiYWNrKCk7CiAKICAgICAvLyBBY3Rp
dmVET01PYmplY3QgQVBJLgogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdCBvdmVycmlkZTsKQEAgLTc0LDYgKzgxLDEwIEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBt
X3N0YXRlOwogICAgIFJlZjxSZWFkYWJsZVN0cmVhbVNvdXJjZT4gbV9zb3VyY2U7CisKKyAgICAv
LyBGSVhNRTogQWRkIGNsb3NlZCBlcnJvciBjYWxsYmFjay4KKyAgICBTdWNjZXNzQ2FsbGJhY2sg
bV9jbG9zZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgU3VjY2Vzc0NhbGxiYWNrIG1fcmVhZHlDYWxs
YmFjazsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgK
aW5kZXggNDJkMDJkOWYyOGU5ZTZhODRhNGU3NWMzYTczMThmOTYxNGY5YTAxYy4uZDBmNzVkMjJl
MzIxNTg1MzZkM2ZlODQxYmY0OTliYmIxODhhNGM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Qcm9taXNlLmgKQEAgLTk4LDYgKzk4LDE0IEBAIGlubGluZSB2b2lkIERlZmVy
cmVkV3JhcHBlcjo6cmVzb2x2ZTxib29sPihjb25zdCBib29sJiByZXN1bHQpCiB9CiAKIHRlbXBs
YXRlPD4KK2lubGluZSB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxKU0M6OkpTVmFsdWU+
KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2tlcihleGVjKTsKKyAgICByZXNvbHZlKGV4ZWMsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8Pgog
aW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFZlY3Rvcjx1bnNpZ25lZCBjaGFy
Pj4oY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByZXN1bHQpCiB7CiAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRl
eCA1YjZkMWQ1ZjZhMjRjN2EzZDVmMzQ3N2UwMWE1NjBjMmM3MjcyY2M2Li4zNjJkOTc3MzIwY2Vl
ZTBkOWU3ZWIyZTdjODc5NGJhOGQxZTk3YTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApAQCAtNzAsOCArNzAsOCBA
QCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OnJlYWR5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IHsKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gZ2V0T3JDcmVhdGVQ
cm9taXNlRGVmZXJyZWRGcm9tT2JqZWN0KGV4ZWMsIHRoaXMsIGdsb2JhbE9iamVjdCgpLCByZWFk
eVByb21pc2VTbG90TmFtZSgpKTsKICAgICBEZWZlcnJlZFdyYXBwZXIgd3JhcHBlcihleGVjLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFj
ayA9IFt3cmFwcGVyLCB0aGlzXSgpIG11dGFibGUgewotICAgICAgICB3cmFwcGVyLnJlc29sdmUo
JmltcGwoKSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxl
IHsKKyAgICAgICAgd3JhcHBlci5yZXNvbHZlKGpzVW5kZWZpbmVkKCkpOwogICAgIH07CiAgICAg
aW1wbCgpLnJlYWR5KFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spKTsKIApAQCAtODgsOCArODgs
OCBAQCBKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW06OmNsb3NlZChFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IGdldE9yQ3Jl
YXRlUHJvbWlzZURlZmVycmVkRnJvbU9iamVjdChleGVjLCB0aGlzLCBnbG9iYWxPYmplY3QoKSwg
Y2xvc2VkUHJvbWlzZVNsb3ROYW1lKCkpOwogICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwotICAgIGF1dG8gc3VjY2Vzc0Nh
bGxiYWNrID0gW3dyYXBwZXIsIHRoaXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgIHdyYXBwZXIucmVz
b2x2ZSgmaW1wbCgpKTsKKyAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11
dGFibGUgeworICAgICAgICB3cmFwcGVyLnJlc29sdmUoanNVbmRlZmluZWQoKSk7CiAgICAgfTsK
ICAgICBpbXBsKCkuY2xvc2VkKFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spKTsKIApAQCAtMTMw
LDggKzEzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNSZWFk
YWJsZVN0cmVhbShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKICAgICBKU1JlYWRhYmxlU3Ry
ZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0gSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlKEpTUmVhZGFi
bGVTdHJlYW06OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1JlYWRhYmxlU3Ry
ZWFtOjpjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpLCBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCByZWFkYWJsZVN0cmVhbS5yZWxlYXNlTm9uTnVsbCgp
KTsKIAotICAgIGlmICghc291cmNlLT5zdGFydCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIHNvdXJjZS0+ZXJyb3IoKSk7CisgICAgc291cmNlLT5zZXRTdHJlYW0oZXhlYywg
anNSZWFkYWJsZVN0cmVhbSk7CisgICAgc291cmNlLT5zdGFydChleGVjKTsKIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNSZWFkYWJsZVN0cmVhbSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwCmluZGV4IDNj
MzM2NTUxNTJkYmYyMjk1NGZhNDk3ZTQxODA4ZTNmZTNmZTM1MDAuLjdhY2M3MDQ3MDViYWJiNzVj
MjA1YmQ1ZWY2ZDYwNTBjMjAyZTMzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwCkBAIC0zNCwxMCArMzQsMTMgQEAK
IAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW0u
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTYxLDYgKzY0LDQzIEBAIEpTVmFsdWUg
Z2V0SW50ZXJuYWxTbG90RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0
VmFsdWUsIFByaXZhdGVOCiAgICAgcmV0dXJuIHByb3BlcnR5U2xvdC5nZXRWYWx1ZShleGVjLCBw
cm9wZXJ0eU5hbWUpOwogfQogCisvLyBUaGlzIHNsb3QgbmFtZSBpcyB1c2VkIHRvIHN0b3JlIHRo
ZSBKU1JlYWRhYmxlU3RyZWFtIGluIGNyZWF0ZWQgSlMgZnVuY3Rpb25zIChlbnF1ZXVlLCBjbG9z
ZS4uLikuCisvLyBUaGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBjb3JyZXNwb25kaW5nIEpTUmVh
ZGFibGVTdHJlYW0gd2hlbiBleGVjdXRpbmcgdGhlIEpTIGZ1bmN0aW9uLgorc3RhdGljIEpTQzo6
UHJpdmF0ZU5hbWUmIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxKU0M6OlByaXZhdGVOYW1lPiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCJyZWFk
YWJsZVN0cmVhbSIpOworICAgIHJldHVybiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lOworfQorCitz
dGF0aWMgSlNSZWFkYWJsZVN0cmVhbSogZ2V0SlNSZWFkYWJsZVN0cmVhbShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IGpzRHluYW1p
Y0Nhc3Q8SlNSZWFkYWJsZVN0cmVhbSo+KGdldEludGVybmFsU2xvdEZyb21PYmplY3QoZXhlYywg
ZXhlYy0+Y2FsbGVlKCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSkpOworICAgIEFTU0VSVChq
c1JlYWRhYmxlU3RyZWFtKTsKKyAgICByZXR1cm4ganNSZWFkYWJsZVN0cmVhbTsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJu
IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgaWRlbnRpZmllcikpOworfQorCitK
U1ZhbHVlIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUganNGdW5jdGlvbiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3VtZW50cykKK3sKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsKKworICAgIEpTVmFsdWUg
ZXhjZXB0aW9uOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgc2V0SW50ZXJuYWxFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkFicnVwdCBjYWxsLiIpKTsKKworICAgIGlmIChleGNlcHRp
b24pCisgICAgICAgIG1fZXJyb3Iuc2V0KGV4ZWMtPnZtKCksIGV4Y2VwdGlvbik7CisKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNlPiBSZWFkYWJsZVN0
cmVhbUpTU291cmNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmVhZGFibGVTdHJlYW1KU1NvdXJjZShleGVjKSk7CkBAIC03Niw4ICsx
MTYsNyBAQCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBwYXJhbWV0ZXJzIHN1cHBvcnQKLSAgICBzZXRJbnRlcm5hbEVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZG9lcyBub3Qgc3Vw
cG9ydCBwYXJhbWV0ZXIgeWV0LiIpKTsKKyAgICBtX3NvdXJjZS5zZXQoZXhlYy0+dm0oKSwgZXhl
Yy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCkpOwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtSlNT
b3VyY2U6OnNldEludGVybmFsRXJyb3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKQEAgLTg1LDYgKzEyNCw5NCBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U6OnNldEludGVybmFsRXJyb3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZwog
ICAgIG1fZXJyb3Iuc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdl
KSk7CiB9CiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXVldWVSZWFk
YWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVS
ZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVu
Y3Rpb24iKSwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0g
PSBnZXRKU1JlYWRhYmxlU3RyZWFtKGV4ZWMpOworICAgIGpzUmVhZGFibGVTdHJlYW0tPmltcGwo
KS5jaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFt
Q2xvc2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDAsIEFT
Q0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uIiksIGNsb3NlUmVh
ZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3RhdGUqKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNh
bGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwgQVNDSUlMaXRlcmFsKCJDcmVhdGVSZWFkYWJsZVN0
cmVhbUVycm9yRnVuY3Rpb24iKSwgZXJyb3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKwor
dm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRTdHJlYW0oRXhlY1N0YXRlKiBleGVjLCBK
U1JlYWRhYmxlU3RyZWFtKiByZWFkYWJsZVN0cmVhbSkKK3sKKyAgICBtX3JlYWRhYmxlU3RyZWFt
ID0gcmVhZGFibGVTdHJlYW07CisKKyAgICBtX2VucXVldWVGdW5jdGlvbi5zZXQoZXhlYy0+dm0o
KSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24oZXhlYykpOworICAgIG1fY2xv
c2VGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0
aW9uKGV4ZWMpKTsKKyAgICBtX2Vycm9yRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJl
YWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihleGVjKSk7CisKKyAgICBzZXRJbnRlcm5hbFNsb3RU
b09iamVjdChleGVjLCBtX2VucXVldWVGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVTdHJlYW1TbG90
TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFtKTsKKyAgICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChl
eGVjLCBtX2Nsb3NlRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgbV9y
ZWFkYWJsZVN0cmVhbSk7CisgICAgc2V0SW50ZXJuYWxTbG90VG9PYmplY3QoZXhlYywgbV9lcnJv
ckZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIG1fcmVhZGFibGVTdHJl
YW0pOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0UmVhZGFibGVTdHJl
YW1Bc3luYygpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBtX3Jl
YWRhYmxlU3RyZWFtLT5pbXBsKCkuc3RhcnQoKTsKKyAgICB9KTsgCit9CisKK3ZvaWQgUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYg
KCFtX3NvdXJjZSkgeworICAgICAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU1Zh
bHVlIHN0YXJ0RnVuY3Rpb24gPSBnZXRQcm9wZXJ0eUZyb21PYmplY3QoZXhlYywgbV9zb3VyY2Uu
Z2V0KCksICJzdGFydCIpOworICAgIGlmICghc3RhcnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsK
KyAgICAgICAgaWYgKCFzdGFydEZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVh
ZGFibGVTdHJlYW0gY29uc3RydWN0b3Igb2JqZWN0IHN0YXJ0IHByb3BlcnR5IHNob3VsZCBiZSBh
IGZ1bmN0aW9uLiIpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UmVhZGFibGVT
dHJlYW1Bc3luYygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lbnF1ZXVlRnVuY3Rp
b24uZ2V0KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jbG9zZUZ1bmN0aW9uLmdldCgpKTsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKG1fZXJyb3JGdW5jdGlvbi5nZXQoKSk7CisKKyAgICBjYWxs
RnVuY3Rpb24oZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9yZWFkYWJsZVN0cmVhbSwgYXJndW1lbnRz
KTsKKworICAgIGlmIChtX2Vycm9yKSB7CisgICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBtX2Vy
cm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgaGFuZGxpbmcgcHJvbWlzZSBhcyByZXN1bHQgb2YgY2FsbGluZyBzdGFydCBmdW5jdGlv
bi4KKyAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuaAppbmRleCA3Mzc5MzBmMTFjNWY0ZDdlNjQ4YTQ4ODc0M2Jm
YzM5NjlmNGZlYWE5Li5mYmI0MmU3MzIwNmM5MzFhZjgxMjBiMDdjOTI0MmJiNjFjOGNlZTRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNs
dWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL1By
aXZhdGVOYW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCkBAIC00OCw4ICs0OSwxMCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNlPiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUqKTsKICAgICB+UmVhZGFibGVTdHJlYW1KU1NvdXJjZSgpIHsgfQogCisgICAg
dm9pZCBzZXRTdHJlYW0oSlNDOjpFeGVjU3RhdGUqLCBKU1JlYWRhYmxlU3RyZWFtKik7CisKICAg
ICBKU0M6OkpTVmFsdWUgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9Ci0gICAgYm9v
bCBzdGFydCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHN0YXJ0KEpTQzo6RXhlY1N0YXRl
Kik7CiAKICAgICAvLyBSZWFkYWJsZVN0cmVhbVNvdXJjZSBBUEkuCiAgICAgdmlydHVhbCBib29s
IGlzRXJyb3JlZCgpIHsgcmV0dXJuIG1fZXJyb3I7IH0KQEAgLTU4LDggKzYxLDIwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7CiAKICAgICBSZWFkYWJsZVN0cmVhbUpTU291cmNlKEpTQzo6RXhlY1N0YXRlKik7Cisg
ICAgSlNDOjpKU1ZhbHVlIGNhbGxGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSAvKiBqc0Z1bmN0aW9uICovLCBKU0M6OkpTVmFsdWUgLyogdGhpc1ZhbHVlICovLCBjb25zdCBK
U0M6OkFyZ0xpc3QmKTsKKyAgICB2b2lkIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworCiAg
ICAgLy8gbV9lcnJvciBtYXkgYmUgYW4gZXJyb3IgZ2VuZXJhdGVkIGZyb20gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZSBvciBmcm9tIEpTIGNhbGxiYWNrcy4KICAgICBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+IG1fZXJyb3I7CisgICAgSlNSZWFkYWJsZVN0cmVhbSogbV9yZWFkYWJsZVN0cmVhbSB7
IG51bGxwdHIgfTsKKworICAgIC8vIE9iamVjdCBwYXNzZWQgdG8gY29uc3RydWN0b3IuCisgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9zb3VyY2U7CisKKyAgICAvLyBGdW5jdGlvbnMg
cGFzc2VkIGFzIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgcGFzc2VkIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTRnVuY3Rpb24+IG1fZW5x
dWV1ZUZ1bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9jbG9zZUZ1
bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lcnJvckZ1bmN0aW9u
OwogfTsKIAogdm9pZCBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQcml2YXRlTmFtZSYsIEpTQzo6SlNWYWx1ZSk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODdk
M2Q0ZDEwZTQ2NWY4MzFlNzk1NzUzNWRhNDYxNjFjZjVjYmMzZC4uNzcwYTQzYjRiN2U0OWQ1OWQw
ZTI0NGNkNGYwOGUxYjdiZDdjZWE2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAzLTA2
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVT
dHJlYW0gY29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBjaGVjayB0aGF0IFJlYWRhYmxlU3RyZWFtIGNvbnN0
cnVjdG9yIGFjY2VwdHMgYW4gZW1wdHkgb2JqZWN0IGFzIHBhcmFtZXRlci4KKyAgICAgICAgQWRk
ZWQgdGVzdHMgdG8gY2hlY2sgdGhhdCBzdGFydCBKUyBmdW5jdGlvbiBpcyBjYWxsZWQsIGNhbiBj
bG9zZSBhIHN0cmVhbSBhbmQgY2FuIHRocm93IGVycm9ycy4KKworICAgICAgICAqIHN0cmVhbXMv
cmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0cmVh
bXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sOiBBZGRlZC4KKwogMjAxNS0wMy0wMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGVzdCBsZWdhY3kgZXZlbnQgaGFu
ZGxlciBhdHRyaWJ1dGVzIChvbmVzIHdpdGggbmFtZXMgbGlrZSAib25jbGljayIpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CmluZGV4IDY1M2JiZTRhOTU1ZTZjOGRhNjc0NTBmOWRhNWE5MTg3ODdiYjdm
M2MuLjI3OThjYzE1OGEzYjY4YTQyY2Q1MjNkMTFhN2NkODA2OGM5MWQ0MTYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CkBAIC0yLDYgKzIsNyBAQAogUEFTUyBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1
Y3RvciBzaG91bGQgZ2V0IGFuIG9iamVjdCBhcyBhcmd1bWVudCAKIFBBU1MgUmVhZGFibGVTdHJl
YW0gaW5zdGFuY2VzIHNob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGxpc3Qgb2YgcHJvcGVydGllcyAK
IFBBU1MgUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRz
IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBv
YmplY3QgYXMgYXJndW1lbnQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBoYXZlIHRo
ZSBjb3JyZWN0IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIHJl
YWR5IGFuZCBjbG9zZWQgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcHJvbWlzZSBvYmpl
Y3QgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29u
c3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3Ry
dWN0b3IuaHRtbAppbmRleCBkMzkzZTEyZmQzOGU1NWIxMGI2M2I2NDFkMTkxYzIyYmVhZjYwZDQ3
Li5kZmFhMjEwM2I3NTNiZjQyYjUzN2FlZmYxOGJlMzljYTA4YmM3MmIwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCkBAIC00
Niw2ICs0NiwxMCBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogfSwgJ1JlYWRhYmxlU3RyZWFtIGNhbiBi
ZSBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50cycpOwogCiB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7IH0pOworfSwgJ1JlYWRhYmxlU3RyZWFtIGNhbiBiZSBj
b25zdHJ1Y3RlZCB3aXRoIGFuIGVtcHR5IG9iamVjdCBhcyBhcmd1bWVudCcpOworCit0ZXN0KGZ1
bmN0aW9uKCkgewogICAgIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7CiAgICAgYXNzZXJ0X2Vx
dWFscyh0eXBlb2YgcnMucmVhZCwgJ2Z1bmN0aW9uJywgJ2hhcyBhIHJlYWQgbWV0aG9kJyk7CiAg
ICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgcnMuY2FuY2VsLCAnZnVuY3Rpb24nLCAnaGFzIGFuIGNh
bmNlbCBtZXRob2QnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVz
dHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0
cmVhbS1zdGFydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFmMGI4MzdkMTk4ZjQzYTVhODlm
YmE5OWFmZDYzYmRjYWRhYTFlZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorCitQ
QVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBjYWxsZWQgCitQQVNTIFJlYWRhYmxl
U3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHRocm93IAorUEFTUyBSZWFkYWJsZVN0cmVh
bSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQgCitQ
QVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIGNsb3NlIHRoZSBzdHJl
YW0gCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFuZCBj
bG9zZWQgcHJvbWlzZXMgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tc3RhcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0t
c3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBjYWQwMTUyOTU1MWNhNmJmODEzOTU1MzExZGU3MzQx
YTJlMjAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0
cmVhbS1zdGFydC5odG1sCkBAIC0wLDAgKzEsNzcgQEAKKzwhRE9DVFlQRSBodG1sPgorPHNjcmlw
dCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzJz48L3NjcmlwdD4KKzxzY3JpcHQ+
CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBpc1N0YXJ0Q2FsbGVkID0gZmFsc2U7Cisg
ICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKAorICAgIHsgc3RhcnQ6CisgICAgICAgIGZ1
bmN0aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyh0eXBlb2YgZW5xdWV1ZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBjbG9zZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHR5
cGVvZiBlcnJvciwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBpc1N0YXJ0Q2FsbGVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGFzc2VydF90cnVlKGlzU3RhcnRDYWxsZWQpOwor
fSwgJ1JlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBjYWxsZWQnKTsKKworCit0ZXN0KGZ1
bmN0aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAg
YXNzZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9
IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0
aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IG1hc2hl
ZEVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJs
ZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9
LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0
YXJ0IGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBj
bG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9KTsK
KyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7Cit9LCAnUmVhZGFibGVTdHJl
YW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScpOworCit0ZXN0MSA9
IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNsb3NlIHNob3VsZCBmdWxmaWxsIHJlYWR5IGFu
ZCBjbG9zZWQgcHJvbWlzZXMnKTsKK3Rlc3QxLnN0ZXAoZnVuY3Rpb24oKQoreworICAgIHZhciBy
cyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihl
bnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHZhciByZWFkeURvbmUgPSBmYWxzZTsKKyAgICBycy5yZWFkeS50aGVu
KHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbih2KSB7CisgICAgICAgIHJlYWR5RG9uZSA9IHRydWU7
CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHYsICd1bmRlZmluZWQnKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyhycy5zdGF0ZSwgJ2Nsb3NlZCcpOworICAgIH0pKTsKKworICAgIHJzLmNs
b3NlZC50aGVuKHRlc3QxLnN0ZXBfZnVuYyhmdW5jdGlvbih2KSB7CisgICAgICAgIGFzc2VydF9l
cXVhbHMocmVhZHlEb25lLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2Ygdiwg
J3VuZGVmaW5lZCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7
CisgICAgICAgIHRlc3QxLmRvbmUoKTsKKyAgICB9KSk7Cit9KTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248148</attachid>
            <date>2015-03-07 01:13:38 -0800</date>
            <delta_ts>2015-03-09 10:28:40 -0700</delta_ts>
            <desc>Removing promise resolution</desc>
            <filename>bug-141160-20150307101315.patch</filename>
            <type>text/plain</type>
            <size>17977</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ3ODNiMTFmM2Y2OTQ1
OTIxNTYxMTkyMjkyZGQzNWM5ZWMyMjVmYS4uMzMyNjBjNzFjZjkzNzU1ZmQ0NThlZTA3NzBhNGQ3
NzBjYWE5ZWM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE1LTAzLTA3ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHN0b3JhZ2Ugb2YgdGhlIEpTIHNvdXJjZSBvYmplY3QgaW4gUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjYWxsIHRoZSBKUyBzdGFydCBm
dW5jdGlvbi4KKyAgICAgICAgQWRkZWQgYWJpbGl0eSB0byBjbG9zZSBhIHN0cmVhbSB3aXRoaW4g
dGhlIHN0YXJ0IGZ1bmN0aW9uLgorCisgICAgICAgIFRlc3Q6IHN0cmVhbXMvcmVhZGFibGVzdHJl
YW0tc3RhcnQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpzdGF0ZSk6IEltcHJvdmVk
IHN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9D
bG9zZWQpOiBDbG9zaW5nIHRoZSBzdHJlYW0uCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0
cmVhbTo6c3RhcnQpOiBTdGFydGluZyB0aGUgc3RyZWFtLCBjYWxsZWQgYnkgdGhlIHN0cmVhbSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaDog
QWRkaW5nIHN0YXJ0IGFuZCBjaGFuZ2VTdGF0ZVRvQ2xvc2VkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Ry
dWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkYWJsZVN0cmVhbVNsb3ROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTUmVhZGFibGVTdHJlYW0pOiBVc2VkIHdpdGhpbiBK
UyBjYWxsYmFja3MgdG8gZ2V0IHRoZSByZWFkYWJsZSBzdHJlYW0KKyAgICAgICAgKFdlYkNvcmU6
OmdldFByb3BlcnR5RnJvbU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVh
bUpTU291cmNlOjpjYWxsRnVuY3Rpb24pOiBXcmFwcGVyIGZ1bmN0aW9uIHRvIGNhbGwgYSBqcyBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRh
YmxlU3RyZWFtSlNTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3Ry
ZWFtRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1
ZXVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjplcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnNldFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5
bmMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaDoKKwogMjAxNS0w
My0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFRy
eSB0byBmaXggdGhlIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggZjc2Mjc1YTM3MDkxMDdlMDdlMjYzMmI2MDA0MmE4
ZDQ4YTFiZjcxOS4uZmNhNmRmZjQ2ZTYxZTNkZDE5OWUzYmViN2RjYmEyY2RiNTkxNWNhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3Bw
CkBAIC03NywxMiArNzcsMjEgQEAgU3RyaW5nIFJlYWRhYmxlU3RyZWFtOjpzdGF0ZSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImVycm9yZWQiKTsKICAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiIik7CisgICAgcmV0
dXJuIFN0cmluZygpOwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0Nh
bGxiYWNrKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsg
ICAgCit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQorewor
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBT
dGF0ZTo6Q2xvc2VkOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJlYWR5IGFuZCBjbG9z
ZWQgcHJvbWlzZSByZXNvbHV0aW9uLgorICAgIH0KKyAgICAvLyBGSVhNRTogSGFuZGxlIFN0YXRl
OjpSZWFkYWJsZSB3aGVuIGVucXVldWUgaXMgc3VwcG9ydGVkLgogfQogCiB2b2lkIFJlYWRhYmxl
U3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCkBAIC05MCw2ICs5OSwxMSBAQCB2b2lkIFJl
YWRhYmxlU3RyZWFtOjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAordm9pZCBSZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgcHVsbGluZyBkYXRhCit9CisKIGNvbnN0IGNoYXIqIFJlYWRhYmxlU3RyZWFtOjph
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gIlJlYWRhYmxlU3RyZWFt
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgK
aW5kZXggNzY0NzNlMTU4NzI0OTdmMzY3OGVhZDY1NDBkOTJmNDA4OGUwNjIwYS4uZDdjYTVmMWU5
ZjA0ZDFkZTgyNmMwMmQ5ZTE0OTc0NWZlNGQ4ZTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTY1LDYgKzY1LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsb3NlZChTdWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgcmVhZHkoU3Vj
Y2Vzc0NhbGxiYWNrKTsKIAorICAgIC8vIEFQSSB1c2VkIGZyb20gdGhlIEpTIGJpbmRpbmcuCisg
ICAgdm9pZCBzdGFydCgpOworCisgICAgdm9pZCBjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CisKIHBy
aXZhdGU6CiAgICAgUmVhZGFibGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxS
ZWFkYWJsZVN0cmVhbVNvdXJjZT4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggNWI2ZDFkNWY2YTI0Yzdh
M2Q1ZjM0NzdlMDFhNTYwYzJjNzI3MmNjNi4uMjk5ZTM4ZTg0NjIxMDQxY2UxYjgwN2FhZWMxN2Y3
OGYxZWEwNDMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFk
YWJsZVN0cmVhbUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKQEAgLTEzMCw4ICsxMzAsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVj
KQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IEpT
UmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwg
cmVhZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKLSAgICBpZiAoIXNvdXJjZS0+c3Rh
cnQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzb3VyY2UtPmVycm9yKCkp
OworICAgIHNvdXJjZS0+c2V0U3RyZWFtKGV4ZWMsIGpzUmVhZGFibGVTdHJlYW0pOworICAgIHNv
dXJjZS0+c3RhcnQoZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVhZGFi
bGVTdHJlYW0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFk
YWJsZVN0cmVhbUpTU291cmNlLmNwcAppbmRleCAzYzMzNjU1MTUyZGJmMjI5NTRmYTQ5N2U0MTgw
OGUzZmUzZmUzNTAwLi43YWNjNzA0NzA1YmFiYjc1YzIwNWJkNWVmNmQ2MDUwYzIwMmUzMzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpT
U291cmNlLmNwcApAQCAtMzQsMTAgKzM0LDEzIEBACiAKICNpbmNsdWRlICJKU0RPTVByb21pc2Uu
aCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRl
IDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCkBAIC02MSw2ICs2NCw0MyBAQCBKU1ZhbHVlIGdldEludGVybmFsU2xvdEZyb21PYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9iamVjdFZhbHVlLCBQcml2YXRlTgogICAgIHJldHVy
biBwcm9wZXJ0eVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorLy8gVGhp
cyBzbG90IG5hbWUgaXMgdXNlZCB0byBzdG9yZSB0aGUgSlNSZWFkYWJsZVN0cmVhbSBpbiBjcmVh
dGVkIEpTIGZ1bmN0aW9ucyAoZW5xdWV1ZSwgY2xvc2UuLi4pLgorLy8gVGhpcyBhbGxvd3MgcmV0
cmlldmluZyB0aGUgY29ycmVzcG9uZGluZyBKU1JlYWRhYmxlU3RyZWFtIHdoZW4gZXhlY3V0aW5n
IHRoZSBKUyBmdW5jdGlvbi4KK3N0YXRpYyBKU0M6OlByaXZhdGVOYW1lJiByZWFkYWJsZVN0cmVh
bVNsb3ROYW1lKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpQcml2YXRlTmFt
ZT4gcmVhZGFibGVTdHJlYW1TbG90TmFtZSgicmVhZGFibGVTdHJlYW0iKTsKKyAgICByZXR1cm4g
cmVhZGFibGVTdHJlYW1TbG90TmFtZTsKK30KKworc3RhdGljIEpTUmVhZGFibGVTdHJlYW0qIGdl
dEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTUmVhZGFibGVTdHJl
YW0qIGpzUmVhZGFibGVTdHJlYW0gPSBqc0R5bmFtaWNDYXN0PEpTUmVhZGFibGVTdHJlYW0qPihn
ZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLCByZWFkYWJsZVN0
cmVhbVNsb3ROYW1lKCkpKTsKKyAgICBBU1NFUlQoanNSZWFkYWJsZVN0cmVhbSk7CisgICAgcmV0
dXJuIGpzUmVhZGFibGVTdHJlYW07Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBnZXRQcm9w
ZXJ0eUZyb21PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBj
aGFyKiBpZGVudGlmaWVyKQoreworICAgIHJldHVybiBvYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsIGlkZW50aWZpZXIpKTsKK30KKworSlNWYWx1ZSBSZWFkYWJsZVN0cmVhbUpTU291
cmNlOjpjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCit7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0
aW9uLCBjYWxsRGF0YSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gY2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1
ZSwgYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCisgICAgICAgIHNldEludGVybmFsRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBYnJ1
cHQgY2FsbC4iKSk7CisKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBtX2Vycm9yLnNldChl
eGVjLT52bSgpLCBleGNlcHRpb24pOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCiBSZWY8UmVh
ZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRhYmxlU3Ry
ZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAtNzYsOCArMTE2LDcgQEAgUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFyYW1ldGVycyBz
dXBwb3J0Ci0gICAgc2V0SW50ZXJuYWxFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlYWRhYmxl
U3RyZWFtIGNvbnN0cnVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcGFyYW1ldGVyIHlldC4iKSk7Cisg
ICAgbV9zb3VyY2Uuc2V0KGV4ZWMtPnZtKCksIGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgp
KTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC04NSw2ICsxMjQs
OTQgQEAgdm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcKICAgICBtX2Vycm9yLnNldChleGVjLT52bSgp
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwogfQogCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3Rh
dGUqKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCitzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLCAxLCBBU0NJSUxpdGVyYWwo
IkNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uIiksIGVucXVldWVSZWFkYWJsZVN0
cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Jl
YWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0gZ2V0SlNSZWFkYWJsZVN0cmVhbShleGVj
KTsKKyAgICBqc1JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBK
U0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLCAwLCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxl
U3RyZWFtQ2xvc2VGdW5jdGlvbiIpLCBjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclJlYWRhYmxlU3RyZWFt
RnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3Ry
ZWFtRXJyb3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEs
IEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uIiksIGVycm9y
UmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZTo6c2V0U3RyZWFtKEV4ZWNTdGF0ZSogZXhlYywgSlNSZWFkYWJsZVN0cmVhbSogcmVhZGFibGVT
dHJlYW0pCit7CisgICAgbV9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOworCisgICAg
bV9lbnF1ZXVlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5x
dWV1ZUZ1bmN0aW9uKGV4ZWMpKTsKKyAgICBtX2Nsb3NlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCks
IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbihleGVjKSk7CisgICAgbV9lcnJvckZ1
bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24o
ZXhlYykpOworCisgICAgc2V0SW50ZXJuYWxTbG90VG9PYmplY3QoZXhlYywgbV9lbnF1ZXVlRnVu
Y3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7
CisgICAgc2V0SW50ZXJuYWxTbG90VG9PYmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgp
LCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIG1fcmVhZGFibGVTdHJlYW0pOworICAgIHNldElu
dGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fZXJyb3JGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVT
dHJlYW1TbG90TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFtKTsKK30KKwordm9pZCBSZWFkYWJsZVN0
cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKQoreworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgbV9yZWFkYWJsZVN0cmVhbS0+aW1wbCgpLnN0YXJ0
KCk7CisgICAgfSk7IAorfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICAgICAgc3Rh
cnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNWYWx1ZSBzdGFydEZ1bmN0aW9uID0gZ2V0UHJv
cGVydHlGcm9tT2JqZWN0KGV4ZWMsIG1fc291cmNlLmdldCgpLCAic3RhcnQiKTsKKyAgICBpZiAo
IXN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKSB7CisgICAgICAgIGlmICghc3RhcnRGdW5jdGlv
bi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9i
amVjdCBzdGFydCBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbi4iKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKG1fZW5xdWV1ZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMu
YXBwZW5kKG1fY2xvc2VGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Vy
cm9yRnVuY3Rpb24uZ2V0KCkpOworCisgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIHN0YXJ0RnVuY3Rp
b24sIG1fcmVhZGFibGVTdHJlYW0sIGFyZ3VtZW50cyk7CisKKyAgICBpZiAobV9lcnJvcikgewor
ICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgbV9lcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGhhbmRsaW5nIHByb21pc2UgYXMg
cmVzdWx0IG9mIGNhbGxpbmcgc3RhcnQgZnVuY3Rpb24uCisgICAgc3RhcnRSZWFkYWJsZVN0cmVh
bUFzeW5jKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKaW5k
ZXggNzM3OTMwZjExYzVmNGQ3ZTY0OGE0ODg3NDNiZmMzOTY5ZjRmZWFhOS4uZmJiNDJlNzMyMDZj
OTMxYWY4MTIwYjA3YzkyNDJiYjYxYzhjZWU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaApAQCAtMzYsNiArMzYsNyBAQAog
I2luY2x1ZGUgPGhlYXAvU3Ryb25nLmg+CiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcml2YXRlTmFtZS5oPgogI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KIApAQCAtNDgsOCArNDksMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8UmVh
ZGFibGVTdHJlYW1KU1NvdXJjZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgflJlYWRh
YmxlU3RyZWFtSlNTb3VyY2UoKSB7IH0KIAorICAgIHZvaWQgc2V0U3RyZWFtKEpTQzo6RXhlY1N0
YXRlKiwgSlNSZWFkYWJsZVN0cmVhbSopOworCiAgICAgSlNDOjpKU1ZhbHVlIGVycm9yKCkgeyBy
ZXR1cm4gbV9lcnJvci5nZXQoKTsgfQotICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdm9pZCBzdGFydChKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgLy8gUmVhZGFibGVTdHJl
YW1Tb3VyY2UgQVBJLgogICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yZWQoKSB7IHJldHVybiBtX2Vy
cm9yOyB9CkBAIC01OCw4ICs2MSwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW50ZXJuYWxF
cnJvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAgICAgUmVhZGFibGVTdHJl
YW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBjYWxsRnVuY3Rp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgLyoganNGdW5jdGlvbiAqLywgSlNDOjpK
U1ZhbHVlIC8qIHRoaXNWYWx1ZSAqLywgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgdm9pZCBz
dGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKwogICAgIC8vIG1fZXJyb3IgbWF5IGJlIGFuIGVy
cm9yIGdlbmVyYXRlZCBmcm9tIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Ugb3IgZnJvbSBKUyBjYWxs
YmFja3MuCiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Vycm9yOworICAgIEpTUmVh
ZGFibGVTdHJlYW0qIG1fcmVhZGFibGVTdHJlYW0geyBudWxscHRyIH07CisKKyAgICAvLyBPYmpl
Y3QgcGFzc2VkIHRvIGNvbnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+
IG1fc291cmNlOworCisgICAgLy8gRnVuY3Rpb25zIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIHdoZW4g
Y2FsbGluZyB0aGUgZnVuY3Rpb25zIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgSlND
OjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2VucXVldWVGdW5jdGlvbjsKKyAgICBKU0M6OlN0
cm9uZzxKU0M6OkpTRnVuY3Rpb24+IG1fY2xvc2VGdW5jdGlvbjsKKyAgICBKU0M6OlN0cm9uZzxK
U0M6OkpTRnVuY3Rpb24+IG1fZXJyb3JGdW5jdGlvbjsKIH07CiAKIHZvaWQgc2V0SW50ZXJuYWxT
bG90VG9PYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJpdmF0ZU5h
bWUmLCBKU0M6OkpTVmFsdWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg3ZDNkNGQxMGU0NjVmODMxZTc5NTc1MzVkYTQ2
MTYxY2Y1Y2JjM2QuLjM4YmNmOGVhODcyNmQ1ODQ0NTMwODdlZTAxOTEyOGEzZTk1NTY1NjMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wMy0wNyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRA
Y3JmLmNhbm9uLmZyPgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gU3VwcG9ydCB0aGUgc3RhcnQg
ZnVuY3Rpb24gcGFyYW1ldGVyIGluIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExNjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8g
Y2hlY2sgdGhhdCBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGVtcHR5IG9i
amVjdCBhcyBwYXJhbWV0ZXIuCisgICAgICAgIEFkZGVkIHRlc3RzIHRvIGNoZWNrIHRoYXQgc3Rh
cnQgSlMgZnVuY3Rpb24gaXMgY2FsbGVkLCBjYW4gY2xvc2UgYSBzdHJlYW0gYW5kIGNhbiB0aHJv
dyBlcnJvcnMuCisKKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9y
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVj
dG9yLmh0bWw6CisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRt
bDogQWRkZWQuCisKIDIwMTUtMDMtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFRlc3QgbGVnYWN5IGV2ZW50IGhhbmRsZXIgYXR0cmlidXRlcyAob25lcyB3aXRo
IG5hbWVzIGxpa2UgIm9uY2xpY2siKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCA2NTNiYmU0
YTk1NWU2YzhkYTY3NDUwZjlkYTVhOTE4Nzg3YmI3ZjNjLi4yNzk4Y2MxNThhM2I2OGE0MmNkNTIz
ZDExYTdjZDgwNjhjOTFkNDE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMiw2ICsyLDcg
QEAKIFBBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhbiBvYmplY3Qg
YXMgYXJndW1lbnQgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlcyBzaG91bGQgaGF2ZSB0
aGUgY29ycmVjdCBsaXN0IG9mIHByb3BlcnRpZXMgCiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBi
ZSBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50cyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY2Fu
IGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBS
ZWFkYWJsZVN0cmVhbSBpbnN0YW5jZXMgaGF2ZSB0aGUgY29ycmVjdCBtZXRob2RzIGFuZCBwcm9w
ZXJ0aWVzIAogUEFTUyBSZWFkYWJsZVN0cmVhbSByZWFkeSBhbmQgY2xvc2VkIHNob3VsZCBhbHdh
eXMgcmV0dXJuIHRoZSBzYW1lIHByb21pc2Ugb2JqZWN0IAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggZDM5M2UxMmZk
MzhlNTViMTBiNjNiNjQxZDE5MWMyMmJlYWY2MGQ0Ny4uZGZhYTIxMDNiNzUzYmY0MmI1MzdhZWZm
MThiZTM5Y2EwOGJjNzJiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFi
bGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbApAQCAtNDYsNiArNDYsMTAgQEAgdGVzdChmdW5jdGlv
bigpIHsKIH0sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1
bWVudHMnKTsKIAogdGVzdChmdW5jdGlvbigpIHsKKyAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyB9
KTsKK30sICdSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBlbXB0eSBv
YmplY3QgYXMgYXJndW1lbnQnKTsKKwordGVzdChmdW5jdGlvbigpIHsKICAgICBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSgpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJzLnJlYWQsICdmdW5j
dGlvbicsICdoYXMgYSByZWFkIG1ldGhvZCcpOwogICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHJz
LmNhbmNlbCwgJ2Z1bmN0aW9uJywgJ2hhcyBhbiBjYW5jZWwgbWV0aG9kJyk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZkMWFjYzNkZjhkOGM3MjhlNjE1OWRlZGY0ZmE1ZmI4MTQ1NWEyODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgY2FsbGVkIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJs
ZSB0byB0aHJvdyAKK1BBU1MgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBh
IGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byBjbG9zZSB0aGUgc3RyZWFtIAorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk3OWQyZTY1N2U0NWFh
MmNiYmU3MDBlMjgzM2EyMTRjZTRiNzhmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMnPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgaXNTdGFy
dENhbGxlZCA9IGZhbHNlOworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7
IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVucXVldWUsICdmdW5jdGlvbicpOworICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgY2xvc2UsICdmdW5jdGlvbicpOworICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZXJyb3IsICdmdW5jdGlvbicpOworICAgICAgICAgICAg
aXNTdGFydENhbGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnRfdHJ1
ZShpc1N0YXJ0Q2FsbGVkKTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgY2Fs
bGVkJyk7CisKKwordGVzdChmdW5jdGlvbigpCit7CisgICAgbWFzaGVkRXJyb3IgPSBuZXcgRXJy
b3IoJ3BvdGF0bycpOworICAgIGFzc2VydF90aHJvd3MobWFzaGVkRXJyb3IsIGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oCisgICAgICAgIHsgc3RhcnQ6
CisgICAgICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBtYXNoZWRFcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cn
KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBhc3NlcnRfdGhyb3dzKG5ldyBUeXBlRXJyb3Io
KSwgZnVuY3Rpb24oKSB7CisgICAgICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7IHN0YXJ0OiAncG90
YXRvJ30pOworICAgIH0pOworfSwgJ1JlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBn
ZXQgYSBmdW5jdGlvbiBhcyBzdGFydCBhcmd1bWVudCcpOworCit0ZXN0KGZ1bmN0aW9uKCkKK3sK
KyAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAg
ZnVuY3Rpb24oZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBjbG9zZSgpOwor
ICAgICAgICB9CisgICAgfSk7CisgICAgYXNzZXJ0X2VxdWFscyhycy5zdGF0ZSwgJ2Nsb3NlZCcp
OworfSwgJ1JlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIGNsb3NlIHRoZSBz
dHJlYW0nKTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248253</attachid>
            <date>2015-03-09 10:28:48 -0700</date>
            <delta_ts>2015-03-10 18:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141160-20150309182824.patch</filename>
            <type>text/plain</type>
            <size>19206</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc1MzA0YTc3YTVhODA4
MTA2Yzg2ZmE5NDU1OGQ3YmFlNjQ5MDE0YS4uMzg0MTRjNWMwOGQyNTFhM2U1MTAzNzdmOGMyNTY1
OWM5NWMxOTY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE1LTAzLTA5ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxsIGl0ICJzdGFydCIgdmFsdWUgYXMgYSBKUyBmdW5jdGlvbi4KKyAgICAgICAgVGhp
cyBmdW5jdGlvbiB0YWtlcyB0aHJlZSBmdW5jdGlvbnMgKGNsb3NlICwgZW5xdWV1ZSBhbmQgZXJy
b3IpIGFzCisgICAgICAgIHBhcmFtZXRlcnMsIHRoaXMgcGF0Y2ggaW1wbGVtZW50aW5nIG9ubHkg
dGhlIGNsb3NlIGZ1bmN0aW9uLgorCisgICAgICAgIFRlc3Q6IHN0cmVhbXMvcmVhZGFibGVzdHJl
YW0tc3RhcnQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpzdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6Y2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvQ2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtOjpzdGFydCk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJlYWRhYmxlU3RyZWFtU2xvdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNS
ZWFkYWJsZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3Ry
ZWFtSlNTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjplcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnNldFN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaDoKKwogMjAxNS0wMy0wOSAg
WGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgUmVhZGFibGVT
dHJlYW1KU1NvdXJjZSBzaG91bGQgdXNlIEpTQzo6U3Ryb25nIFVuc3BlY2lmaWVkQm9vbFR5cGUg
b3BlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwCmluZGV4IGY3NjI3NWEzNzA5MTA3ZTA3ZTI2MzJiNjAwNDJhOGQ0OGExYmY3MTku
LmZjYTZkZmY0NmU2MWUzZGQxOTllM2JlYjdkY2JhMmNkYjU5MTVjYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcApAQCAtNzcsMTIg
Kzc3LDIxIEBAIFN0cmluZyBSZWFkYWJsZVN0cmVhbTo6c3RhdGUoKSBjb25zdAogICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJlcnJvcmVkIik7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIiIpOworICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2xvc2VkKFN1Y2Nlc3NDYWxsYmFjaykKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7ICAgIAorfQorCit2
b2lkIFJlYWRhYmxlU3RyZWFtOjpjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCkKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6V2FpdGluZykgeworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNsb3Nl
ZDsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZWFkeSBhbmQgY2xvc2VkIHByb21pc2Ug
cmVzb2x1dGlvbi4KKyAgICB9CisgICAgLy8gRklYTUU6IEhhbmRsZSBTdGF0ZTo6UmVhZGFibGUg
d2hlbiBlbnF1ZXVlIGlzIHN1cHBvcnRlZC4KIH0KIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6cmVh
ZHkoU3VjY2Vzc0NhbGxiYWNrKQpAQCAtOTAsNiArOTksMTEgQEAgdm9pZCBSZWFkYWJsZVN0cmVh
bTo6cmVhZHkoU3VjY2Vzc0NhbGxiYWNrKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3Zv
aWQgUmVhZGFibGVTdHJlYW06OnN0YXJ0KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHB1
bGxpbmcgZGF0YQorfQorCiBjb25zdCBjaGFyKiBSZWFkYWJsZVN0cmVhbTo6YWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJSZWFkYWJsZVN0cmVhbSI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IDc2NDcz
ZTE1ODcyNDk3ZjM2NzhlYWQ2NTQwZDkyZjQwODhlMDYyMGEuLmQ3Y2E1ZjFlOWYwNGQxZGU4MjZj
MDJkOWUxNDk3NDVmZTRkOGU5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC02NSw2ICs2NSwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHJlYWR5KFN1Y2Nlc3NDYWxsYmFj
ayk7CiAKKyAgICAvLyBBUEkgdXNlZCBmcm9tIHRoZSBKUyBiaW5kaW5nLgorICAgIHZvaWQgc3Rh
cnQoKTsKKworICAgIHZvaWQgY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworCiBwcml2YXRlOgogICAg
IFJlYWRhYmxlU3RyZWFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8UmVhZGFibGVTdHJl
YW1Tb3VyY2U+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVhZGFibGVTdHJlYW1DdXN0b20uY3BwCmluZGV4IDViNmQxZDVmNmEyNGM3YTNkNWYzNDc3ZTAx
YTU2MGMyYzcyNzJjYzYuLjI5OWUzOGU4NDYyMTA0MWNlMWI4MDdhYWVjMTdmNzhmMWVhMDQzMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1D
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJl
YW1DdXN0b20uY3BwCkBAIC0xMzAsOCArMTMwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OwogICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBKU1JlYWRhYmxlU3Ry
ZWFtOjpjcmVhdGUoSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZVByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIHJlYWRhYmxlU3Ry
ZWFtLnJlbGVhc2VOb25OdWxsKCkpOwogCi0gICAgaWYgKCFzb3VyY2UtPnN0YXJ0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc291cmNlLT5lcnJvcigpKTsKKyAgICBzb3Vy
Y2UtPnNldFN0cmVhbShleGVjLCBqc1JlYWRhYmxlU3RyZWFtKTsKKyAgICBzb3VyY2UtPnN0YXJ0
KGV4ZWMpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1JlYWRhYmxlU3RyZWFtKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFt
SlNTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1K
U1NvdXJjZS5jcHAKaW5kZXggM2MzMzY1NTE1MmRiZjIyOTU0ZmE0OTdlNDE4MDhlM2ZlM2ZlMzUw
MC4uMTFmZDJkZjU1MWM5ZGM5NDVlNWRhOWVjMTc0M2U0N2VjNmQxYTFiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAK
QEAgLTMxLDEzICszMSwxNyBAQAogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogI2luY2x1ZGUg
IlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU1JlYWRhYmxl
U3RyZWFtLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02MSw2ICs2NSw0MyBAQCBK
U1ZhbHVlIGdldEludGVybmFsU2xvdEZyb21PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IG9iamVjdFZhbHVlLCBQcml2YXRlTgogICAgIHJldHVybiBwcm9wZXJ0eVNsb3QuZ2V0VmFsdWUo
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorLy8gVGhpcyBzbG90IG5hbWUgaXMgdXNlZCB0byBz
dG9yZSB0aGUgSlNSZWFkYWJsZVN0cmVhbSBpbiBjcmVhdGVkIEpTIGZ1bmN0aW9ucyAoZW5xdWV1
ZSwgY2xvc2UuLi4pLgorLy8gVGhpcyBhbGxvd3MgcmV0cmlldmluZyB0aGUgY29ycmVzcG9uZGlu
ZyBKU1JlYWRhYmxlU3RyZWFtIHdoZW4gZXhlY3V0aW5nIHRoZSBKUyBmdW5jdGlvbi4KK3N0YXRp
YyBKU0M6OlByaXZhdGVOYW1lJiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpQcml2YXRlTmFtZT4gcmVhZGFibGVTdHJlYW1TbG90TmFt
ZSgicmVhZGFibGVTdHJlYW0iKTsKKyAgICByZXR1cm4gcmVhZGFibGVTdHJlYW1TbG90TmFtZTsK
K30KKworc3RhdGljIEpTUmVhZGFibGVTdHJlYW0qIGdldEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0gPSBq
c0R5bmFtaWNDYXN0PEpTUmVhZGFibGVTdHJlYW0qPihnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0
KGV4ZWMsIGV4ZWMtPmNhbGxlZSgpLCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCkpKTsKKyAgICBB
U1NFUlQoanNSZWFkYWJsZVN0cmVhbSk7CisgICAgcmV0dXJuIGpzUmVhZGFibGVTdHJlYW07Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBnZXRQcm9wZXJ0eUZyb21PYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBpZGVudGlmaWVyKQoreworICAg
IHJldHVybiBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIGlkZW50aWZpZXIpKTsK
K30KKworSlNWYWx1ZSBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjYWxsRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JiBhcmd1bWVudHMpCit7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CisKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBqc0Z1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzLCAmZXhjZXB0aW9u
KTsKKworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgIHNldEludGVy
bmFsRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBYnJ1cHQgY2FsbC4iKSk7CisKKyAgICBpZiAo
ZXhjZXB0aW9uKQorICAgICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBleGNlcHRpb24pOwor
CisgICAgcmV0dXJuIHZhbHVlOworfQorCiBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAt
NzYsOCArMTE3LDcgQEAgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6UmVhZGFibGVTdHJlYW1KU1Nv
dXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFyYW1ldGVycyBzdXBwb3J0Ci0gICAgc2V0SW50ZXJuYWxF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGRvZXMg
bm90IHN1cHBvcnQgcGFyYW1ldGVyIHlldC4iKSk7CisgICAgbV9zb3VyY2Uuc2V0KGV4ZWMtPnZt
KCksIGV4ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpKTsKIH0KIAogdm9pZCBSZWFkYWJsZVN0
cmVhbUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC04NSw2ICsxMjUsOTQgQEAgdm9pZCBSZWFkYWJsZVN0cmVh
bUpTU291cmNlOjpzZXRJbnRlcm5hbEVycm9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcKICAgICBtX2Vycm9yLnNldChleGVjLT52bSgpLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
bWVzc2FnZSkpOwogfQogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlbnF1
ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbihFeGVjU3RhdGUqKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgSlNGdW5jdGlvbiog
Y3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpLCAxLCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5x
dWV1ZUZ1bmN0aW9uIiksIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxl
U3RyZWFtID0gZ2V0SlNSZWFkYWJsZVN0cmVhbShleGVjKTsKKyAgICBqc1JlYWRhYmxlU3RyZWFt
LT5pbXBsKCkuY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJs
ZVN0cmVhbUNsb3NlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU0Z1
bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
LCAwLCBBU0NJSUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbiIpLCBj
bG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBlcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3Rh
dGljIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgiQ3JlYXRlUmVh
ZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uIiksIGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7
Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0U3RyZWFtKEV4ZWNTdGF0ZSog
ZXhlYywgSlNSZWFkYWJsZVN0cmVhbSogcmVhZGFibGVTdHJlYW0pCit7CisgICAgbV9yZWFkYWJs
ZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOworCisgICAgbV9lbnF1ZXVlRnVuY3Rpb24uc2V0KGV4
ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKGV4ZWMpKTsKKyAg
ICBtX2Nsb3NlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xv
c2VGdW5jdGlvbihleGVjKSk7CisgICAgbV9lcnJvckZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBj
cmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24oZXhlYykpOworCisgICAgc2V0SW50ZXJu
YWxTbG90VG9PYmplY3QoZXhlYywgbV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3Ry
ZWFtU2xvdE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7CisgICAgc2V0SW50ZXJuYWxTbG90VG9P
YmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNsb3ROYW1l
KCksIG1fcmVhZGFibGVTdHJlYW0pOworICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMs
IG1fZXJyb3JGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBtX3JlYWRh
YmxlU3RyZWFtKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRh
YmxlU3RyZWFtQXN5bmMoKQoreworICAgIG1fcmVhZGFibGVTdHJlYW0tPmltcGwoKS5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFt0aGlzXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeworICAgICAgICBtX3JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuc3RhcnQoKTsKKyAgICB9KTsK
K30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydChKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBpZiAoIW1fc291cmNlKSB7CisgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJl
YW1Bc3luYygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIEpTVmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5RnJvbU9iamVj
dChleGVjLCBtX3NvdXJjZS5nZXQoKSwgInN0YXJ0Iik7CisgICAgaWYgKCFzdGFydEZ1bmN0aW9u
LmlzRnVuY3Rpb24oKSkgeworICAgICAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBvYmplY3Qgc3RhcnQgcHJv
cGVydHkgc2hvdWxkIGJlIGEgZnVuY3Rpb24uIikpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVu
ZChtX2VucXVldWVGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Nsb3Nl
RnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lcnJvckZ1bmN0aW9uLmdl
dCgpKTsKKworICAgIGNhbGxGdW5jdGlvbihleGVjLCBzdGFydEZ1bmN0aW9uLCBtX3JlYWRhYmxl
U3RyZWFtLCBhcmd1bWVudHMpOworCisgICAgaWYgKG1fZXJyb3IpIHsKKyAgICAgICAgdGhyb3dW
TUVycm9yKGV4ZWMsIG1fZXJyb3IuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBwcm9taXNlIGFzIHJlc3VsdCBvZiBjYWxs
aW5nIHN0YXJ0IGZ1bmN0aW9uLgorICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCmluZGV4IDE3ZTU4NWQ2OTU2
N2E3YzcwMTk1MjZjOGFlNjQ1NjY2NGQ3MmRmOWIuLjJjNjM2ZDI3ZDhmMzM3MzU2ZDc1NzdiY2Vm
NGNiMDE4NzUyYjRlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxoZWFw
L1N0cm9uZy5oPgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvUHJpdmF0ZU5hbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKQEAg
LTQ4LDggKzQ5LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlYWRhYmxlU3RyZWFtSlNT
b3VyY2U+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogICAgIH5SZWFkYWJsZVN0cmVhbUpTU291
cmNlKCkgeyB9CiAKKyAgICB2b2lkIHNldFN0cmVhbShKU0M6OkV4ZWNTdGF0ZSosIEpTUmVhZGFi
bGVTdHJlYW0qKTsKKwogICAgIEpTQzo6SlNWYWx1ZSBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3Iu
Z2V0KCk7IH0KLSAgICBib29sIHN0YXJ0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc3Rh
cnQoSlNDOjpFeGVjU3RhdGUqKTsKIAogICAgIC8vIFJlYWRhYmxlU3RyZWFtU291cmNlIEFQSS4K
ICAgICB2aXJ0dWFsIGJvb2wgaXNFcnJvcmVkKCkgeyByZXR1cm4gISFtX2Vycm9yOyB9CkBAIC01
OCw4ICs2MSwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiAgICAgUmVhZGFibGVTdHJlYW1KU1NvdXJjZShK
U0M6OkV4ZWNTdGF0ZSopOworICAgIEpTQzo6SlNWYWx1ZSBjYWxsRnVuY3Rpb24oSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUgLyoganNGdW5jdGlvbiAqLywgSlNDOjpKU1ZhbHVlIC8qIHRo
aXNWYWx1ZSAqLywgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgdm9pZCBzdGFydFJlYWRhYmxl
U3RyZWFtQXN5bmMoKTsKKwogICAgIC8vIG1fZXJyb3IgbWF5IGJlIGFuIGVycm9yIGdlbmVyYXRl
ZCBmcm9tIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Ugb3IgZnJvbSBKUyBjYWxsYmFja3MuCiAgICAg
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2Vycm9yOworICAgIEpTUmVhZGFibGVTdHJlYW0q
IG1fcmVhZGFibGVTdHJlYW0geyBudWxscHRyIH07CisKKyAgICAvLyBPYmplY3QgcGFzc2VkIHRv
IGNvbnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IG1fc291cmNlOwor
CisgICAgLy8gRnVuY3Rpb25zIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIHdoZW4gY2FsbGluZyB0aGUg
ZnVuY3Rpb25zIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgSlNDOjpTdHJvbmc8SlND
OjpKU0Z1bmN0aW9uPiBtX2VucXVldWVGdW5jdGlvbjsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpT
RnVuY3Rpb24+IG1fY2xvc2VGdW5jdGlvbjsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTRnVuY3Rp
b24+IG1fZXJyb3JGdW5jdGlvbjsKIH07CiAKIHZvaWQgc2V0SW50ZXJuYWxTbG90VG9PYmplY3Qo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHJpdmF0ZU5hbWUmLCBKU0M6OkpT
VmFsdWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGQ2ODYyOTk4MjQxZDI3NzUzNjEzYjJmOThlYTFjZDkzNDFmOWYzMTIu
LjFkNGZmNGM1MDAzZDJmZDM2ZmM1M2NhNjVkMzkzN2JkMDk5MTI1YWMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAxNS0wMy0wOSAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0Bp
Z2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZy
PgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gU3VwcG9ydCB0aGUgc3RhcnQgZnVuY3Rpb24gcGFy
YW1ldGVyIGluIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExNjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY2hlY2sgdGhhdCBS
ZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGVtcHR5IG9iamVjdCBhcyBwYXJh
bWV0ZXIuCisgICAgICAgIEFkZGVkIHRlc3RzIHRvIGNoZWNrIHRoYXQgc3RhcnQgSlMgZnVuY3Rp
b24gaXMgY2FsbGVkLCBjYW4gY2xvc2UgYSBzdHJlYW0gYW5kIGNhbiB0aHJvdyBlcnJvcnMuCisK
KyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWw6Cisg
ICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbDogQWRkZWQuCisK
IDIwMTUtMDMtMDkgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIEVGTCBnYXJkZW5pbmcgb24gOXRoIE1hci4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKaW5kZXggNjUzYmJlNGE5NTVlNmM4ZGE2NzQ1MGY5ZGE1YTkxODc4N2JiN2YzYy4u
Mjc5OGNjMTU4YTNiNjhhNDJjZDUyM2QxMWE3Y2Q4MDY4YzkxZDQxNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQKQEAgLTIsNiArMiw3IEBACiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9y
IHNob3VsZCBnZXQgYW4gb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBSZWFkYWJsZVN0cmVhbSBp
bnN0YW5jZXMgc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgbGlzdCBvZiBwcm9wZXJ0aWVzIAogUEFT
UyBSZWFkYWJsZVN0cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHMgCitQ
QVNTIFJlYWRhYmxlU3RyZWFtIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGVtcHR5IG9iamVj
dCBhcyBhcmd1bWVudCAKIFBBU1MgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2VzIGhhdmUgdGhlIGNv
cnJlY3QgbWV0aG9kcyBhbmQgcHJvcGVydGllcyAKIFBBU1MgUmVhZGFibGVTdHJlYW0gcmVhZHkg
YW5kIGNsb3NlZCBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBwcm9taXNlIG9iamVjdCAK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1
Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rv
ci5odG1sCmluZGV4IGQzOTNlMTJmZDM4ZTU1YjEwYjYzYjY0MWQxOTFjMjJiZWFmNjBkNDcuLmRm
YWEyMTAzYjc1M2JmNDJiNTM3YWVmZjE4YmUzOWNhMDhiYzcyYjAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTQ2LDYg
KzQ2LDEwIEBAIHRlc3QoZnVuY3Rpb24oKSB7CiB9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNv
bnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzJyk7CiAKIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
bmV3IFJlYWRhYmxlU3RyZWFtKHsgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0
cnVjdGVkIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CiAgICAgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBycy5yZWFkLCAnZnVuY3Rpb24nLCAnaGFzIGEgcmVhZCBtZXRob2QnKTsKICAgICBh
c3NlcnRfZXF1YWxzKHR5cGVvZiBycy5jYW5jZWwsICdmdW5jdGlvbicsICdoYXMgYW4gY2FuY2Vs
IG1ldGhvZCcpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1zdGFydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFt
LXN0YXJ0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzRkYmVhYjYwMTJiYTk2NTVmYzhlMjQ3
NDAxZjRmY2YyMWU5NGUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACisKK1BBU1Mg
UmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCAKK1BBU1MgUmVhZGFibGVTdHJl
YW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNv
bnN0cnVjdG9yIHNob3VsZCBnZXQgYSBmdW5jdGlvbiBhcyBzdGFydCBhcmd1bWVudCAKK1BBU1Mg
UmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbSAK
K1BBU1MgQ2FsbGluZyBSZWFkYWJsZVN0cmVhbSBjbG9zZSBmdW5jdGlvbiBzaG91bGQgdHJhbnNp
dGlvbiBzeW5jaHJvbm91c2x5IHRvIGNsb3NlZCBzdGF0ZSAKK1BBU1MgQ2FsbGluZyBSZWFkYWJs
ZVN0cmVhbSBjbG9zZSBmdW5jdGlvbiBzZXZlcmFsIHRpbWVzIHNob3VsZCBoYXZlIG5vIGVmZmVj
dCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFy
dC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ3NWM0M2EzZmEwNDc4M2E0MjA4ZmM0NjJmNGRlOGFiNDJkMjg1NzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0
bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0nLi4vcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPScuLi9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMnPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordGVzdChmdW5j
dGlvbigpCit7CisgICAgdmFyIGlzU3RhcnRDYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIgcnMgPSBu
ZXcgUmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rpb24oZW5xdWV1
ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBlbnF1
ZXVlLCAnZnVuY3Rpb24nKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGNsb3Nl
LCAnZnVuY3Rpb24nKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVycm9yLCAn
ZnVuY3Rpb24nKTsKKyAgICAgICAgICAgIGlzU3RhcnRDYWxsZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfSk7CisgICAgYXNzZXJ0X3RydWUoaXNTdGFydENhbGxlZCk7Cit9LCAnUmVhZGFibGVT
dHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCcpOworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAg
ICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAgYXNzZXJ0X3Rocm93cyht
YXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0
cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNs
b3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IG1hc2hlZEVycm9yOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBz
aG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2Vy
dF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRh
YmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAnUmVhZGFibGVTdHJl
YW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50Jyk7
CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgK
KyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsK
KyAgICAgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMoY2xvc2UpLCBbJ25hbWUnLCAnbGVuZ3RoJ10pOworICAgICAgICAgICAgY2xvc2UoKTsKKyAg
ICAgICAgfQorICAgIH0pOworICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdjbG9zZWQnKTsK
K30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byBjbG9zZSB0aGUgc3Ry
ZWFtJyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBjbG9zZUZ1bmN0aW9uOworICAg
IHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5j
dGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlRnVuY3Rpb24g
PSBjbG9zZTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUs
ICd3YWl0aW5nJyk7CisgICAgY2xvc2VGdW5jdGlvbigpOworICAgIGFzc2VydF9lcXVhbHMocnMu
c3RhdGUsICdjbG9zZWQnKTsKK30sICdDYWxsaW5nIFJlYWRhYmxlU3RyZWFtIGNsb3NlIGZ1bmN0
aW9uIHNob3VsZCB0cmFuc2l0aW9uIHN5bmNocm9ub3VzbHkgdG8gY2xvc2VkIHN0YXRlJyk7CisK
K3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBjbG9zZUZ1bmN0aW9uOworICAgIHZhciBycyA9
IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1
ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlRnVuY3Rpb24gPSBjbG9zZTsK
KyAgICAgICAgfQorICAgIH0pOworICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICd3YWl0aW5n
Jyk7CisgICAgY2xvc2VGdW5jdGlvbigpOworICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdj
bG9zZWQnKTsKKyAgICBjbG9zZUZ1bmN0aW9uKCk7CisgICAgYXNzZXJ0X2VxdWFscyhycy5zdGF0
ZSwgJ2Nsb3NlZCcpOworfSwgJ0NhbGxpbmcgUmVhZGFibGVTdHJlYW0gY2xvc2UgZnVuY3Rpb24g
c2V2ZXJhbCB0aW1lcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QnKTsKKworCis8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248381</attachid>
            <date>2015-03-10 18:20:29 -0700</date>
            <delta_ts>2015-03-27 08:02:45 -0700</delta_ts>
            <desc>Fix according review</desc>
            <filename>bug-141160-20150311022004.patch</filename>
            <type>text/plain</type>
            <size>19429</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc1MzA0YTc3YTVhODA4
MTA2Yzg2ZmE5NDU1OGQ3YmFlNjQ5MDE0YS4uM2Y3MGI5MGEyZDg1OGEzYjY0YzYwMGRmYTQ4NmM5
YmFiNjNlMTM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE1LTAzLTEwICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiB2YWx1ZSBhcyBhIEpTIGZ1bmN0aW9uLgorICAgICAgICBU
aGlzIGZ1bmN0aW9uIHRha2VzIHRocmVlIGZ1bmN0aW9ucyAoY2xvc2UsIGVucXVldWUgYW5kIGVy
cm9yKSBhcyBwYXJhbWV0ZXJzLgorICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgb25seSB0
aGUgY2xvc2UgZnVuY3Rpb24uCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1zdGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpjbG9zZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVhZGFibGVTdHJlYW1TbG90TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1Jl
YWRhYmxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3BlcnR5RnJvbU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjYWxsRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6UmVhZGFibGVTdHJl
YW1KU1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjplbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0U3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oOgorCiAyMDE1LTAzLTA5ICBY
YWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBSZWFkYWJsZVN0
cmVhbUpTU291cmNlIHNob3VsZCB1c2UgSlNDOjpTdHJvbmcgVW5zcGVjaWZpZWRCb29sVHlwZSBv
cGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbS5jcHAKaW5kZXggZjc2Mjc1YTM3MDkxMDdlMDdlMjYzMmI2MDA0MmE4ZDQ4YTFiZjcxOS4u
ZmNhNmRmZjQ2ZTYxZTNkZDE5OWUzYmViN2RjYmEyY2RiNTkxNWNhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCkBAIC03NywxMiAr
NzcsMjEgQEAgU3RyaW5nIFJlYWRhYmxlU3RyZWFtOjpzdGF0ZSgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoImVycm9yZWQiKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiIik7CisgICAgcmV0dXJuIFN0cmluZygp
OwogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpjbG9zZWQoU3VjY2Vzc0NhbGxiYWNrKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgICAgCit9CisKK3Zv
aWQgUmVhZGFibGVTdHJlYW06OmNoYW5nZVN0YXRlVG9DbG9zZWQoKQoreworICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpXYWl0aW5nKSB7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2xvc2Vk
OworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJlYWR5IGFuZCBjbG9zZWQgcHJvbWlzZSBy
ZXNvbHV0aW9uLgorICAgIH0KKyAgICAvLyBGSVhNRTogSGFuZGxlIFN0YXRlOjpSZWFkYWJsZSB3
aGVuIGVucXVldWUgaXMgc3VwcG9ydGVkLgogfQogCiB2b2lkIFJlYWRhYmxlU3RyZWFtOjpyZWFk
eShTdWNjZXNzQ2FsbGJhY2spCkBAIC05MCw2ICs5OSwxMSBAQCB2b2lkIFJlYWRhYmxlU3RyZWFt
OjpyZWFkeShTdWNjZXNzQ2FsbGJhY2spCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBSZWFkYWJsZVN0cmVhbTo6c3RhcnQoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcHVs
bGluZyBkYXRhCit9CisKIGNvbnN0IGNoYXIqIFJlYWRhYmxlU3RyZWFtOjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gIlJlYWRhYmxlU3RyZWFtIjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKaW5kZXggNzY0NzNl
MTU4NzI0OTdmMzY3OGVhZDY1NDBkOTJmNDA4OGUwNjIwYS4uZDdjYTVmMWU5ZjA0ZDFkZTgyNmMw
MmQ5ZTE0OTc0NWZlNGQ4ZTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtLmgKQEAgLTY1LDYgKzY1LDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsb3NlZChTdWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgcmVhZHkoU3VjY2Vzc0NhbGxiYWNr
KTsKIAorICAgIC8vIEFQSSB1c2VkIGZyb20gdGhlIEpTIGJpbmRpbmcuCisgICAgdm9pZCBzdGFy
dCgpOworCisgICAgdm9pZCBjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CisKIHByaXZhdGU6CiAgICAg
UmVhZGFibGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxSZWFkYWJsZVN0cmVh
bVNvdXJjZT4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVhZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggNWI2ZDFkNWY2YTI0YzdhM2Q1ZjM0NzdlMDFh
NTYwYzJjNzI3MmNjNi4uMjk5ZTM4ZTg0NjIxMDQxY2UxYjgwN2FhZWMxN2Y3OGYxZWEwNDMzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVh
bUN1c3RvbS5jcHAKQEAgLTEzMCw4ICsxMzAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJl
YW06OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qp
KSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJl
YW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKLSAgICBpZiAoIXNvdXJjZS0+c3RhcnQoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBzb3VyY2UtPmVycm9yKCkpOworICAgIHNvdXJj
ZS0+c2V0U3RyZWFtKGV4ZWMsIGpzUmVhZGFibGVTdHJlYW0pOworICAgIHNvdXJjZS0+c3RhcnQo
ZXhlYyk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVhZGFibGVTdHJlYW0pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1K
U1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpT
U291cmNlLmNwcAppbmRleCAzYzMzNjU1MTUyZGJmMjI5NTRmYTQ5N2U0MTgwOGUzZmUzZmUzNTAw
Li4xMWIxZGVlMTFiMjhmOWUxMGFlMDhjMGY3NDVkNDNmNzMzMjAyYmNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApA
QCAtMjgsMTYgKzI4LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNp
bmNsdWRlICJSZWFkYWJsZVN0cmVhbUpTU291cmNlLmgiCiAKICNpbmNsdWRlICJKU0RPTVByb21p
c2UuaCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNiArNjUs
NDMgQEAgSlNWYWx1ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBvYmplY3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4gcHJvcGVydHlTbG90Lmdl
dFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKKy8vIFRoaXMgc2xvdCBuYW1lIGlzIHVz
ZWQgdG8gc3RvcmUgdGhlIEpTUmVhZGFibGVTdHJlYW0gaW4gY3JlYXRlZCBKUyBmdW5jdGlvbnMg
KGVucXVldWUsIGNsb3NlLi4uKS4KKy8vIFRoaXMgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGNvcnJl
c3BvbmRpbmcgSlNSZWFkYWJsZVN0cmVhbSB3aGVuIGV4ZWN1dGluZyB0aGUgSlMgZnVuY3Rpb24u
CitzdGF0aWMgSlNDOjpQcml2YXRlTmFtZSYgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTQzo6UHJpdmF0ZU5hbWU+IHJlYWRhYmxlU3RyZWFt
U2xvdE5hbWUoInJlYWRhYmxlU3RyZWFtIik7CisgICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtU2xv
dE5hbWU7Cit9CisKK3N0YXRpYyBKU1JlYWRhYmxlU3RyZWFtKiBnZXRKU1JlYWRhYmxlU3RyZWFt
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3Ry
ZWFtID0ganNEeW5hbWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtKj4oZ2V0SW50ZXJuYWxTbG90RnJv
bU9iamVjdChleGVjLCBleGVjLT5jYWxsZWUoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpKSk7
CisgICAgQVNTRVJUKGpzUmVhZGFibGVTdHJlYW0pOworICAgIHJldHVybiBqc1JlYWRhYmxlU3Ry
ZWFtOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikK
K3sKKyAgICByZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBpZGVudGlm
aWVyKSk7Cit9CisKK0pTVmFsdWUgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y2FsbEZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQoreworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2FsbERhdGEpOwor
CisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGwoZXhlYywg
anNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cywgJmV4
Y2VwdGlvbik7CisKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICBz
ZXRJbnRlcm5hbEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQWJydXB0IGNhbGwuIikpOworCisg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgbV9lcnJvci5zZXQoZXhlYy0+dm0oKSwgZXhjZXB0
aW9uKTsKKworICAgIHJldHVybiB2YWx1ZTsKK30KKwogUmVmPFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U+IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkYWJsZVN0cmVhbUpTU291cmNlKGV4ZWMp
KTsKQEAgLTc2LDggKzExNyw3IEBAIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3Ry
ZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHBhcmFtZXRlcnMgc3VwcG9ydAotICAgIHNldElu
dGVybmFsRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3Rv
ciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtZXRlciB5ZXQuIikpOworICAgIG1fc291cmNlLnNldChl
eGVjLT52bSgpLCBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKSk7CiB9CiAKIHZvaWQgUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtODUsNiArMTI1LDkyIEBAIHZvaWQgUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZTo6c2V0SW50ZXJuYWxFcnJvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nCiAgICAgbV9lcnJvci5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1
ZXVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLCAxLCBBU0NJ
SUxpdGVyYWwoIkNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uIiksIGVucXVldWVS
ZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU1JlYWRhYmxlU3RyZWFtKiBqc1JlYWRhYmxlU3RyZWFtID0gZ2V0SlNSZWFkYWJsZVN0
cmVhbShleGVjKTsKKyAgICBqc1JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuY2hhbmdlU3RhdGVUb0Ns
b3NlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMCwgQVNDSUlMaXRlcmFs
KCJDcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24iKSwgY2xvc2VSZWFkYWJsZVN0cmVh
bUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJy
b3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitz
dGF0aWMgaW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIEFTQ0lJTGl0ZXJhbCgi
Q3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uIiksIGVycm9yUmVhZGFibGVTdHJlYW1G
dW5jdGlvbik7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c2V0U3RyZWFtKEV4
ZWNTdGF0ZSogZXhlYywgSlNSZWFkYWJsZVN0cmVhbSogcmVhZGFibGVTdHJlYW0pCit7CisgICAg
bV9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOworCisgICAgbV9lbnF1ZXVlRnVuY3Rp
b24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKGV4
ZWMpKTsKKyAgICBtX2Nsb3NlRnVuY3Rpb24uc2V0KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxl
U3RyZWFtQ2xvc2VGdW5jdGlvbihleGVjKSk7CisgICAgbV9lcnJvckZ1bmN0aW9uLnNldChleGVj
LT52bSgpLCBjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24oZXhlYykpOworCisgICAg
c2V0SW50ZXJuYWxTbG90VG9PYmplY3QoZXhlYywgbV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCksIHJl
YWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7CisgICAgc2V0SW50ZXJu
YWxTbG90VG9PYmplY3QoZXhlYywgbV9jbG9zZUZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVh
bVNsb3ROYW1lKCksIG1fcmVhZGFibGVTdHJlYW0pOworICAgIHNldEludGVybmFsU2xvdFRvT2Jq
ZWN0KGV4ZWMsIG1fZXJyb3JGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgp
LCBtX3JlYWRhYmxlU3RyZWFtKTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpz
dGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKQoreworICAgIG1fcmVhZGFibGVTdHJlYW0tPmltcGwo
KS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFt0aGlzXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JikgeworICAgICAgICBtX3JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuc3RhcnQoKTsK
KyAgICB9KTsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydChKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIW1fc291cmNlKSB7CisgICAgICAgIHN0YXJ0UmVh
ZGFibGVTdHJlYW1Bc3luYygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOworICAgIEpTVmFsdWUgc3RhcnRGdW5jdGlvbiA9IGdldFByb3BlcnR5
RnJvbU9iamVjdChleGVjLCBtX3NvdXJjZS5nZXQoKSwgInN0YXJ0Iik7CisgICAgaWYgKCFzdGFy
dEZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkgeworICAgICAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBvYmplY3Qg
c3RhcnQgcHJvcGVydHkgc2hvdWxkIGJlIGEgZnVuY3Rpb24uIikpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1l
bnRzLmFwcGVuZChtX2VucXVldWVGdW5jdGlvbi5nZXQoKSk7CisgICAgYXJndW1lbnRzLmFwcGVu
ZChtX2Nsb3NlRnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lcnJvckZ1
bmN0aW9uLmdldCgpKTsKKworICAgIGNhbGxGdW5jdGlvbihleGVjLCBzdGFydEZ1bmN0aW9uLCBt
X3NvdXJjZS5nZXQoKSwgYXJndW1lbnRzKTsKKworICAgIGlmIChtX2Vycm9yKSB7CisgICAgICAg
IHRocm93Vk1FcnJvcihleGVjLCBtX2Vycm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJvbWlzZSBhcyByZXN1bHQg
b2YgY2FsbGluZyBzdGFydCBmdW5jdGlvbi4KKyAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaAppbmRleCAxN2U1
ODVkNjk1NjdhN2M3MDE5NTI2YzhhZTY0NTY2NjRkNzJkZjliLi5kMmFhOTUwODRkNjk2MTU4NzIw
Y2VjNGEwZjhjZDk1YjFjODY3NjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24u
aD4KICNpbmNsdWRlIDxydW50aW1lL1ByaXZhdGVOYW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgogCkBAIC00OCw4ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxSZWFkYWJsZVN0
cmVhbUpTU291cmNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB+UmVhZGFibGVTdHJl
YW1KU1NvdXJjZSgpIHsgfQogCisgICAgdm9pZCBzZXRTdHJlYW0oSlNDOjpFeGVjU3RhdGUqLCBK
U1JlYWRhYmxlU3RyZWFtKik7CisKICAgICBKU0M6OkpTVmFsdWUgZXJyb3IoKSB7IHJldHVybiBt
X2Vycm9yLmdldCgpOyB9Ci0gICAgYm9vbCBzdGFydCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
b2lkIHN0YXJ0KEpTQzo6RXhlY1N0YXRlKik7CiAKICAgICAvLyBSZWFkYWJsZVN0cmVhbVNvdXJj
ZSBBUEkuCiAgICAgdmlydHVhbCBib29sIGlzRXJyb3JlZCgpIHsgcmV0dXJuICEhbV9lcnJvcjsg
fQpAQCAtNTgsOCArNjEsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEludGVybmFsRXJyb3Io
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIFJlYWRhYmxlU3RyZWFtSlNT
b3VyY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJn
TGlzdCYpOworICAgIHZvaWQgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCk7CisKICAgICAvLyBt
X2Vycm9yIG1heSBiZSBhbiBlcnJvciBnZW5lcmF0ZWQgZnJvbSBSZWFkYWJsZVN0cmVhbUpTU291
cmNlIG9yIGZyb20gSlMgY2FsbGJhY2tzLgogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4g
bV9lcnJvcjsKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBtX3JlYWRhYmxlU3RyZWFtIHsgbnVsbHB0
ciB9OworCisgICAgLy8gT2JqZWN0IHBhc3NlZCB0byBjb25zdHJ1Y3Rvci4KKyAgICBKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiBtX3NvdXJjZTsKKworICAgIC8vIEZ1bmN0aW9ucyBwYXNzZWQg
YXMgcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBwYXNzZWQgaW4gdGhlIGNv
bnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lbnF1ZXVlRnVu
Y3Rpb247CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2Nsb3NlRnVuY3Rpb247
CisgICAgLy8gRklYTUU6IERlY2lkZSB3aGV0aGVyIGNyZWF0aW5nIHRoZSBlcnJvciBmdW5jdGlv
biBvbiB0aGUgZmx5IHdoZW4gY2FsbGluZyB0aGUgc3RhcnQgc291cmNlIGZ1bmN0aW9uLgorICAg
IEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lcnJvckZ1bmN0aW9uOwogfTsKIAogdm9p
ZCBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQcml2YXRlTmFtZSYsIEpTQzo6SlNWYWx1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDY4NjI5OTgyNDFkMjc3
NTM2MTNiMmY5OGVhMWNkOTM0MWY5ZjMxMi4uMzYxY2IyMjJmNGJkNzQyYTIzMDc4OTA2YTY3MzMx
NDA5MjMxMDVkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAzLTEwICBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBTdXBw
b3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0gY29uc3Ry
dWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIGEgdGVzdCB0byBjaGVjayB0aGF0IFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGFjY2Vw
dHMgYW4gZW1wdHkgb2JqZWN0IGFzIHBhcmFtZXRlci4KKyAgICAgICAgQWRkZWQgdGVzdHMgdG8g
Y2hlY2sgdGhhdCBzdGFydCBKUyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgcGFy
YW1ldGVycywgY2FuIGNsb3NlIGEgc3RyZWFtIGFuZCBjYW4gdGhyb3cuCisKKyAgICAgICAgKiBz
dHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICogc3Ry
ZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbDogQWRkZWQuCisKIDIwMTUtMDMtMDkg
IEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIEVGTCBnYXJkZW5pbmcgb24gOXRoIE1hci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKaW5k
ZXggNjUzYmJlNGE5NTVlNmM4ZGE2NzQ1MGY5ZGE1YTkxODc4N2JiN2YzYy4uMjc5OGNjMTU4YTNi
NjhhNDJjZDUyM2QxMWE3Y2Q4MDY4YzkxZDQxNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3Ry
ZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKQEAg
LTIsNiArMiw3IEBACiBQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQg
YW4gb2JqZWN0IGFzIGFyZ3VtZW50IAogUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZXMgc2hv
dWxkIGhhdmUgdGhlIGNvcnJlY3QgbGlzdCBvZiBwcm9wZXJ0aWVzIAogUEFTUyBSZWFkYWJsZVN0
cmVhbSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHMgCitQQVNTIFJlYWRhYmxl
U3RyZWFtIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGVtcHR5IG9iamVjdCBhcyBhcmd1bWVu
dCAKIFBBU1MgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2VzIGhhdmUgdGhlIGNvcnJlY3QgbWV0aG9k
cyBhbmQgcHJvcGVydGllcyAKIFBBU1MgUmVhZGFibGVTdHJlYW0gcmVhZHkgYW5kIGNsb3NlZCBz
aG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBwcm9taXNlIG9iamVjdCAKIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sIGIv
TGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCmluZGV4
IGQzOTNlMTJmZDM4ZTU1YjEwYjYzYjY0MWQxOTFjMjJiZWFmNjBkNDcuLmRmYWEyMTAzYjc1M2Jm
NDJiNTM3YWVmZjE4YmUzOWNhMDhiYzcyYjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTQ2LDYgKzQ2LDEwIEBAIHRl
c3QoZnVuY3Rpb24oKSB7CiB9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0cnVjdGVkIHdp
dGggbm8gYXJndW1lbnRzJyk7CiAKIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgbmV3IFJlYWRhYmxl
U3RyZWFtKHsgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGgg
YW4gZW1wdHkgb2JqZWN0IGFzIGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CiAgICAg
cnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBycy5y
ZWFkLCAnZnVuY3Rpb24nLCAnaGFzIGEgcmVhZCBtZXRob2QnKTsKICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBycy5jYW5jZWwsICdmdW5jdGlvbicsICdoYXMgYW4gY2FuY2VsIG1ldGhvZCcpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40N2VlZjU2N2NmNzg0MzcwYjkyNTRiNGMyNDdkMzdhMjE1ZTlh
N2U0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACisKK1BBU1MgUmVhZGFibGVTdHJl
YW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycyAKK1BB
U1MgUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cgCitQQVNTIFJl
YWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYSBmdW5jdGlvbiBhcyBzdGFydCBh
cmd1bWVudCAKK1BBU1MgUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xv
c2UgdGhlIHN0cmVhbSAKK1BBU1MgQ2FsbGluZyBSZWFkYWJsZVN0cmVhbSBjbG9zZSBmdW5jdGlv
biBzaG91bGQgdHJhbnNpdGlvbiBzeW5jaHJvbm91c2x5IHRvIGNsb3NlZCBzdGF0ZSAKK1BBU1Mg
Q2FsbGluZyBSZWFkYWJsZVN0cmVhbSBjbG9zZSBmdW5jdGlvbiBzZXZlcmFsIHRpbWVzIHNob3Vs
ZCBoYXZlIG5vIGVmZmVjdCAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFk
YWJsZXN0cmVhbS1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVh
bS1zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4YjUwMDRhODYyODBkYTk3YmQxMDJjNTVhZGU2NmJk
NzAyYzEwODgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxl
c3RyZWFtLXN0YXJ0Lmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2Ny
aXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMnPjwvc2NyaXB0PgorPHNjcmlw
dD4KKwordGVzdChmdW5jdGlvbigpCit7CisgICAgdmFyIGlzU3RhcnRDYWxsZWQgPSBmYWxzZTsK
KyAgICB2YXIgc291cmNlID0KKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVl
LCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModGhpcywgc291cmNl
KTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVucXVldWUsICdmdW5jdGlvbicp
OworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgY2xvc2UsICdmdW5jdGlvbicpOwor
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZXJyb3IsICdmdW5jdGlvbicpOworICAg
ICAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhj
bG9zZSksIFsnbmFtZScsICdsZW5ndGgnXSk7CisgICAgICAgICAgICBpc1N0YXJ0Q2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFt
KHNvdXJjZSk7CisgICAgYXNzZXJ0X3RydWUoaXNTdGFydENhbGxlZCk7Cit9LCAnUmVhZGFibGVT
dHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycycp
OworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90
YXRvJyk7CisgICAgYXNzZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAg
ICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAg
IHRocm93IG1hc2hlZEVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsK
K30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0
ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7
CisgICAgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1
bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZh
ciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlv
bihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAg
IH0KKyAgICB9KTsKKyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2VkJyk7Cit9LCAn
UmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbScp
OworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY2xvc2VGdW5jdGlvbjsKKyAgICB2YXIg
cnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rpb24o
ZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBjbG9zZUZ1bmN0aW9uID0gY2xv
c2U7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnd2Fp
dGluZycpOworICAgIGNsb3NlRnVuY3Rpb24oKTsKKyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRl
LCAnY2xvc2VkJyk7Cit9LCAnQ2FsbGluZyBSZWFkYWJsZVN0cmVhbSBjbG9zZSBmdW5jdGlvbiBz
aG91bGQgdHJhbnNpdGlvbiBzeW5jaHJvbm91c2x5IHRvIGNsb3NlZCBzdGF0ZScpOworCit0ZXN0
KGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY2xvc2VGdW5jdGlvbjsKKyAgICB2YXIgcnMgPSBuZXcg
UmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rpb24oZW5xdWV1ZSwg
Y2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBjbG9zZUZ1bmN0aW9uID0gY2xvc2U7CisgICAg
ICAgIH0KKyAgICB9KTsKKyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnd2FpdGluZycpOwor
ICAgIGNsb3NlRnVuY3Rpb24oKTsKKyAgICBhc3NlcnRfZXF1YWxzKHJzLnN0YXRlLCAnY2xvc2Vk
Jyk7CisgICAgY2xvc2VGdW5jdGlvbigpOworICAgIGFzc2VydF9lcXVhbHMocnMuc3RhdGUsICdj
bG9zZWQnKTsKK30sICdDYWxsaW5nIFJlYWRhYmxlU3RyZWFtIGNsb3NlIGZ1bmN0aW9uIHNldmVy
YWwgdGltZXMgc2hvdWxkIGhhdmUgbm8gZWZmZWN0Jyk7CisKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249569</attachid>
            <date>2015-03-27 08:02:55 -0700</date>
            <delta_ts>2015-04-03 03:10:59 -0700</delta_ts>
            <desc>Adding reader support</desc>
            <filename>bug-141160-20150327160214.patch</filename>
            <type>text/plain</type>
            <size>24152</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk4MTc2ZmZlMGMzMjBk
ODdhM2FjZTMxMjY3ODQzNTcyYjdiYTQzNi4uZTU4YzAwMzc5YTljNDI5ZDhiZTZiYTdiYmFlZjcx
ODRlMGI2OTRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAzLTI3ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyB0aHJlZSBmdW5jdGlvbnMgKGNsb3NlICwgZW5xdWV1ZSBhbmQgZXJyb3IpIGFzIHBhcmFt
ZXRlcnMuCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFs
aXR5IG9mIHRoZSBjbG9zZSBmdW5jdGlvbi4KKworICAgICAgICBUZXN0OiBzdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLXN0YXJ0Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6Y2hhbmdlU3Rh
dGVUb0Nsb3NlZCk6IFBhcnRpYWxseSBpbXBsZW1lbnRzIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndo
YXR3Zy5vcmcvI3JlbGVhc2UtcmVhZGFibGUtc3RyZWFtLXJlYWRlciBpbiBjYXNlIG9mICJjbG9z
ZWQiIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KTogUGxh
Y2UgaG9sZGVyIGZvciBzdGVwIDExIG9mIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcv
I3JzLWNvbnN0cnVjdG9yLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5oOiBBZGRlZCBuZXcgbWV0aG9kcyBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBNb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW1SZWFkZXI6OnNldFN0cmVhbSk6IEdvaW5nIGluIGNsb3NlZCBzdGF0ZSBpZiByZWxh
dGVkIHN0cmVhbSBpcyBjbG9zZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbVJl
YWRlcjo6cmVsZWFzZVN0cmVhbSk6IFJlbW92aW5nIGxpbmsgYmV0d2VlbiByZWFkZXIgYW5kIHN0
cmVhbS4gQ2FsbGVkIHdoZW4gZ29pbmcgdG8gY2xvc2VkL2Vycm9yZWQgc3RhdGUuCisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKTogU3RvcmFnZSBvZiBjbG9z
ZWQgcHJvbWlzZSBjYWxsYmFja3MuIFJlc29sdXRpb24gaW4gY2FzZSByZWFkZXIgaXMgaW4gY2xv
c2VkIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1SZWFkZXI6OmNoYW5n
ZVN0YXRlVG9DbG9zZWQpOiBQYXJ0aWFsbHkgaW1wbGVtZW50cyBodHRwczovL3N0cmVhbXMuc3Bl
Yy53aGF0d2cub3JnLyNyZWxlYXNlLXJlYWRhYmxlLXN0cmVhbS1yZWFkZXIgaW4gY2FzZSBvZiAi
Y2xvc2VkIiBzdGF0ZS4KKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1S
ZWFkZXIuaDogQWRkaW5nIFN0YXRlIGVudW0gY2xhc3MuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFdyYXBwZXI6OnJlc29s
dmU8SlNDOjpKU1ZhbHVlPik6IEFsbG93IHJlc29sdmluZyB3aXRoIGEgZ2VuZXJpYyBKU1ZhbHVl
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVJlYWRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1JlYWRhYmxlU3RyZWFtUmVhZGVyOjpjbG9zZWQpOiBVcGRhdGVkIHdyYXBwZXIgdG8g
cmVzb2x2ZSB3aXRoIHVuZGVmaW5lZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJsZVN0
cmVhbUpTU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRhYmxlU3RyZWFtU2xvdE5h
bWUpOnNsb3QgbmFtZSB0byByZXRyaWV2ZSB0aGUgSlNSZWFkYWJsZVN0cmVhbSBmcm9tIHRoZSBK
UyBmdW5jdGlvbiAoZW5xdWV1ZSwgY2xvc2Ugb3IgZXJyb3IpLgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UmVhZGFibGVKU1N0cmVhbSk6IEhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgSlNS
ZWFkYWJsZVN0cmVhbSBmcm9tIHRoZSBjYWxsZWUsIGkuZSB0aGUgSlMgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3QpOiBIZWxwZXIgZnVuY3Rpb24uCisg
ICAgICAgICh5b3V0VGVzdHMvQ2hhbmdlTG9nV2ViQ29yZTo6Y2FsbEZ1bmN0aW9uKTogSGVscGVy
IGZ1bmN0aW9uIHRvIGNhbGwgYSBKUyBmdW5jdGlvbiBmcm9tIEMrKy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOiBTaG91bGQgaW1w
bGVtZW50IHRoZSBlbnF1ZXVlIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpTIGZ1bmN0aW9u
IGZvciBlbnF1ZXVlLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0
aW9uKTogSW1wbGVtZW50cyBzdHJlYW0gY2xvc2luZy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpTIGZ1bmN0aW9uIGZv
ciBjbG9zZS4KKyAgICAgICAgKFdlYkNvcmU6OmVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik6
IFNob3VsZCBpbXBsZW1lbnQgdGhlIGVycm9yIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVuY3Rpb24pOiBDcmVhdGVzIHRoZSBKUyBm
dW5jdGlvbiBmb3IgY2xvc2UuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291
cmNlOjpjcmVhdGVKU0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVh
bUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMpOiBFcXVpdmFsZW50IG9mIHByb21p
c2UgcmVzb2x1dGlvbiBmb3Igc3RhcnQuCisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVh
bUpTU291cmNlOjpzdGFydCk6IENhbGxzIHRoZSAic3RhcnQiIGZ1bmN0aW9uIG9mIHRoZSBKUyBz
b3VyY2Ugd2l0aCBhbGwgdGhyZWUgSlMgZnVuY3Rpb25zIChlbnF1ZXVlLCBjbG9zZSwgZXJyb3Ip
IGFzIHBhcmFtZXRlcnMuCisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZS5oOiBBZGRlZCBkZWNsYXJhdGlvbnMuCisKIDIwMTUtMDMtMjUgIERlYW4gSmFja3NvbiAg
PGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIENTUyBibGVuZCBtb2RlcyBkbyBub3QgcGFyc2Ug
d2hlbiBpbiB0aGUgc2hhZG93IHRyZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCmluZGV4IDYwYmE4MzVjNWNiNjc5Zjg2OWFlMTlhNTE0
YWVhYTYyYTdhMWFjNDQuLjNmZTNmMzc3NjY3OTExNzkzOWZkYTVjMWJkZDIzNTZlMWY0YzVjZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
LmNwcApAQCAtNTgsNiArNTgsMjEgQEAgUmVhZGFibGVTdHJlYW06On5SZWFkYWJsZVN0cmVhbSgp
CiAjZW5kaWYKIH0KIAordm9pZCBSZWFkYWJsZVN0cmVhbTo6Y2hhbmdlU3RhdGVUb0Nsb3NlZCgp
Cit7CisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OlJlYWRhYmxlKQorICAgICAgICByZXR1cm47
CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDbG9zZWQ7CisgICAgaWYgKG1fcmVhZGVyKQorICAgICAg
ICBtX3JlYWRlci0+Y2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworICAgIEFTU0VSVCghbV9yZWFkZXIp
OworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpzdGFydCgpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBwdWxsaW5nIGRhdGEKK30KKwogY29uc3QgY2hhciogUmVhZGFibGVTdHJlYW06OmFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogewogICAgIHJldHVybiAiUmVhZGFibGVTdHJlYW0i
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaApp
bmRleCAyZDZjOWY0MTBlNWRiOTY1NjlmNzA1OThiYmZlYzMyMjJkZmVjZjA4Li4zZjM3M2M3OTcy
YjdmMjVhM2YxMTgyMDgzZWRhZmM3N2ZjY2I4ZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6
CiAKICAgICBTdGF0ZSBpbnRlcm5hbFN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQogCisgICAg
dm9pZCBzdGFydCgpOworICAgIHZvaWQgY2hhbmdlU3RhdGVUb0Nsb3NlZCgpOworCiBwcm90ZWN0
ZWQ6CiAgICAgUmVhZGFibGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxSZWFk
YWJsZVN0cmVhbVNvdXJjZT4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuY3BwCmluZGV4IDUyMGYxNGZmOWU2NjQ3
YWIwZWQ2MTVmYzllYTM1NzlhZjcwODRiYTYuLmY0ZmMxZDU1NTdkZTUzNDRjNTIxNWIwYzJkMzBl
NzAzMGFiNmY1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcApAQCAtNjAsMTEgKzYwLDQxIEBAIHZvaWQgUmVh
ZGFibGVTdHJlYW1SZWFkZXI6OnNldFN0cmVhbShSZWFkYWJsZVN0cmVhbSYgc3RyZWFtKQogewog
ICAgIG1fc3RyZWFtID0gJnN0cmVhbTsKICAgICBzdHJlYW0uc2V0UmVhZGVyKHRoaXMpOworICAg
IGlmIChzdHJlYW0uaW50ZXJuYWxTdGF0ZSgpID09IFJlYWRhYmxlU3RyZWFtOjpTdGF0ZTo6Q2xv
c2VkKSB7CisgICAgICAgIGNoYW5nZVN0YXRlVG9DbG9zZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIH0KIAotdm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKENsb3NlZFN1Y2Nl
c3NDYWxsYmFjaywgQ2xvc2VkRXJyb3JDYWxsYmFjaykKK3ZvaWQgUmVhZGFibGVTdHJlYW1SZWFk
ZXI6OnJlbGVhc2VTdHJlYW0oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7ICAgIAorICAgIEFT
U0VSVChtX3N0cmVhbSk7CisgICAgUmVmPFJlYWRhYmxlU3RyZWFtUmVhZGVyPiBwcm90ZWN0KCp0
aGlzKTsKKyAgICBtX3N0cmVhbS0+c2V0UmVhZGVyKG51bGxwdHIpOworICAgIG1fc3RyZWFtID0g
bnVsbHB0cjsKK30KKwordm9pZCBSZWFkYWJsZVN0cmVhbVJlYWRlcjo6Y2xvc2VkKENsb3NlZFN1
Y2Nlc3NDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIENsb3NlZEVycm9yQ2FsbGJhY2spCit7Cisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkgeworICAgICAgICBzdWNjZXNzQ2FsbGJh
Y2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFj
ayA9IFdURjo6bW92ZShzdWNjZXNzQ2FsbGJhY2spOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFt
UmVhZGVyOjpjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBT
dGF0ZTo6UmVhZGFibGUpOworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2xvc2VkOworCisgICAgaWYg
KG1fY2xvc2VkU3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgIENsb3NlZFN1Y2Nlc3NDYWxsYmFj
ayBjbG9zZWRTdWNjZXNzQ2FsbGJhY2sgPSBXVEY6Om1vdmUobV9jbG9zZWRTdWNjZXNzQ2FsbGJh
Y2spOworICAgICAgICBjbG9zZWRTdWNjZXNzQ2FsbGJhY2soKTsKKyAgICB9CisgICAgQVNTRVJU
KCFtX2Nsb3NlZFN1Y2Nlc3NDYWxsYmFjayk7CisgICAgcmVsZWFzZVN0cmVhbSgpOworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmVhZCBwcm9taXNlIGZ1bGZpbGxpbmcuCiB9CiAKIGNvbnN0IGNo
YXIqIFJlYWRhYmxlU3RyZWFtUmVhZGVyOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJl
YWRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVh
ZGVyLmgKaW5kZXggODk5NDY0OWM1ODU0NGI2OTQ5OGI0NmQ2NGM2YTdjOWNmZDIwYmU2Ny4uMTc0
NTg5ZWVmYWExNjIzZGYwMWEwMDRhY2ExNzAyNjI3YzkzOTVhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmgKQEAgLTQ4
LDYgKzQ4LDEyIEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAvLyBTZWUgaHR0cHM6
Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGVyLWNsYXNzIGZvciBtb3JlIGluZm9ybWF0
aW9uLgogY2xhc3MgUmVhZGFibGVTdHJlYW1SZWFkZXIgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
LCBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxSZWFkYWJsZVN0cmVh
bVJlYWRlcj4gewogcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhdGUgeworICAgICAgICBSZWFk
YWJsZSwKKyAgICAgICAgQ2xvc2VkLAorICAgICAgICBFcnJvcmVkCisgICAgfTsKKwogICAgIHZp
cnR1YWwgflJlYWRhYmxlU3RyZWFtUmVhZGVyKCk7CiAKICAgICBSZWFkYWJsZVN0cmVhbSogc3Ry
ZWFtKCkgeyByZXR1cm4gbV9zdHJlYW07IH0KQEAgLTU2LDEwICs2MiwxMyBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gQ2xvc2VkRXJyb3JDYWxsYmFjazsKICAg
ICB2b2lkIGNsb3NlZChDbG9zZWRTdWNjZXNzQ2FsbGJhY2ssIENsb3NlZEVycm9yQ2FsbGJhY2sp
OwogCisgICAgdm9pZCBjaGFuZ2VTdGF0ZVRvQ2xvc2VkKCk7CisKIHByb3RlY3RlZDoKICAgICBS
ZWFkYWJsZVN0cmVhbVJlYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICB2b2lk
IHNldFN0cmVhbShSZWFkYWJsZVN0cmVhbSYpOworICAgIHZvaWQgcmVsZWFzZVN0cmVhbSgpOwog
CiBwcml2YXRlOgogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCkBAIC02Nyw2ICs3Niw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBS
ZWFkYWJsZVN0cmVhbSogbV9zdHJlYW0geyBudWxscHRyIH07CisgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpSZWFkYWJsZSB9OworCisgICAgQ2xvc2VkU3VjY2Vzc0NhbGxiYWNrIG1fY2xvc2Vk
U3VjY2Vzc0NhbGxiYWNrOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaAppbmRleCA0MmQwMmQ5ZjI4ZTllNmE4NGE0ZTc1YzNhNzMxOGY5NjE0ZjlhMDFj
Li4xODAzM2RjODA4Y2I5YzVkOTgxMjY5YThkYTkzYzQ0OGE2NDM4NTdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtOTgsNiArOTgsMTMgQEAgaW5saW5l
IHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPGJvb2w+KGNvbnN0IGJvb2wmIHJlc3VsdCkK
IH0KIAogdGVtcGxhdGU8PgoraW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPEpT
Qzo6SlNWYWx1ZT4oY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIHJlc29sdmUoZXhlYywgdmFsdWUpOworfQordGVt
cGxhdGU8PgogaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPj4oY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByZXN1bHQpCiB7CiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9t
LmNwcAppbmRleCBkMDk5MjIxOGNiMDJlODlmYmUzODU2ZDc5Mzg5ODhkMTNjZWVlM2VhLi4wZWQ1
Mjc3NWEyOWNhMzBhYTEyNmMxOGE3NzBmZTliMjg2ZDhiZjc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApAQCAtOTEs
NyArOTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFi
bGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVh
bSoganNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxl
U3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVh
bTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7
CiAKLSAgICBzb3VyY2UtPnN0YXJ0KGV4ZWMpOworICAgIHNvdXJjZS0+c3RhcnQoZXhlYywganNS
ZWFkYWJsZVN0cmVhbSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVhZGFibGVT
dHJlYW0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFk
YWJsZVN0cmVhbVJlYWRlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcAppbmRleCBhNTg0NWNlYzA4NzlmMGJhNTlh
M2ZiMzEzYTZhZTc0MmE3MWIwYzkyLi5iNTBhMTcyNWIwNWJhNDNlZTQzOGVmNDk1MDM2OTg1NjFi
YjBlN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtUmVhZGVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JlYWRhYmxlU3RyZWFtUmVhZGVyQ3VzdG9tLmNwcApAQCAtNzcsOSArNzcsOCBAQCBKU1ZhbHVl
IEpTUmVhZGFibGVTdHJlYW1SZWFkZXI6OmNsb3NlZChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7
CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IGdldE9yQ3JlYXRlUHJv
bWlzZURlZmVycmVkRnJvbU9iamVjdChleGVjLCB0aGlzLCBnbG9iYWxPYmplY3QoKSwgY2xvc2Vk
UHJvbWlzZVNsb3ROYW1lKCkpOwogICAgIERlZmVycmVkV3JhcHBlciB3cmFwcGVyKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwotICAgIGF1dG8gc3VjY2Vzc0NhbGxiYWNr
ID0gW3RoaXMsIHdyYXBwZXJdKCkgbXV0YWJsZSB7Ci0gICAgICAgIC8vIEZJWE1FOiByZXR1cm4g
anNVbmRlZmluZWQoKS4KLSAgICAgICAgd3JhcHBlci5yZXNvbHZlKCZpbXBsKCkpOworICAgIGF1
dG8gc3VjY2Vzc0NhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHdyYXBw
ZXIucmVzb2x2ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9OwogICAgIGF1dG8gZmFpbHVyZUNhbGxi
YWNrID0gW3RoaXMsIHdyYXBwZXJdKCkgbXV0YWJsZSB7CiAgICAgICAgIC8vIEZJWE1FOiByZXR1
cm4gc3RvcmVkIGVycm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAppbmRleCA5YjI0NzI4NmM4YmMyMWY4NjNmOTVlMDNk
Njk3ZjY4NDA2ZWU2ZDYwLi4zYmRkNTIzZWFmNmFmN2ZkMmI3MjRmODA1OWNlZThmOWIyOTRkMjU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpT
U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bUpTU291cmNlLmNwcApAQCAtMjgsMTcgKzI4LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKIAogI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUpTU291cmNlLmgiCiAKICNpbmNs
dWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IApAQCAtNjIsNiArNjUsMzMgQEAgSlNWYWx1ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvYmplY3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4g
cHJvcGVydHlTbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKKy8vIFRoaXMg
c2xvdCBuYW1lIGlzIHVzZWQgdG8gc3RvcmUgdGhlIEpTUmVhZGFibGVTdHJlYW0gaW4gY3JlYXRl
ZCBKUyBmdW5jdGlvbnMgKGVucXVldWUsIGNsb3NlLi4uKS4KKy8vIFRoaXMgYWxsb3dzIHJldHJp
ZXZpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSlNSZWFkYWJsZVN0cmVhbSB3aGVuIGV4ZWN1dGluZyB0
aGUgSlMgZnVuY3Rpb24uCitzdGF0aWMgSlNDOjpQcml2YXRlTmFtZSYgcmVhZGFibGVTdHJlYW1T
bG90TmFtZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTQzo6UHJpdmF0ZU5hbWU+
IHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoInJlYWRhYmxlU3RyZWFtIik7CisgICAgcmV0dXJuIHJl
YWRhYmxlU3RyZWFtU2xvdE5hbWU7Cit9CisKK3N0YXRpYyBSZWFkYWJsZUpTU3RyZWFtJiBnZXRS
ZWFkYWJsZUpTU3RyZWFtKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1JlYWRhYmxlU3RyZWFt
KiBqc1JlYWRhYmxlU3RyZWFtID0ganNEeW5hbWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtKj4oZ2V0
SW50ZXJuYWxTbG90RnJvbU9iamVjdChleGVjLCBleGVjLT5jYWxsZWUoKSwgcmVhZGFibGVTdHJl
YW1TbG90TmFtZSgpKSk7CisgICAgQVNTRVJUKGpzUmVhZGFibGVTdHJlYW0pOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxSZWFkYWJsZUpTU3RyZWFtJj4oanNSZWFkYWJsZVN0cmVhbS0+aW1wbCgp
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGdldFByb3BlcnR5RnJvbU9iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIpCit7
CisgICAgcmV0dXJuIG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgaWRlbnRpZmll
cikpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY2FsbEZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJndW1lbnRzLCBKU1ZhbHVlKiBleGNlcHRpb24pCit7CisgICAgQ2FsbERhdGEgY2FsbERh
dGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0aW9uLCBjYWxs
RGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKwogUmVmPFJlYWRhYmxl
U3RyZWFtSlNTb3VyY2U+IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkYWJsZVN0cmVhbUpT
U291cmNlKGV4ZWMpKTsKQEAgLTcxLDEzICsxMDEsOTcgQEAgUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIEFTU0VSVChleGVjLT5hcmd1bWVu
dCgwKS5pc09iamVjdCgpKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBwYXJhbWV0ZXJz
IHN1cHBvcnQ7CisgICAgICAgIG1fc291cmNlLnNldChleGVjLT52bSgpLCBleGVjLT5hcmd1bWVu
dCgwKS5nZXRPYmplY3QoKSk7CiAgICAgfQogfQogCi12b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U6OnN0YXJ0KEpTQzo6RXhlY1N0YXRlKikKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFt
RW5xdWV1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwg
U3RyaW5nKCksIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBnZXRSZWFkYWJsZUpTU3RyZWFtKGV4ZWMpLmNoYW5nZVN0
YXRlVG9DbG9zZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xv
c2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDAsIFN0cmlu
ZygpLCBjbG9zZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRl
KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3JlYXRlUmVh
ZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgMSwgU3RyaW5nKCksIGVycm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3Zv
aWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlSlNGdW5jdGlvbnMoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIG1fZW5xdWV1ZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVSZWFk
YWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbihleGVjKSk7CisgICAgbV9jbG9zZUZ1bmN0aW9uLnNl
dChleGVjLT52bSgpLCBjcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oZXhlYykpOwor
ICAgIG1fZXJyb3JGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1F
cnJvckZ1bmN0aW9uKGV4ZWMpKTsKKworICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMs
IG1fZW5xdWV1ZUZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIG1fcmVh
ZGFibGVTdHJlYW0pOworICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fY2xvc2VG
dW5jdGlvbi5nZXQoKSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFt
KTsKKyAgICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVjLCBtX2Vycm9yRnVuY3Rpb24uZ2V0
KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7Cit9CisKK3Zv
aWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCkKK3sK
KyAgICBtX3JlYWRhYmxlU3RyZWFtLT5pbXBsKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5w
b3N0VGFzayhbdGhpc10oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgbV9yZWFk
YWJsZVN0cmVhbS0+aW1wbCgpLnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhZGFibGVT
dHJlYW1KU1NvdXJjZTo6c3RhcnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTUmVhZGFibGVTdHJl
YW0qIHJlYWRhYmxlU3RyZWFtKQoreworICAgIG1fcmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0
cmVhbTsKKyAgICBpZiAoIW1fc291cmNlKSB7CisgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1B
c3luYygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisKKyAgICBjcmVhdGVKU0Z1bmN0aW9ucyhleGVjKTsKKworICAgIEpTVmFsdWUgc3Rh
cnRGdW5jdGlvbiA9IGdldFByb3BlcnR5RnJvbU9iamVjdChleGVjLCBtX3NvdXJjZS5nZXQoKSwg
InN0YXJ0Iik7CisgICAgaWYgKCFzdGFydEZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkgeworICAgICAg
ICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWFkYWJsZVN0
cmVhbSBjb25zdHJ1Y3RvciBvYmplY3Qgc3RhcnQgcHJvcGVydHkgc2hvdWxkIGJlIGEgZnVuY3Rp
b24uIikpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVhbUFz
eW5jKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2VucXVldWVGdW5jdGlvbi5nZXQo
KSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Nsb3NlRnVuY3Rpb24uZ2V0KCkpOworICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9lcnJvckZ1bmN0aW9uLmdldCgpKTsKKworICAgIEpTVmFsdWUgZXhj
ZXB0aW9uOworICAgIGNhbGxGdW5jdGlvbihleGVjLCBzdGFydEZ1bmN0aW9uLCBtX3NvdXJjZS5n
ZXQoKSwgYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKworICAgIGlmIChleGNlcHRpb24pIHsKKyAg
ICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGhhbmRsaW5nIHByb21pc2UgYXMgcmVzdWx0
IG9mIGNhbGxpbmcgc3RhcnQgZnVuY3Rpb24uCisgICAgc3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5j
KCk7CiB9CiAKIFJlZjxSZWFkYWJsZUpTU3RyZWFtPiBSZWFkYWJsZUpTU3RyZWFtOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U+JiYgc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCmluZGV4IGI3YjA3MGIyNDBmY2Q1Yzg5
YWI5N2M4MmY3NjEyYTg2NDI5ZWI4MDEuLjZmNGFkN2FjZDA3ZTgwYWFmODI5MWFkNmMxZTk1YmM3
YjliMjMxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxl
U3RyZWFtSlNTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbUpTU291cmNlLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9u
Zy5oPgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvUHJpdmF0ZU5hbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKQEAgLTUwLDEw
ICs1MSwyMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNl
PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqKTsKICAgICB+UmVhZGFibGVTdHJlYW1KU1NvdXJjZSgp
IHsgfQogCi0gICAgdm9pZCBzdGFydChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHZvaWQgc3RhcnQo
SlNDOjpFeGVjU3RhdGUqLCBKU1JlYWRhYmxlU3RyZWFtKik7CiAKIHByaXZhdGU6CiAgICAgUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIHZvaWQgc3RhcnRSZWFk
YWJsZVN0cmVhbUFzeW5jKCk7CisgICAgdm9pZCBjcmVhdGVKU0Z1bmN0aW9ucyhKU0M6OkV4ZWNT
dGF0ZSopOworCisgICAgSlNSZWFkYWJsZVN0cmVhbSogbV9yZWFkYWJsZVN0cmVhbSB7IG51bGxw
dHIgfTsKKworICAgIC8vIE9iamVjdCBwYXNzZWQgdG8gY29uc3RydWN0b3IuCisgICAgSlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4gbV9zb3VyY2U7CisKKyAgICAvLyBGdW5jdGlvbnMgcGFzc2Vk
IGFzIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgcGFzc2VkIGluIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTRnVuY3Rpb24+IG1fZW5xdWV1ZUZ1
bmN0aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9jbG9zZUZ1bmN0aW9u
OworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lcnJvckZ1bmN0aW9uOwogfTsK
IAogY2xhc3MgUmVhZGFibGVKU1N0cmVhbTogcHVibGljIFJlYWRhYmxlU3RyZWFtIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBhNjc0YTBkZTZmZDUzNjgxMzJjZGIyN2ZjZGU4MDE3NWVmYmY1ZjYxLi5mZTVkZDJkOWViY2Ex
YWE2NzU4MDQxN2U1MGI3YmVkODUwMDA1ZjlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUt
MDMtMjUgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZ
b3Vlbm4gRmFibGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3Ry
ZWFtcyBBUEldIFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJs
ZVN0cmVhbSBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgdGVzdHMgdG8gY2hlY2sgdGhhdCBzdGFydCBKUyBmdW5jdGlvbiBp
cyBjYWxsZWQsIGNhbiBjbG9zZSBhIHN0cmVhbSBhbmQgY2FuIHRocm93IGVycm9ycy4KKworICAg
ICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWw6IEFkZGVkLgorCiAy
MDE1LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSGVh
cCB2YXJpYWJsZXMgc2hvdWxkbid0IGVuZCB1cCBpbiB0aGUgc3RhY2sgZnJhbWUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDUzYmFhMjE5ODE2MWE3ZTJkMGRhYmE4NTk4OTE0OTdkODE5MDczZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0
IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMgCitQQVNTIFJlYWRh
YmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHRocm93IAorUEFTUyBSZWFkYWJsZVN0
cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQg
CitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIGNsb3NlIHRoZSBz
dHJlYW0gCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IGNsb3NlIGZ1bmN0aW9uIHNob3VsZCBi
ZSBhYmxlIHRvIGNsb3NlIHRoZSBzdHJlYW0gYXQgYW55IHRpbWUgCitQQVNTIENhbGxpbmcgUmVh
ZGFibGVTdHJlYW0gY2xvc2UgZnVuY3Rpb24gc2V2ZXJhbCB0aW1lcyBzaG91bGQgaGF2ZSBubyBl
ZmZlY3QgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGluIGNsb3NlZCBzdGF0ZSBzaG91bGQgbm90IGJl
IHRpZWQgdG8gYSBwYXJ0aWN1bGFyIHJlYWRlciAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZmVmNTY1MThhYjRmNGJkNjhi
YTJjYTI3YzFjNWRhYzYyMmQ3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdHJl
YW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzJz48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBpc1N0YXJ0Q2Fs
bGVkID0gZmFsc2U7CisgICAgdmFyIHNvdXJjZSA9CisgICAgeyBzdGFydDoKKyAgICAgICAgZnVu
Y3Rpb24oZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxz
KHRoaXMsIHNvdXJjZSk7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVucXVl
dWUsICdmdW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgY2xvc2Us
ICdmdW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZXJyb3IsICdm
dW5jdGlvbicpOworCisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRP
d25Qcm9wZXJ0eU5hbWVzKGVucXVldWUpLCBbJ25hbWUnLCAnbGVuZ3RoJ10pOworICAgICAgICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjbG9zZSks
IFsnbmFtZScsICdsZW5ndGgnXSk7CisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9i
amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSwgWyduYW1lJywgJ2xlbmd0aCddKTsKKwor
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlbnF1ZXVlLm5hbWUsICcnKTsKKyAgICAgICAgICAg
IGFzc2VydF9lcXVhbHMoY2xvc2UubmFtZSwgJycpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhlcnJvci5uYW1lLCAnJyk7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW5xdWV1ZS5s
ZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjbG9zZS5sZW5ndGgsIDApOwor
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlcnJvci5sZW5ndGgsIDEpOworCisgICAgICAgICAg
ICBpc1N0YXJ0Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIHJzID0g
bmV3IFJlYWRhYmxlU3RyZWFtKHNvdXJjZSk7CisgICAgYXNzZXJ0X3RydWUoaXNTdGFydENhbGxl
ZCk7Cit9LCAnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBw
cm9wZXIgcGFyYW1ldGVycycpOworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJv
ciA9IG5ldyBFcnJvcigncG90YXRvJyk7CisgICAgYXNzZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICAg
ICAgeyBzdGFydDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikg
eworICAgICAgICAgICAgICAgIHRocm93IG1hc2hlZEVycm9yOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJs
ZSB0byB0aHJvdycpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF90aHJvd3MobmV3
IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsg
c3RhcnQ6ICdwb3RhdG8nfSk7CisgICAgfSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0
b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9uIGFzIHN0YXJ0IGFyZ3VtZW50Jyk7CisKK3QxID0gYXN5
bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhl
IHN0cmVhbScpOwordDEuc3RlcChmdW5jdGlvbigpCit7CisgICAgdmFyIHJzID0gbmV3IFJlYWRh
YmxlU3RyZWFtKAorICAgIHsgc3RhcnQ6CisgICAgICAgIGZ1bmN0aW9uKGVucXVldWUsIGNsb3Nl
LCBlcnJvcikgeworICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IHZhciByZWFkZXIgPSBycy5nZXRSZWFkZXIoKTsKKyAgICB2YXIgY2xvc2VkID0gZmFsc2U7Cisg
ICAgcmVhZGVyLmNsb3NlZC50aGVuKHQxLnN0ZXBfZnVuYyhmdW5jdGlvbih2KSB7CisgICAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIHYsICd1bmRlZmluZWQnKTsKKyAgICAgICAgY2xvc2VkID0g
dHJ1ZTsKKyAgICB9KSk7CisgICAgc2V0VGltZW91dCh0MS5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7
CisgICAgICAgIGFzc2VydF90cnVlKGNsb3NlZCk7CisgICAgICAgIHQxLmRvbmUoKTsKKyAgICB9
KSwgMTApOworfSk7CisKK3QyID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gc3RhcnQgY2xv
c2UgZnVuY3Rpb24gc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgdGhlIHN0cmVhbSBhdCBhbnkgdGlt
ZScpOwordDIuc3RlcChmdW5jdGlvbigpCit7CisgICAgdmFyIGNsb3NlRnVuY3Rpb247CisgICAg
dmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKAorICAgIHsgc3RhcnQ6CisgICAgICAgIGZ1bmN0
aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgY2xvc2VGdW5jdGlvbiA9
IGNsb3NlOworICAgICAgICB9CisgICAgfSk7CisgICAgdmFyIHJlYWRlciA9IHJzLmdldFJlYWRl
cigpOworICAgIHZhciBjbG9zZWQgPSBmYWxzZTsKKyAgICByZWFkZXIuY2xvc2VkLnRoZW4odDIu
c3RlcF9mdW5jKGZ1bmN0aW9uKHYpIHsKKyAgICAgICAgY2xvc2VkID0gdHJ1ZTsKKyAgICB9KSk7
CisgICAgYXNzZXJ0X2ZhbHNlKGNsb3NlZCk7CisgICAgY2xvc2VGdW5jdGlvbigpOworICAgIHNl
dFRpbWVvdXQodDIuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgeworICAgICAgICBhc3NlcnRfdHJ1ZShj
bG9zZWQpOworICAgICAgICB0Mi5kb25lKCk7CisgICAgfSksIDEwKTsKK30pOworCit0MyA9IGFz
eW5jX3Rlc3QoJ0NhbGxpbmcgUmVhZGFibGVTdHJlYW0gY2xvc2UgZnVuY3Rpb24gc2V2ZXJhbCB0
aW1lcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QnKTsKK3QzLnN0ZXAoZnVuY3Rpb24oKQoreworICAg
IHZhciBjbG9zZUZ1bmN0aW9uOworICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAg
ICB7IHN0YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAg
ICAgICAgICAgIGNsb3NlRnVuY3Rpb24gPSBjbG9zZTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IHZhciByZWFkZXIgPSBycy5nZXRSZWFkZXIoKTsKKyAgICB2YXIgY2xvc2VkID0gMDsKKyAgICBy
ZWFkZXIuY2xvc2VkLnRoZW4odDMuc3RlcF9mdW5jKGZ1bmN0aW9uKHYpIHsKKyAgICAgICAgY2xv
c2VkKys7CisgICAgfSkpOworICAgIGFzc2VydF9lcXVhbHMoY2xvc2VkLCAwKTsKKyAgICBjbG9z
ZUZ1bmN0aW9uKCk7CisgICAgY2xvc2VGdW5jdGlvbigpOworICAgIHNldFRpbWVvdXQodDMuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKGNsb3NlZCwgMSk7Cisg
ICAgICAgIHQzLmRvbmUoKTsKKyAgICB9KSwgMTApOworfSk7CisKK3Q0ID0gYXN5bmNfdGVzdCgn
UmVhZGFibGVTdHJlYW0gaW4gY2xvc2VkIHN0YXRlIHNob3VsZCBub3QgYmUgdGllZCB0byBhIHBh
cnRpY3VsYXIgcmVhZGVyJyk7Cit0NC5zdGVwKGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgcnMgPSBu
ZXcgUmVhZGFibGVTdHJlYW0oCisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rpb24oZW5xdWV1
ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICB9CisgICAg
fSk7CisgICAgdmFyIHJlYWRlciA9IHJzLmdldFJlYWRlcigpOworICAgIHJlYWRlci5jbG9zZWQu
dGhlbih0NC5zdGVwX2Z1bmMoZnVuY3Rpb24odikgeworICAgICAgICBhc3NlcnRfbm90X2VxdWFs
cyhyZWFkZXIsIHJzLmdldFJlYWRlcigpKTsKKyAgICAgICAgY2xvc2VkID0gdHJ1ZTsKKyAgICB9
KSk7CisgICAgc2V0VGltZW91dCh0NC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgICAgIHQ0
LmRvbmUoKTsKKyAgICB9KSwgMTApOworfSk7CisKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250054</attachid>
            <date>2015-04-03 03:11:09 -0700</date>
            <delta_ts>2015-04-04 10:35:31 -0700</delta_ts>
            <desc>Removing close</desc>
            <filename>bug-141160-20150403121022.patch</filename>
            <type>text/plain</type>
            <size>15409</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDQ0ZTNlMjNhODE5MGQ3
NjJiODM3MzE5MTFlYjZjMzUyYTk4MWRlMC4uZGNlYzE0Y2Q5ZGVhMTE2MzNlN2Y2Yzg1ODM5MWVl
ZDZkMmI3YTEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE1LTA0LTAzICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyB0aHJlZSBKUyBmdW5jdGlvbnMgYXMgcGFyYW1ldGVyczogY2xvc2UsIGVucXVldWUgYW5k
IGVycm9yLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHN0b3JlZCBpbiBSZWFkYWJsZVN0
cmVhbUpTU291cmNlIGFzIHRoZXkgd2lsbCBiZQorICAgICAgICByZXVzZWQgYXMgInB1bGwiIHBh
cmFtZXRlcnMgKGNsb3NlIGFuZCBlbnF1ZXVlKSBvciBhcyBwYXJ0IG9mIGdsb2JhbCBwcm9taXNl
IHJlamVjdGlvbiAoZXJyb3IpLgorICAgICAgICBBbGwgdGhyZWUgSlMgZnVuY3Rpb25zIGRvIG5v
dCBjdXJyZW50bHkgZG8gYW55dGhpbmcuCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1zdGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KTogUGxh
Y2UgaG9sZGVyIGZvciBzdGVwIDExIG9mIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcv
I3JzLWNvbnN0cnVjdG9yLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpyZWFkYWJsZVN0cmVhbVNsb3ROYW1lKTogU2xvdCBuYW1lIHRvIHJldHJpZXZlIHRoZSBKU1Jl
YWRhYmxlU3RyZWFtIGZyb20gdGhlIEpTIGZ1bmN0aW9uIChlbnF1ZXVlLCBjbG9zZSBvciBlcnJv
cikuCisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3QpOiBIZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgICh5b3V0VGVzdHMvQ2hhbmdlTG9nV2ViQ29yZTo6Y2FsbEZ1bmN0aW9u
KTogSGVscGVyIGZ1bmN0aW9uIHRvIGNhbGwgYSBKUyBmdW5jdGlvbiBmcm9tIEMrKy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOiBT
aG91bGQgaW1wbGVtZW50IHRoZSBlbnF1ZXVlIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpT
IGZ1bmN0aW9uIGZvciBlbnF1ZXVlLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0
cmVhbUZ1bmN0aW9uKTogU2hvdWxkIGltcGxlbWVudCB0aGUgY2xvc2UgZnVuY3Rpb25hbGl0eS4K
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbik6IENy
ZWF0ZXMgdGhlIEpTIGZ1bmN0aW9uIGZvciBjbG9zZS4KKyAgICAgICAgKFdlYkNvcmU6OmVycm9y
UmVhZGFibGVTdHJlYW1GdW5jdGlvbik6IFNob3VsZCBpbXBsZW1lbnQgdGhlIGVycm9yIGZ1bmN0
aW9uYWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVu
Y3Rpb24pOiBDcmVhdGVzIHRoZSBKUyBmdW5jdGlvbiBmb3IgZXJyb3IuCisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjcmVhdGVKU0Z1bmN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5
bmMpOiBFcXVpdmFsZW50IG9mIHByb21pc2UgcmVzb2x1dGlvbiBmb3Igc3RhcnQuCisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydCk6IENhbGxzIHRoZSAic3Rh
cnQiIGZ1bmN0aW9uIG9mIHRoZSBKUyBzb3VyY2Ugd2l0aCBhbGwgdGhyZWUgSlMgZnVuY3Rpb25z
IChlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIGFzIHBhcmFtZXRlcnMuCisgICAgICAgICogYmluZGlu
Z3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oOgorCiAyMDE1LTA0LTAxIFhhYmllciBSb2Ry
aWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCA8eW91
ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBTcGxpdCBS
ZWFkYWJsZVN0cmVhbS9SZWFkZXIgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHNvdXJjZSB0eXBl
IChKUyB2cyBuYXRpdmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmNwcAppbmRleCA2MGJhODM1YzVjYjY3OWY4NjlhZTE5YTUxNGFlYWE2MmE3
YTFhYzQ0Li4wYmQ5YjRlMWQ0MGU1YmYzZTI5YmJhMGI5OTUzYmFmYzQ2NDUxMTc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAg
LTU4LDYgKzU4LDExIEBAIFJlYWRhYmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogI2VuZGlm
CiB9CiAKK3ZvaWQgUmVhZGFibGVTdHJlYW06OnN0YXJ0KCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHB1bGxpbmcgZGF0YQorfQorCiBjb25zdCBjaGFyKiBSZWFkYWJsZVN0cmVhbTo6YWN0
aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJSZWFkYWJsZVN0cmVhbSI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJl
YW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmlu
ZGV4IDI2MzI0N2JhODI4YjA4MTU4MzBiYTEwYTg2NTdiNzRkYWQwYmIzMWQuLmMxNDRiNTU5ODRk
NWEyZmNiYzQ1ODk2OTk2OWEzN2RlYWI0MzlhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoK
IAogICAgIFN0YXRlIGludGVybmFsU3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAKKyAgICB2
b2lkIHN0YXJ0KCk7CisKIHByb3RlY3RlZDoKICAgICBSZWFkYWJsZVN0cmVhbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgUmVmPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApp
bmRleCA1OTg2NTE1NWE4M2NiMDNlYWRjMGY1NDFiZWNhN2U3NWYyZjViNDIwLi4wYTMzMmM5YWZi
ZDhjMzMyNjI0YjNiMGU3Yjc4YmE4ZWZkZDFiMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApAQCAtODcsNyArODcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJl
YW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSoganNS
ZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFt
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3Jl
YXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKLSAg
ICBzb3VyY2UtPnN0YXJ0KGV4ZWMpOworICAgIHNvdXJjZS0+c3RhcnQoZXhlYywganNSZWFkYWJs
ZVN0cmVhbSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVhZGFibGVTdHJlYW0p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJl
YW1KU1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bUpTU291cmNlLmNwcAppbmRleCBjNDk0ODZjZGFhNDBiM2E3MTU1MmY0MGE4NjM4NDFjNDk4ZTNm
Y2IzLi5mOWM2Y2RhNjM3ZWQ5M2QxMGVhMTg1MTNiNGVmZTYyYTMyYjIyNGNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNw
cApAQCAtMjgsMTggKzI4LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaCIKIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
LSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUpTU291cmNlLmgiCiAKICNpbmNsdWRlICJET01XcmFw
cGVyV29ybGQuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU1JlYWRh
YmxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTYzLDYg
KzY1LDI2IEBAIEpTVmFsdWUgZ2V0SW50ZXJuYWxTbG90RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgb2JqZWN0VmFsdWUsIFByaXZhdGVOCiAgICAgcmV0dXJuIHByb3BlcnR5U2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCisvLyBUaGlzIHNsb3QgbmFtZSBp
cyB1c2VkIHRvIHN0b3JlIHRoZSBKU1JlYWRhYmxlU3RyZWFtIGluIGNyZWF0ZWQgSlMgZnVuY3Rp
b25zIChlbnF1ZXVlLCBjbG9zZS4uLikuCisvLyBUaGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBj
b3JyZXNwb25kaW5nIEpTUmVhZGFibGVTdHJlYW0gd2hlbiBleGVjdXRpbmcgdGhlIEpTIGZ1bmN0
aW9uLgorc3RhdGljIEpTQzo6UHJpdmF0ZU5hbWUmIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OlByaXZhdGVOYW1lPiByZWFkYWJsZVN0
cmVhbVNsb3ROYW1lKCJyZWFkYWJsZVN0cmVhbSIpOworICAgIHJldHVybiByZWFkYWJsZVN0cmVh
bVNsb3ROYW1lOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRp
ZmllcikKK3sKKyAgICByZXR1cm4gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCBpZGVudGlmaWVyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxs
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK3sK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBqc0Z1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzLCBleGNlcHRpb24p
OworfQorCiBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoZXhlYykpOwpAQCAtNzIsMTMgKzk0LDk4IEBAIFJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCksICJDYWxsZXIg
b2YgUmVhZGFibGVTdHJlYW1KU1NvdXJjZSBjb25zdHJ1Y3RvciBzaG91bGQgZW5zdXJlIHRoYXQg
cGFzc2VkIGFyZ3VtZW50IGlzIGFuIG9iamVjdC4iKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBwYXJhbWV0ZXJzIHN1cHBvcnQ7CisgICAgICAgIG1fc291cmNlLnNldChleGVjLT52bSgp
LCBleGVjLT5hcmd1bWVudCgwKS5nZXRPYmplY3QoKSk7CiAgICAgfQogfQogCi12b2lkIFJlYWRh
YmxlU3RyZWFtSlNTb3VyY2U6OnN0YXJ0KEpTQzo6RXhlY1N0YXRlKikKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNT
dGF0ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0
ZVJlYWRhYmxlU3RyZWFtRW5xdWV1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9i
YWxPYmplY3QoKSwgMSwgU3RyaW5nKCksIGVucXVldWVSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2xvc2VSZWFkYWJsZVN0
cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgaW5saW5l
IEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDAsIFN0cmluZygpLCBjbG9zZVJlYWRhYmxlU3Ry
ZWFtRnVuY3Rpb24pOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBl
cnJvclJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwgU3RyaW5nKCksIGVy
cm9yUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6Y3JlYXRlSlNGdW5jdGlvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIG1fZW5xdWV1
ZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5j
dGlvbihleGVjKSk7CisgICAgbV9jbG9zZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVS
ZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oZXhlYykpOworICAgIG1fZXJyb3JGdW5jdGlvbi5z
ZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKGV4ZWMpKTsK
KworICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fZW5xdWV1ZUZ1bmN0aW9uLmdl
dCgpLCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIG1fcmVhZGFibGVTdHJlYW0pOworICAgIHNl
dEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fY2xvc2VGdW5jdGlvbi5nZXQoKSwgcmVhZGFi
bGVTdHJlYW1TbG90TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFtKTsKKyAgICBzZXRJbnRlcm5hbFNs
b3RUb09iamVjdChleGVjLCBtX2Vycm9yRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xv
dE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1Nv
dXJjZTo6c3RhcnRSZWFkYWJsZVN0cmVhbUFzeW5jKCkKK3sKKyAgICBSZWZQdHI8UmVhZGFibGVT
dHJlYW0+IHN0cmVhbSA9ICZtX3JlYWRhYmxlU3RyZWFtLT5pbXBsKCk7CisgICAgc3RyZWFtLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFtzdHJlYW1dKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmKSB7CisgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNS
ZWFkYWJsZVN0cmVhbSogcmVhZGFibGVTdHJlYW0pCit7CisgICAgbV9yZWFkYWJsZVN0cmVhbSA9
IHJlYWRhYmxlU3RyZWFtOworICAgIGlmICghbV9zb3VyY2UpIHsKKyAgICAgICAgc3RhcnRSZWFk
YWJsZVN0cmVhbUFzeW5jKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKKworICAgIGNyZWF0ZUpTRnVuY3Rpb25zKGV4ZWMpOworCisgICAg
SlNWYWx1ZSBzdGFydEZ1bmN0aW9uID0gZ2V0UHJvcGVydHlGcm9tT2JqZWN0KGV4ZWMsIG1fc291
cmNlLmdldCgpLCAic3RhcnQiKTsKKyAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigp
KSB7CisgICAgICAgIGlmICghc3RhcnRGdW5jdGlvbi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IlJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBwcm9wZXJ0eSBzaG91bGQg
YmUgYSBmdW5jdGlvbi4iKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFydFJlYWRh
YmxlU3RyZWFtQXN5bmMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1fZW5xdWV1ZUZ1
bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2xvc2VGdW5jdGlvbi5nZXQo
KSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChtX2Vycm9yRnVuY3Rpb24uZ2V0KCkpOworCisgICAg
SlNWYWx1ZSBleGNlcHRpb247CisgICAgY2FsbEZ1bmN0aW9uKGV4ZWMsIHN0YXJ0RnVuY3Rpb24s
IG1fc291cmNlLmdldCgpLCBhcmd1bWVudHMsICZleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2Vw
dGlvbikgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJvbWlz
ZSBhcyByZXN1bHQgb2YgY2FsbGluZyBzdGFydCBmdW5jdGlvbi4KKyAgICBzdGFydFJlYWRhYmxl
U3RyZWFtQXN5bmMoKTsKIH0KIAogUmVmPFJlYWRhYmxlSlNTdHJlYW0+IFJlYWRhYmxlSlNTdHJl
YW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4mJiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgKaW5kZXggZTBlYWQw
Mjg5NTIzZTE4YjVlMDJmY2ViZjA2YzUwOWQyZGZhYmVmMC4uYjEwZjIwN2Q2ZjI2ZmQ2OGRjNzli
NTk0NGI3ZDNhNDJjNDkxNjg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
PGhlYXAvU3Ryb25nLmg+CiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9Qcml2YXRlTmFtZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
IApAQCAtNTAsMTAgKzUxLDIyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlYWRhYmxlU3Ry
ZWFtSlNTb3VyY2U+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogICAgIH5SZWFkYWJsZVN0cmVh
bUpTU291cmNlKCkgeyB9CiAKLSAgICB2b2lkIHN0YXJ0KEpTQzo6RXhlY1N0YXRlKik7CisgICAg
dm9pZCBzdGFydChKU0M6OkV4ZWNTdGF0ZSosIEpTUmVhZGFibGVTdHJlYW0qKTsKIAogcHJpdmF0
ZToKICAgICBSZWFkYWJsZVN0cmVhbUpTU291cmNlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgdm9p
ZCBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMoKTsKKyAgICB2b2lkIGNyZWF0ZUpTRnVuY3Rpb25z
KEpTQzo6RXhlY1N0YXRlKik7CisKKyAgICBKU1JlYWRhYmxlU3RyZWFtKiBtX3JlYWRhYmxlU3Ry
ZWFtIHsgbnVsbHB0ciB9OworCisgICAgLy8gT2JqZWN0IHBhc3NlZCB0byBjb25zdHJ1Y3Rvci4K
KyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX3NvdXJjZTsKKworICAgIC8vIEZ1bmN0
aW9ucyBwYXNzZWQgYXMgcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBwYXNz
ZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4g
bV9lbnF1ZXVlRnVuY3Rpb247CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2Ns
b3NlRnVuY3Rpb247CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2Vycm9yRnVu
Y3Rpb247CiB9OwogCiBjbGFzcyBSZWFkYWJsZUpTU3RyZWFtOiBwdWJsaWMgUmVhZGFibGVTdHJl
YW0gewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDVhZTA5MjJiYjkyOWJlNTI0OTM5MWM1Y2IzNjkxM2E4OGJmZjY0MWMuLjkw
Njg3ZGQ0MTQxNzQ0YWZlN2E2NjdmODM1ZTY4ZWZkMmE1M2E2YTcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxNS0wNC0wMyBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlh
LmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisg
ICAgICAgIFtTdHJlYW1zIEFQSV0gU3VwcG9ydCB0aGUgc3RhcnQgZnVuY3Rpb24gcGFyYW1ldGVy
IGluIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyB0byBjaGVjayB0aGF0IHN0YXJ0IEpT
IGZ1bmN0aW9uIGlzIGNhbGxlZCwgY2FuIGNsb3NlIGEgc3RyZWFtIGFuZCBjYW4gdGhyb3cgZXJy
b3JzLgorCisgICAgICAgICogc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbDog
QWRkZWQuCisKIDIwMTUtMDQtMDIgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIFNjcm9sbGJhcnMgYXJlIGxlZnQgaW4gdGhlIHdyb25nIHBvc2l0
aW9uIHdoZW4gcmVzaXppbmcgYSBmaXhlZCBsYXlvdXQgdmlldwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMzNiMjE4MDkwN2EyNmUyZTVlMmFkNzdmYTdkOTVmMzVmOTMxZjM0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACisKK1BBU1MgUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJl
IGNhbGxlZCB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycyAKK1BBU1MgUmVhZGFibGVTdHJlYW0g
c3RhcnQgc2hvdWxkIGJlIGFibGUgdG8gdGhyb3cgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0
cnVjdG9yIHNob3VsZCBnZXQgYSBmdW5jdGlvbiBhcyBzdGFydCBhcmd1bWVudCAKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sIGIvTGF5
b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQx
ZTA0MDkzNjkxYzIxY2M5ODFlMTViM2Q5ODkxYzBjMjhjMTk5NjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKQEAgLTAsMCAr
MSw1NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzJz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMnPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordGVzdChmdW5jdGlvbigpCit7Cisg
ICAgdmFyIGlzU3RhcnRDYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIgc291cmNlID0KKyAgICB7IHN0
YXJ0OgorICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAg
ICAgIGFzc2VydF9lcXVhbHModGhpcywgc291cmNlKTsKKworICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyh0eXBlb2YgZW5xdWV1ZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1
YWxzKHR5cGVvZiBjbG9zZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxz
KHR5cGVvZiBlcnJvciwgJ2Z1bmN0aW9uJyk7CisKKyAgICAgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZW5xdWV1ZSksIFsnbmFtZScsICdsZW5n
dGgnXSk7CisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGNsb3NlKSwgWyduYW1lJywgJ2xlbmd0aCddKTsKKyAgICAgICAgICAgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLCBbJ25hbWUn
LCAnbGVuZ3RoJ10pOworCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVucXVldWUubmFtZSwg
JycpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjbG9zZS5uYW1lLCAnJyk7CisgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKGVycm9yLm5hbWUsICcnKTsKKworICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhlbnF1ZXVlLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNs
b3NlLmxlbmd0aCwgMCk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVycm9yLmxlbmd0aCwg
MSk7CisKKyAgICAgICAgICAgIGlzU3RhcnRDYWxsZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fTsKKyAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oc291cmNlKTsKKyAgICBhc3NlcnRf
dHJ1ZShpc1N0YXJ0Q2FsbGVkKTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUg
Y2FsbGVkIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzJyk7CisKK3Rlc3QoZnVuY3Rpb24oKQor
eworICAgIG1hc2hlZEVycm9yID0gbmV3IEVycm9yKCdwb3RhdG8nKTsKKyAgICBhc3NlcnRfdGhy
b3dzKG1hc2hlZEVycm9yLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJzID0gbmV3IFJlYWRh
YmxlU3RyZWFtKAorICAgICAgICB7IHN0YXJ0OgorICAgICAgICAgICAgZnVuY3Rpb24oZW5xdWV1
ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbWFzaGVkRXJyb3I7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfSwgJ1JlYWRhYmxlU3RyZWFtIHN0
YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHRocm93Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAg
YXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeworICAgICAgICBuZXcg
UmVhZGFibGVTdHJlYW0oeyBzdGFydDogJ3BvdGF0byd9KTsKKyAgICB9KTsKK30sICdSZWFkYWJs
ZVN0cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1l
bnQnKTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250131</attachid>
            <date>2015-04-04 10:35:46 -0700</date>
            <delta_ts>2015-04-04 10:42:43 -0700</delta_ts>
            <desc>Adding test, better init of m_source</desc>
            <filename>bug-141160-20150404193458.patch</filename>
            <type>text/plain</type>
            <size>16907</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1NmNhMjliYjk3ZGM2
YTAwNzA0NWFjNGY5ZDUzYTVlNjllY2IyYS4uZjUzMzlmYWJmZDczMmI4ZmU3YzQ4YzA1NzhlNDIz
ZTI2OWU1MjA2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE1LTA0LTA0ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyB0aHJlZSBKUyBmdW5jdGlvbnMgYXMgcGFyYW1ldGVyczogY2xvc2UsIGVucXVldWUgYW5k
IGVycm9yLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHN0b3JlZCBpbiBSZWFkYWJsZVN0
cmVhbUpTU291cmNlIGFzIHRoZXkgd2lsbCBiZQorICAgICAgICByZXVzZWQgYXMgInB1bGwiIHBh
cmFtZXRlcnMgKGNsb3NlIGFuZCBlbnF1ZXVlKSBvciBhcyBwYXJ0IG9mIGdsb2JhbCBwcm9taXNl
IHJlamVjdGlvbiAoZXJyb3IpLgorICAgICAgICBBbGwgdGhyZWUgSlMgZnVuY3Rpb25zIGRvIG5v
dCBjdXJyZW50bHkgZG8gYW55dGhpbmcuCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1zdGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KTogUGxh
Y2UgaG9sZGVyIGZvciBzdGVwIDExIG9mIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcv
I3JzLWNvbnN0cnVjdG9yLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpyZWFkYWJsZVN0cmVhbVNsb3ROYW1lKTogU2xvdCBuYW1lIHRvIHJldHJpZXZlIHRoZSBKU1Jl
YWRhYmxlU3RyZWFtIGZyb20gdGhlIEpTIGZ1bmN0aW9uIChlbnF1ZXVlLCBjbG9zZSBvciBlcnJv
cikuCisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3QpOiBIZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgICh5b3V0VGVzdHMvQ2hhbmdlTG9nV2ViQ29yZTo6Y2FsbEZ1bmN0aW9u
KTogSGVscGVyIGZ1bmN0aW9uIHRvIGNhbGwgYSBKUyBmdW5jdGlvbiBmcm9tIEMrKy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOiBT
aG91bGQgaW1wbGVtZW50IHRoZSBlbnF1ZXVlIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpT
IGZ1bmN0aW9uIGZvciBlbnF1ZXVlLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0
cmVhbUZ1bmN0aW9uKTogU2hvdWxkIGltcGxlbWVudCB0aGUgY2xvc2UgZnVuY3Rpb25hbGl0eS4K
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbik6IENy
ZWF0ZXMgdGhlIEpTIGZ1bmN0aW9uIGZvciBjbG9zZS4KKyAgICAgICAgKFdlYkNvcmU6OmVycm9y
UmVhZGFibGVTdHJlYW1GdW5jdGlvbik6IFNob3VsZCBpbXBsZW1lbnQgdGhlIGVycm9yIGZ1bmN0
aW9uYWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVu
Y3Rpb24pOiBDcmVhdGVzIHRoZSBKUyBmdW5jdGlvbiBmb3IgZXJyb3IuCisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjcmVhdGVKU0Z1bmN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5
bmMpOiBFcXVpdmFsZW50IG9mIHByb21pc2UgcmVzb2x1dGlvbiBmb3Igc3RhcnQuCisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydCk6IENhbGxzIHRoZSAic3Rh
cnQiIGZ1bmN0aW9uIG9mIHRoZSBKUyBzb3VyY2Ugd2l0aCBhbGwgdGhyZWUgSlMgZnVuY3Rpb25z
IChlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIGFzIHBhcmFtZXRlcnMuCisgICAgICAgICogYmluZGlu
Z3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oOgorCiAyMDE1LTA0LTAzICBaYW4gRG9iZXJz
ZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBNZWRpYURldmljZXMgcG9zc2Vz
c2VzIGEgdnRhYmxlIGRlc3BpdGUgdXNpbmcgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBJREwg
YXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmNwcAppbmRleCA2MGJhODM1YzVjYjY3OWY4NjlhZTE5YTUxNGFlYWE2MmE3YTFhYzQ0
Li40OWMxOGZiNTNkMjBlNDg2ZTViMzk0MzZkYzViZmI3YWY0ZDRlODFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAgLTU4LDYg
KzU4LDExIEBAIFJlYWRhYmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogI2VuZGlmCiB9CiAK
K3ZvaWQgUmVhZGFibGVTdHJlYW06OnN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCiBjb25zdCBjaGFyKiBSZWFkYWJsZVN0cmVhbTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuICJSZWFkYWJsZVN0cmVhbSI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IGExYzg0ZWQ2MWIzZmRlMWZm
MmRhNDM1NzMzOGExYmM5OWNkYTFmZDMuLjE0ZmJhNGM3ZTIyNDgyNTA5NDIzY2E0OTNjOThlOWQy
ZTM3ZGY1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbS5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlIGludGVybmFs
U3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAKKyAgICB2b2lkIHN0YXJ0KCk7CisKIHByb3Rl
Y3RlZDoKICAgICBSZWFkYWJsZVN0cmVhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmPFJl
YWRhYmxlU3RyZWFtU291cmNlPiYmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRleCA1ODFlNDM2M2ZkMTgwYjM3
YWUxOTgyOTY5OWIxZjJkZTQwMjY5YTcyLi5kOGIwNjgxMTYzZjcxNGMxYTJiNjNlNjVmMTY5ZWE5
ZGEwOGU2NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRh
YmxlU3RyZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
YWRhYmxlU3RyZWFtQ3VzdG9tLmNwcApAQCAtODcsNyArODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IEpTUmVh
ZGFibGVTdHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGdsb2JhbE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVh
ZGFibGVTdHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKLSAgICBzb3VyY2UtPnN0YXJ0KGV4ZWMp
OworICAgIHNvdXJjZS0+c3RhcnQoZXhlYywganNSZWFkYWJsZVN0cmVhbSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzUmVhZGFibGVTdHJlYW0pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAppbmRleCBj
NDk0ODZjZGFhNDBiM2E3MTU1MmY0MGE4NjM4NDFjNDk4ZTNmY2IzLi5kMjhhN2RmYjRhMGQ0YTM1
ZDljMDQxMDhhZWJlZTAyYmYwNDg0MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApAQCAtMjgsMTggKzI4LDIwIEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSlNT
b3VyY2UuaCIKIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNpbmNsdWRlICJSZWFkYWJsZVN0
cmVhbUpTU291cmNlLmgiCiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRl
ICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTYzLDYgKzY1LDI2IEBAIEpTVmFsdWUgZ2V0
SW50ZXJuYWxTbG90RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0VmFs
dWUsIFByaXZhdGVOCiAgICAgcmV0dXJuIHByb3BlcnR5U2xvdC5nZXRWYWx1ZShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogfQogCisvLyBUaGlzIHNsb3QgbmFtZSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBK
U1JlYWRhYmxlU3RyZWFtIGluIGNyZWF0ZWQgSlMgZnVuY3Rpb25zIChlbnF1ZXVlLCBjbG9zZS4u
LikuCisvLyBUaGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBjb3JyZXNwb25kaW5nIEpTUmVhZGFi
bGVTdHJlYW0gd2hlbiBleGVjdXRpbmcgdGhlIEpTIGZ1bmN0aW9uLgorc3RhdGljIEpTQzo6UHJp
dmF0ZU5hbWUmIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxKU0M6OlByaXZhdGVOYW1lPiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCJyZWFkYWJs
ZVN0cmVhbSIpOworICAgIHJldHVybiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4g
b2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBpZGVudGlmaWVy
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmd1bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK3sKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxE
YXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzLCBleGNlcHRpb24pOworfQorCiBSZWY8UmVhZGFibGVT
dHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRhYmxlU3RyZWFtSlNT
b3VyY2UoZXhlYykpOwpAQCAtNzAsMTUgKzkyLDk1IEBAIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291
cmNlPiBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
CiAKIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewotICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCksICJD
YWxsZXIgb2YgUmVhZGFibGVTdHJlYW1KU1NvdXJjZSBjb25zdHJ1Y3RvciBzaG91bGQgZW5zdXJl
IHRoYXQgcGFzc2VkIGFyZ3VtZW50IGlzIGFuIG9iamVjdC4iKTsKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBwYXJhbWV0ZXJzIHN1cHBvcnQ7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSB8fCBleGVjLT5hcmd1bWVudCgwKS5pc09iamVj
dCgpLCAiQ2FsbGVyIG9mIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UgY29uc3RydWN0b3Igc2hvdWxk
IGVuc3VyZSB0aGF0IHBhc3NlZCBhcmd1bWVudCBpZiBhbnkgaXMgYW4gb2JqZWN0LiIpOworICAg
IEpTT2JqZWN0KiBzb3VyY2UgPSAgZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1l
bnQoMCkuZ2V0T2JqZWN0KCk6IEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgMCwganNOdWxsKCksIDEpKTsK
KyAgICBtX3NvdXJjZS5zZXQoZXhlYy0+dm0oKSwgc291cmNlKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhl
Y1N0YXRlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3Jl
YXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLCAxLCBTdHJpbmcoKSwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24p
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjbG9zZVJlYWRhYmxl
U3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMCwgU3RyaW5nKCksIGNsb3NlUmVhZGFibGVT
dHJlYW1GdW5jdGlvbik7CiB9CiAKLXZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQo
SlNDOjpFeGVjU3RhdGUqKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJy
b3JSZWFkYWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitz
dGF0aWMgaW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIFN0cmluZygpLCBlcnJv
clJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U6OmNyZWF0ZUpTRnVuY3Rpb25zKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBtX2VucXVldWVG
dW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FbnF1ZXVlRnVuY3Rp
b24oZXhlYykpOworICAgIG1fY2xvc2VGdW5jdGlvbi5zZXQoZXhlYy0+dm0oKSwgY3JlYXRlUmVh
ZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKGV4ZWMpKTsKKyAgICBtX2Vycm9yRnVuY3Rpb24uc2V0
KGV4ZWMtPnZtKCksIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihleGVjKSk7CisK
KyAgICBzZXRJbnRlcm5hbFNsb3RUb09iamVjdChleGVjLCBtX2VucXVldWVGdW5jdGlvbi5nZXQo
KSwgcmVhZGFibGVTdHJlYW1TbG90TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFtKTsKKyAgICBzZXRJ
bnRlcm5hbFNsb3RUb09iamVjdChleGVjLCBtX2Nsb3NlRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxl
U3RyZWFtU2xvdE5hbWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7CisgICAgc2V0SW50ZXJuYWxTbG90
VG9PYmplY3QoZXhlYywgbV9lcnJvckZ1bmN0aW9uLmdldCgpLCByZWFkYWJsZVN0cmVhbVNsb3RO
YW1lKCksIG1fcmVhZGFibGVTdHJlYW0pOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2U6OnN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpCit7CisgICAgUmVmUHRyPFJlYWRhYmxlU3Ry
ZWFtPiBzdHJlYW0gPSAmbV9yZWFkYWJsZVN0cmVhbS0+aW1wbCgpOworICAgIHN0cmVhbS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbc3RyZWFtXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgeworICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTUmVh
ZGFibGVTdHJlYW0qIHJlYWRhYmxlU3RyZWFtKQoreworICAgIG1fcmVhZGFibGVTdHJlYW0gPSBy
ZWFkYWJsZVN0cmVhbTsKKworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgY3Jl
YXRlSlNGdW5jdGlvbnMoZXhlYyk7CisKKyAgICBKU1ZhbHVlIHN0YXJ0RnVuY3Rpb24gPSBnZXRQ
cm9wZXJ0eUZyb21PYmplY3QoZXhlYywgbV9zb3VyY2UuZ2V0KCksICJzdGFydCIpOworICAgIGlm
ICghc3RhcnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFzdGFydEZ1bmN0
aW9uLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Ig
b2JqZWN0IHN0YXJ0IHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uLiIpKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3VtZW50
cy5hcHBlbmQobV9jbG9zZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1f
ZXJyb3JGdW5jdGlvbi5nZXQoKSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBjYWxs
RnVuY3Rpb24oZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50cywg
JmV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIHRocm93Vk1FcnJv
cihleGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBoYW5kbGluZyBwcm9taXNlIGFzIHJlc3VsdCBvZiBjYWxsaW5nIHN0YXJ0
IGZ1bmN0aW9uLgorICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOwogfQogCiBSZWY8UmVh
ZGFibGVKU1N0cmVhbT4gUmVhZGFibGVKU1N0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNl
PiYmIHNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtSlNTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxl
U3RyZWFtSlNTb3VyY2UuaAppbmRleCBlMGVhZDAyODk1MjNlMThiNWUwMmZjZWJmMDZjNTA5ZDJk
ZmFiZWYwLi5iMTBmMjA3ZDZmMjZmZDY4ZGM3OWI1OTQ0YjdkM2E0MmM0OTE2ODhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5o
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRlIDxo
ZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL1ByaXZhdGVO
YW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCkBAIC01MCwxMCArNTEsMjIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gY3JlYXRlKEpTQzo6RXhl
Y1N0YXRlKik7CiAgICAgflJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoKSB7IH0KIAotICAgIHZvaWQg
c3RhcnQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHN0YXJ0KEpTQzo6RXhlY1N0YXRlKiwg
SlNSZWFkYWJsZVN0cmVhbSopOwogCiBwcml2YXRlOgogICAgIFJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygp
OworICAgIHZvaWQgY3JlYXRlSlNGdW5jdGlvbnMoSlNDOjpFeGVjU3RhdGUqKTsKKworICAgIEpT
UmVhZGFibGVTdHJlYW0qIG1fcmVhZGFibGVTdHJlYW0geyBudWxscHRyIH07CisKKyAgICAvLyBP
YmplY3QgcGFzc2VkIHRvIGNvbnN0cnVjdG9yLgorICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+IG1fc291cmNlOworCisgICAgLy8gRnVuY3Rpb25zIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIHdo
ZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25zIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU0Z1bmN0aW9uPiBtX2VucXVldWVGdW5jdGlvbjsKKyAgICBKU0M6
OlN0cm9uZzxKU0M6OkpTRnVuY3Rpb24+IG1fY2xvc2VGdW5jdGlvbjsKKyAgICBKU0M6OlN0cm9u
ZzxKU0M6OkpTRnVuY3Rpb24+IG1fZXJyb3JGdW5jdGlvbjsKIH07CiAKIGNsYXNzIFJlYWRhYmxl
SlNTdHJlYW06IHB1YmxpYyBSZWFkYWJsZVN0cmVhbSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDE0Yzc3YWU1MDg1ZDgz
OWMxZmQ1OTljYWI4NmNmNmRlNDQzMGE2OC4uYmFhZmY1MWIyMzAzYjk4ODQ3OTk1Yjc1ZWU5YzM0
MWQ5ODdjYmQ2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTAzIFhhYmllciBSb2Ry
aWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCA8eW91
ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBTdXBwb3J0
IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0gY29uc3RydWN0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE2
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHRlc3RzIHRvIGNoZWNrIHRoYXQgc3RhcnQgSlMgZnVuY3Rpb24gaXMgY2FsbGVkLCBjYW4gY2xv
c2UgYSBzdHJlYW0gYW5kIGNhbiB0aHJvdyBlcnJvcnMuCisKKyAgICAgICAgKiBzdHJlYW1zL3Jl
YWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wMyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2ZpeGVkLWxh
eW91dC9maXhlZC1sYXlvdXQuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvc3Ry
ZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCmluZGV4IDQ0YTUwOTZkNDY2NjE1
ZmMzMjllMDQzMWU1MzAwNmRhN2EzMmNjOTcuLmJiMDA1NDVjM2FiZGE2MzJkYjkzOTgwYzJkZTJm
YWU5ZTJmNmIxNDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJl
YW0tY29uc3RydWN0b3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3Ry
ZWFtLWNvbnN0cnVjdG9yLmh0bWwKQEAgLTcsNiArNywxMyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewog
ICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKICAgICAgICAg
bmV3IFJlYWRhYmxlU3RyZWFtKCdwb3RhdG8nKTsKICAgICB9KTsKKyAgICB2YXIgeAorICAgIGFz
c2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJl
YWRhYmxlU3RyZWFtKHgpOworICAgIH0pOworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJv
cigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKG51bGwpOworICAg
IH0pOwogfSwgJ1JlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYW4gb2JqZWN0
IGFzIGFyZ3VtZW50Jyk7CiAKIHRlc3QoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIxYjllZGE2NjdiYmE2OTg1YzZkMWY5OWVmNjg4YzcxYzE3MTY1ODMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDYgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUg
Y2FsbGVkIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBz
aG91bGQgYmUgYWJsZSB0byBjYWxsIHN0YXJ0IG1ldGhvZCB3aXRoaW4gcHJvdG90eXBlIGNoYWlu
IG9mIGl0cyBzb3VyY2UgCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxl
IHRvIHRocm93IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEg
ZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVh
ZGFibGVzdHJlYW0tc3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDRiMzU5YzQ5YWFjOGNiOWEzMTBh
YjE5YzU5ZmMzMDc5MWRiOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzJz48L3Njcmlw
dD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBpc1N0YXJ0Q2FsbGVk
ID0gZmFsc2U7CisgICAgdmFyIHNvdXJjZSA9CisgICAgeyBzdGFydDoKKyAgICAgICAgZnVuY3Rp
b24oZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHRo
aXMsIHNvdXJjZSk7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVucXVldWUs
ICdmdW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgY2xvc2UsICdm
dW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZXJyb3IsICdmdW5j
dGlvbicpOworCisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGVucXVldWUpLCBbJ25hbWUnLCAnbGVuZ3RoJ10pOworICAgICAgICAgICAg
YXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjbG9zZSksIFsn
bmFtZScsICdsZW5ndGgnXSk7CisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSwgWyduYW1lJywgJ2xlbmd0aCddKTsKKworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhlbnF1ZXVlLm5hbWUsICcnKTsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMoY2xvc2UubmFtZSwgJycpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhl
cnJvci5uYW1lLCAnJyk7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW5xdWV1ZS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjbG9zZS5sZW5ndGgsIDApOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhlcnJvci5sZW5ndGgsIDEpOworCisgICAgICAgICAgICBp
c1N0YXJ0Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIHJzID0gbmV3
IFJlYWRhYmxlU3RyZWFtKHNvdXJjZSk7CisgICAgYXNzZXJ0X3RydWUoaXNTdGFydENhbGxlZCk7
Cit9LCAnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBwcm9w
ZXIgcGFyYW1ldGVycycpOworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgaXNTdGFydENh
bGxlZCA9IGZhbHNlOworICAgIFNpbXBsZVN0cmVhbVNvdXJjZSA9IGZ1bmN0aW9uKCkgeyB9Owor
ICAgIFNpbXBsZVN0cmVhbVNvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbigpIHsgaXNT
dGFydENhbGxlZCA9IHRydWU7IH07CisgICAgU2ltcGxlU3RyZWFtU291cmNlLnByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IFNpbXBsZVN0cmVhbVNvdXJjZTsKKworICAgIHZhciBycyA9IG5ldyBSZWFk
YWJsZVN0cmVhbShuZXcgU2ltcGxlU3RyZWFtU291cmNlKCkpOworICAgIGFzc2VydF90cnVlKGlz
U3RhcnRDYWxsZWQpOworfSwgJ1JlYWRhYmxlU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvIGNhbGwg
c3RhcnQgbWV0aG9kIHdpdGhpbiBwcm90b3R5cGUgY2hhaW4gb2YgaXRzIHNvdXJjZScpOworCit0
ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICBtYXNoZWRFcnJvciA9IG5ldyBFcnJvcigncG90YXRvJyk7
CisgICAgYXNzZXJ0X3Rocm93cyhtYXNoZWRFcnJvciwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSgKKyAgICAgICAgeyBzdGFydDoKKyAgICAgICAgICAg
IGZ1bmN0aW9uKGVucXVldWUsIGNsb3NlLCBlcnJvcikgeworICAgICAgICAgICAgICAgIHRocm93
IG1hc2hlZEVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30sICdS
ZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byB0aHJvdycpOworCit0ZXN0KGZ1
bmN0aW9uKCkgeworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsgc3RhcnQ6ICdwb3RhdG8nfSk7CisgICAg
fSk7Cit9LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxkIGdldCBhIGZ1bmN0aW9u
IGFzIHN0YXJ0IGFyZ3VtZW50Jyk7CisKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250132</attachid>
            <date>2015-04-04 10:42:55 -0700</date>
            <delta_ts>2015-04-06 06:43:47 -0700</delta_ts>
            <desc>Adding test, better init of m_source</desc>
            <filename>bug-141160-20150404194207.patch</filename>
            <type>text/plain</type>
            <size>16693</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1NmNhMjliYjk3ZGM2
YTAwNzA0NWFjNGY5ZDUzYTVlNjllY2IyYS4uOWE1MmE4NDcwNmMwMTBlY2U5ODY1ZWM1MzcyNDA2
YzllMWI5OGI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE1LTA0LTA0ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyB0aHJlZSBKUyBmdW5jdGlvbnMgYXMgcGFyYW1ldGVyczogY2xvc2UsIGVucXVldWUgYW5k
IGVycm9yLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHN0b3JlZCBpbiBSZWFkYWJsZVN0
cmVhbUpTU291cmNlIGFzIHRoZXkgd2lsbCBiZQorICAgICAgICByZXVzZWQgYXMgInB1bGwiIHBh
cmFtZXRlcnMgKGNsb3NlIGFuZCBlbnF1ZXVlKSBvciBhcyBwYXJ0IG9mIGdsb2JhbCBwcm9taXNl
IHJlamVjdGlvbiAoZXJyb3IpLgorICAgICAgICBBbGwgdGhyZWUgSlMgZnVuY3Rpb25zIGRvIG5v
dCBjdXJyZW50bHkgZG8gYW55dGhpbmcuCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFkYWJs
ZXN0cmVhbS1zdGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KTogUGxh
Y2UgaG9sZGVyIGZvciBzdGVwIDExIG9mIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcv
I3JzLWNvbnN0cnVjdG9yLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpyZWFkYWJsZVN0cmVhbVNsb3ROYW1lKTogU2xvdCBuYW1lIHRvIHJldHJpZXZlIHRoZSBKU1Jl
YWRhYmxlU3RyZWFtIGZyb20gdGhlIEpTIGZ1bmN0aW9uIChlbnF1ZXVlLCBjbG9zZSBvciBlcnJv
cikuCisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3QpOiBIZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgICh5b3V0VGVzdHMvQ2hhbmdlTG9nV2ViQ29yZTo6Y2FsbEZ1bmN0aW9u
KTogSGVscGVyIGZ1bmN0aW9uIHRvIGNhbGwgYSBKUyBmdW5jdGlvbiBmcm9tIEMrKy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24pOiBT
aG91bGQgaW1wbGVtZW50IHRoZSBlbnF1ZXVlIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpT
IGZ1bmN0aW9uIGZvciBlbnF1ZXVlLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VSZWFkYWJsZVN0
cmVhbUZ1bmN0aW9uKTogU2hvdWxkIGltcGxlbWVudCB0aGUgY2xvc2UgZnVuY3Rpb25hbGl0eS4K
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtQ2xvc2VGdW5jdGlvbik6IENy
ZWF0ZXMgdGhlIEpTIGZ1bmN0aW9uIGZvciBjbG9zZS4KKyAgICAgICAgKFdlYkNvcmU6OmVycm9y
UmVhZGFibGVTdHJlYW1GdW5jdGlvbik6IFNob3VsZCBpbXBsZW1lbnQgdGhlIGVycm9yIGZ1bmN0
aW9uYWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9yRnVu
Y3Rpb24pOiBDcmVhdGVzIHRoZSBKUyBmdW5jdGlvbiBmb3IgZXJyb3IuCisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMpOiBF
cXVpdmFsZW50IG9mIHByb21pc2UgcmVzb2x1dGlvbiBmb3Igc3RhcnQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpzdGFydCk6IENhbGxzIHRoZSAic3RhcnQiIGZ1
bmN0aW9uIG9mIHRoZSBKUyBzb3VyY2Ugd2l0aCBhbGwgdGhyZWUgSlMgZnVuY3Rpb25zIChlbnF1
ZXVlLCBjbG9zZSwgZXJyb3IpIGFzIHBhcmFtZXRlcnMuCisgICAgICAgICogYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oOgorCiAyMDE1LTA0LTAzICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBNZWRpYURldmljZXMgcG9zc2Vzc2VzIGEg
dnRhYmxlIGRlc3BpdGUgdXNpbmcgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBJREwgYXR0cmli
dXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
LmNwcAppbmRleCA2MGJhODM1YzVjYjY3OWY4NjlhZTE5YTUxNGFlYWE2MmE3YTFhYzQ0Li40OWMx
OGZiNTNkMjBlNDg2ZTViMzk0MzZkYzViZmI3YWY0ZDRlODFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5jcHAKQEAgLTU4LDYgKzU4LDEx
IEBAIFJlYWRhYmxlU3RyZWFtOjp+UmVhZGFibGVTdHJlYW0oKQogI2VuZGlmCiB9CiAKK3ZvaWQg
UmVhZGFibGVTdHJlYW06OnN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBj
b25zdCBjaGFyKiBSZWFkYWJsZVN0cmVhbTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICJSZWFkYWJsZVN0cmVhbSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5oCmluZGV4IGExYzg0ZWQ2MWIzZmRlMWZmMmRhNDM1
NzMzOGExYmM5OWNkYTFmZDMuLjE0ZmJhNGM3ZTIyNDgyNTA5NDIzY2E0OTNjOThlOWQyZTM3ZGY1
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVh
bS5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlIGludGVybmFsU3RhdGUo
KSB7IHJldHVybiBtX3N0YXRlOyB9CiAKKyAgICB2b2lkIHN0YXJ0KCk7CisKIHByb3RlY3RlZDoK
ICAgICBSZWFkYWJsZVN0cmVhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmPFJlYWRhYmxl
U3RyZWFtU291cmNlPiYmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlYWRhYmxlU3RyZWFtQ3VzdG9tLmNwcAppbmRleCA1ODFlNDM2M2ZkMTgwYjM3YWUxOTgy
OTY5OWIxZjJkZTQwMjY5YTcyLi5kOGIwNjgxMTYzZjcxNGMxYTJiNjNlNjVmMTY5ZWE5ZGEwOGU2
NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3Ry
ZWFtQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxl
U3RyZWFtQ3VzdG9tLmNwcApAQCAtODcsNyArODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTUmVhZGFibGVTdHJlYW0oRXhlY1N0YXRlKiBleGVjKQogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCk7CiAgICAgSlNSZWFkYWJsZVN0cmVhbSoganNSZWFkYWJsZVN0cmVhbSA9IEpTUmVhZGFibGVT
dHJlYW06OmNyZWF0ZShKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpKSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgcmVhZGFibGVT
dHJlYW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKLSAgICBzb3VyY2UtPnN0YXJ0KGV4ZWMpOworICAg
IHNvdXJjZS0+c3RhcnQoZXhlYywganNSZWFkYWJsZVN0cmVhbSk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzUmVhZGFibGVTdHJlYW0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAppbmRleCBjNDk0ODZj
ZGFhNDBiM2E3MTU1MmY0MGE4NjM4NDFjNDk4ZTNmY2IzLi5lY2QyMGQ2N2UyYjlhNGNjOGQ0YjQ3
MWRkODUxYzcxOWJkZDA5YmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNlLmNwcApAQCAtMjgsMTggKzI4LDIwIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSlNTb3VyY2Uu
aCIKIAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUpT
U291cmNlLmgiCiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJKU0RP
TVByb21pc2UuaCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTYzLDYgKzY1LDI2IEBAIEpTVmFsdWUgZ2V0SW50ZXJu
YWxTbG90RnJvbU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb2JqZWN0VmFsdWUsIFBy
aXZhdGVOCiAgICAgcmV0dXJuIHByb3BlcnR5U2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpOwogfQogCisvLyBUaGlzIHNsb3QgbmFtZSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBKU1JlYWRh
YmxlU3RyZWFtIGluIGNyZWF0ZWQgSlMgZnVuY3Rpb25zIChlbnF1ZXVlLCBjbG9zZS4uLikuCisv
LyBUaGlzIGFsbG93cyByZXRyaWV2aW5nIHRoZSBjb3JyZXNwb25kaW5nIEpTUmVhZGFibGVTdHJl
YW0gd2hlbiBleGVjdXRpbmcgdGhlIEpTIGZ1bmN0aW9uLgorc3RhdGljIEpTQzo6UHJpdmF0ZU5h
bWUmIHJlYWRhYmxlU3RyZWFtU2xvdE5hbWUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxKU0M6OlByaXZhdGVOYW1lPiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCJyZWFkYWJsZVN0cmVh
bSIpOworICAgIHJldHVybiByZWFkYWJsZVN0cmVhbVNsb3ROYW1lOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgZ2V0UHJvcGVydHlGcm9tT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgY2hhciogaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gb2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBpZGVudGlmaWVyKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGpzRnVuY3Rpb24sIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmd1
bWVudHMsIEpTVmFsdWUqIGV4Y2VwdGlvbikKK3sKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsK
KyAgICByZXR1cm4gY2FsbChleGVjLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJndW1lbnRzLCBleGNlcHRpb24pOworfQorCiBSZWY8UmVhZGFibGVTdHJlYW1K
U1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2Uo
ZXhlYykpOwpAQCAtNzAsMTUgKzkyLDg5IEBAIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNlPiBS
ZWFkYWJsZVN0cmVhbUpTU291cmNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAKIFJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewotICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCksICJDYWxsZXIg
b2YgUmVhZGFibGVTdHJlYW1KU1NvdXJjZSBjb25zdHJ1Y3RvciBzaG91bGQgZW5zdXJlIHRoYXQg
cGFzc2VkIGFyZ3VtZW50IGlzIGFuIG9iamVjdC4iKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBwYXJhbWV0ZXJzIHN1cHBvcnQ7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSB8fCBleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpLCAi
Q2FsbGVyIG9mIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UgY29uc3RydWN0b3Igc2hvdWxkIGVuc3Vy
ZSB0aGF0IHBhc3NlZCBhcmd1bWVudCBpZiBhbnkgaXMgYW4gb2JqZWN0LiIpOworICAgIEpTT2Jq
ZWN0KiBzb3VyY2UgPSAgZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCku
Z2V0T2JqZWN0KCk6IEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBKU0ZpbmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgMCwganNOdWxsKCksIDEpKTsKKyAgICBt
X3NvdXJjZS5zZXQoZXhlYy0+dm0oKSwgc291cmNlKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZW5xdWV1ZVJlYWRhYmxlU3RyZWFtRnVuY3Rpb24oRXhlY1N0YXRl
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLXZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQo
SlNDOjpFeGVjU3RhdGUqKQorc3RhdGljIGlubGluZSBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJs
ZVN0cmVhbUVucXVldWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCksIDEsIFN0cmluZygpLCBlbnF1ZXVlUmVhZGFibGVTdHJlYW1GdW5jdGlvbik7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNsb3NlUmVhZGFibGVTdHJlYW1GdW5j
dGlvbihFeGVjU3RhdGUqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGlubGluZSBKU0Z1bmN0
aW9uKiBjcmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLCAwLCBTdHJpbmcoKSwgY2xvc2VSZWFkYWJsZVN0cmVhbUZ1bmN0
aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JSZWFk
YWJsZVN0cmVhbUZ1bmN0aW9uKEV4ZWNTdGF0ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMg
aW5saW5lIEpTRnVuY3Rpb24qIGNyZWF0ZVJlYWRhYmxlU3RyZWFtRXJyb3JGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgp
LCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIFN0cmluZygpLCBlcnJvclJlYWRh
YmxlU3RyZWFtRnVuY3Rpb24pOworfQorCit2b2lkIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OnN0
YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpCit7CisgICAgUmVmUHRyPFJlYWRhYmxlU3RyZWFtPiBz
dHJlYW0gPSAmbV9yZWFkYWJsZVN0cmVhbS0+aW1wbCgpOworICAgIHN0cmVhbS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbc3RyZWFtXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeworICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVhZGFi
bGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTUmVhZGFibGVT
dHJlYW0qIHJlYWRhYmxlU3RyZWFtKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwor
CisgICAgbV9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOworICAgIG1fZW5xdWV1ZUZ1
bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlv
bihleGVjKSk7CisgICAgbV9jbG9zZUZ1bmN0aW9uLnNldChleGVjLT52bSgpLCBjcmVhdGVSZWFk
YWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oZXhlYykpOworICAgIG1fZXJyb3JGdW5jdGlvbi5zZXQo
ZXhlYy0+dm0oKSwgY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKGV4ZWMpKTsKKwor
ICAgIHNldEludGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fZW5xdWV1ZUZ1bmN0aW9uLmdldCgp
LCByZWFkYWJsZVN0cmVhbVNsb3ROYW1lKCksIG1fcmVhZGFibGVTdHJlYW0pOworICAgIHNldElu
dGVybmFsU2xvdFRvT2JqZWN0KGV4ZWMsIG1fY2xvc2VGdW5jdGlvbi5nZXQoKSwgcmVhZGFibGVT
dHJlYW1TbG90TmFtZSgpLCBtX3JlYWRhYmxlU3RyZWFtKTsKKyAgICBzZXRJbnRlcm5hbFNsb3RU
b09iamVjdChleGVjLCBtX2Vycm9yRnVuY3Rpb24uZ2V0KCksIHJlYWRhYmxlU3RyZWFtU2xvdE5h
bWUoKSwgbV9yZWFkYWJsZVN0cmVhbSk7CisKKyAgICBKU1ZhbHVlIHN0YXJ0RnVuY3Rpb24gPSBn
ZXRQcm9wZXJ0eUZyb21PYmplY3QoZXhlYywgbV9zb3VyY2UuZ2V0KCksICJzdGFydCIpOworICAg
IGlmICghc3RhcnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFzdGFydEZ1
bmN0aW9uLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVhZGFibGVTdHJlYW0gY29uc3RydWN0
b3Igb2JqZWN0IHN0YXJ0IHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uLiIpKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9lbnF1ZXVlRnVuY3Rpb24uZ2V0KCkpOworICAgIGFyZ3Vt
ZW50cy5hcHBlbmQobV9jbG9zZUZ1bmN0aW9uLmdldCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KG1fZXJyb3JGdW5jdGlvbi5nZXQoKSk7CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBj
YWxsRnVuY3Rpb24oZXhlYywgc3RhcnRGdW5jdGlvbiwgbV9zb3VyY2UuZ2V0KCksIGFyZ3VtZW50
cywgJmV4Y2VwdGlvbik7CisKKyAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgIHRocm93Vk1F
cnJvcihleGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBwcm9taXNlIGFzIHJlc3VsdCBvZiBjYWxsaW5nIHN0
YXJ0IGZ1bmN0aW9uLgorICAgIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3luYygpOwogfQogCiBSZWY8
UmVhZGFibGVKU1N0cmVhbT4gUmVhZGFibGVKU1N0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291
cmNlPiYmIHNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtSlNTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtSlNTb3VyY2UuaAppbmRleCBlMGVhZDAyODk1MjNlMThiNWUwMmZjZWJmMDZjNTA5
ZDJkZmFiZWYwLi5mYjFjOTRhMTc3MDQ2ODNlYjg4NGY4ODZiNzQ0NjMwNTdkZmUyODYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbUpTU291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJj
ZS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRl
IDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL1ByaXZh
dGVOYW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogCkBAIC01MCwxMCArNTEsMjEgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8UmVhZGFibGVTdHJlYW1KU1NvdXJjZT4gY3JlYXRlKEpTQzo6
RXhlY1N0YXRlKik7CiAgICAgflJlYWRhYmxlU3RyZWFtSlNTb3VyY2UoKSB7IH0KIAotICAgIHZv
aWQgc3RhcnQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHN0YXJ0KEpTQzo6RXhlY1N0YXRl
KiwgSlNSZWFkYWJsZVN0cmVhbSopOwogCiBwcml2YXRlOgogICAgIFJlYWRhYmxlU3RyZWFtSlNT
b3VyY2UoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHN0YXJ0UmVhZGFibGVTdHJlYW1Bc3lu
YygpOworCisgICAgSlNSZWFkYWJsZVN0cmVhbSogbV9yZWFkYWJsZVN0cmVhbSB7IG51bGxwdHIg
fTsKKworICAgIC8vIE9iamVjdCBwYXNzZWQgdG8gY29uc3RydWN0b3IuCisgICAgSlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4gbV9zb3VyY2U7CisKKyAgICAvLyBGdW5jdGlvbnMgcGFzc2VkIGFz
IHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgcGFzc2VkIGluIHRoZSBjb25z
dHJ1Y3Rvci4KKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTRnVuY3Rpb24+IG1fZW5xdWV1ZUZ1bmN0
aW9uOworICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9jbG9zZUZ1bmN0aW9uOwor
ICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNGdW5jdGlvbj4gbV9lcnJvckZ1bmN0aW9uOwogfTsKIAog
Y2xhc3MgUmVhZGFibGVKU1N0cmVhbTogcHVibGljIFJlYWRhYmxlU3RyZWFtIHsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0
MTRjNzdhZTUwODVkODM5YzFmZDU5OWNhYjg2Y2Y2ZGU0NDMwYTY4Li5iYWFmZjUxYjIzMDNiOTg4
NDc5OTViNzVlZTljMzQxZDk4N2NiZDZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDQt
MDMgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vl
bm4gRmFibGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBbU3RyZWFt
cyBBUEldIFN1cHBvcnQgdGhlIHN0YXJ0IGZ1bmN0aW9uIHBhcmFtZXRlciBpbiBSZWFkYWJsZVN0
cmVhbSBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxMTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgdGVzdHMgdG8gY2hlY2sgdGhhdCBzdGFydCBKUyBmdW5jdGlvbiBpcyBj
YWxsZWQsIGNhbiBjbG9zZSBhIHN0cmVhbSBhbmQgY2FuIHRocm93IGVycm9ycy4KKworICAgICAg
ICAqIHN0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWw6IEFkZGVkLgorCiAyMDE1
LTA0LTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IGZhc3QvZml4ZWQtbGF5b3V0L2ZpeGVkLWxheW91dC5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwgYi9M
YXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLWNvbnN0cnVjdG9yLmh0bWwKaW5kZXgg
NDRhNTA5NmQ0NjY2MTVmYzMyOWUwNDMxZTUzMDA2ZGE3YTMyY2M5Ny4uYmIwMDU0NWMzYWJkYTYz
MmRiOTM5ODBjMmRlMmZhZTllMmY2YjE0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVh
bXMvcmVhZGFibGVzdHJlYW0tY29uc3RydWN0b3IuaHRtbApAQCAtNyw2ICs3LDEzIEBAIHRlc3Qo
ZnVuY3Rpb24oKSB7CiAgICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9u
KCkgewogICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW0oJ3BvdGF0bycpOwogICAgIH0pOworICAg
IHZhciB4CisgICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgewor
ICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW0oeCk7CisgICAgfSk7CisgICAgYXNzZXJ0X3Rocm93
cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeworICAgICAgICBuZXcgUmVhZGFibGVTdHJl
YW0obnVsbCk7CisgICAgfSk7CiB9LCAnUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3Igc2hvdWxk
IGdldCBhbiBvYmplY3QgYXMgYXJndW1lbnQnKTsKIAogdGVzdChmdW5jdGlvbigpIHsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjFiOWVkYTY2N2JiYTY5ODVjNmQxZjk5ZWY2ODhjNzFjMTcxNjU4Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3Rh
cnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0
YXJ0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMgCitQQVNTIFJl
YWRhYmxlU3RyZWFtIHNob3VsZCBiZSBhYmxlIHRvIGNhbGwgc3RhcnQgbWV0aG9kIHdpdGhpbiBw
cm90b3R5cGUgY2hhaW4gb2YgaXRzIHNvdXJjZSAKK1BBU1MgUmVhZGFibGVTdHJlYW0gc3RhcnQg
c2hvdWxkIGJlIGFibGUgdG8gdGhyb3cgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9y
IHNob3VsZCBnZXQgYSBmdW5jdGlvbiBhcyBzdGFydCBhcmd1bWVudCAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkNGIzNTlj
NDlhYWM4Y2I5YTMxMGFiMTljNTlmYzMwNzkxZGI5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0Lmh0bWwKQEAgLTAsMCArMSw2NyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzJz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPScuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMnPjwvc2NyaXB0PgorPHNjcmlwdD4KKwordGVzdChmdW5jdGlvbigpCit7CisgICAgdmFy
IGlzU3RhcnRDYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIgc291cmNlID0KKyAgICB7IHN0YXJ0Ogor
ICAgICAgICBmdW5jdGlvbihlbnF1ZXVlLCBjbG9zZSwgZXJyb3IpIHsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHModGhpcywgc291cmNlKTsKKworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0
eXBlb2YgZW5xdWV1ZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHR5
cGVvZiBjbG9zZSwgJ2Z1bmN0aW9uJyk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVv
ZiBlcnJvciwgJ2Z1bmN0aW9uJyk7CisKKyAgICAgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMo
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZW5xdWV1ZSksIFsnbmFtZScsICdsZW5ndGgnXSk7
CisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzKGNsb3NlKSwgWyduYW1lJywgJ2xlbmd0aCddKTsKKyAgICAgICAgICAgIGFzc2VydF9hcnJh
eV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLCBbJ25hbWUnLCAnbGVu
Z3RoJ10pOworCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVucXVldWUubmFtZSwgJycpOwor
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjbG9zZS5uYW1lLCAnJyk7CisgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKGVycm9yLm5hbWUsICcnKTsKKworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhlbnF1ZXVlLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNsb3NlLmxl
bmd0aCwgMCk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVycm9yLmxlbmd0aCwgMSk7CisK
KyAgICAgICAgICAgIGlzU3RhcnRDYWxsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAg
ICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oc291cmNlKTsKKyAgICBhc3NlcnRfdHJ1ZShp
c1N0YXJ0Q2FsbGVkKTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgY2FsbGVk
IHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzJyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAg
IHZhciBpc1N0YXJ0Q2FsbGVkID0gZmFsc2U7CisgICAgU2ltcGxlU3RyZWFtU291cmNlID0gZnVu
Y3Rpb24oKSB7IH07CisgICAgU2ltcGxlU3RyZWFtU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1
bmN0aW9uKCkgeyBpc1N0YXJ0Q2FsbGVkID0gdHJ1ZTsgfTsKKyAgICBTaW1wbGVTdHJlYW1Tb3Vy
Y2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2ltcGxlU3RyZWFtU291cmNlOworCisgICAgdmFy
IHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKG5ldyBTaW1wbGVTdHJlYW1Tb3VyY2UoKSk7CisgICAg
YXNzZXJ0X3RydWUoaXNTdGFydENhbGxlZCk7Cit9LCAnUmVhZGFibGVTdHJlYW0gc2hvdWxkIGJl
IGFibGUgdG8gY2FsbCBzdGFydCBtZXRob2Qgd2l0aGluIHByb3RvdHlwZSBjaGFpbiBvZiBpdHMg
c291cmNlJyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIG1hc2hlZEVycm9yID0gbmV3IEVy
cm9yKCdwb3RhdG8nKTsKKyAgICBhc3NlcnRfdGhyb3dzKG1hc2hlZEVycm9yLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKAorICAgICAgICB7IHN0YXJ0
OgorICAgICAgICAgICAgZnVuY3Rpb24oZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgbWFzaGVkRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgIH0pOworfSwgJ1JlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHRocm93
Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9y
KCksIGZ1bmN0aW9uKCkgeworICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyBzdGFydDogJ3Bv
dGF0byd9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQg
Z2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQnKTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250201</attachid>
            <date>2015-04-06 06:43:57 -0700</date>
            <delta_ts>2015-04-08 23:49:13 -0700</delta_ts>
            <desc>Introducing controller</desc>
            <filename>bug-141160-20150406154308.patch</filename>
            <type>text/plain</type>
            <size>16375</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1NmNhMjliYjk3ZGM2
YTAwNzA0NWFjNGY5ZDUzYTVlNjllY2IyYS4uYTcxZWFjNzJjMzhkMTBlMWJmZDYxYWY5YzY5YmRk
YjkzMWZkYjc3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA0LTA0ICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJ
XSBTdXBwb3J0IHRoZSBzdGFydCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0g
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTE2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFN0b3JlcyB0aGUgSlMgc291cmNlIG9iamVjdCBpbiBSZWFkYWJsZVN0cmVhbUpTU291cmNl
IGFuZCBjYWxscyBpdHMgInN0YXJ0IiBmdW5jdGlvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyBhIGNvbnRyb2xsZXIgb2JqZWN0IHRoYXQgaGFzIHRocmVlIEpTIGZ1bmN0aW9ucyBhcyBt
ZW1iZXJzOiBjbG9zZSwgZW5xdWV1ZSBhbmQgZXJyb3IuCisgICAgICAgIFRoaXMgY29udHJvbGxl
ciBpcyBzdG9yZWQgaW4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZSBhcyBpdCB3aWxsIGJlIHJldXNl
ZCBhcyAicHVsbCIgcGFyYW1ldGVyLgorICAgICAgICBBbGwgdGhyZWUgSlMgZnVuY3Rpb25zIGRv
IG5vdCBjdXJyZW50bHkgZG8gYW55dGhpbmcuCisKKyAgICAgICAgVGVzdDogc3RyZWFtcy9yZWFk
YWJsZXN0cmVhbS1zdGFydC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW06OnN0YXJ0KTog
UGxhY2UgaG9sZGVyIGZvciBzdGVwIDExIG9mIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5v
cmcvI3JzLWNvbnN0cnVjdG9yLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNSZWFkYWJsZVN0cmVhbSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQcm9wZXJ0eUZyb21PYmplY3QpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGEgcHVi
bGljIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6c2V0UHJvcGVy
dHlUb09iamVjdCk6IEhlbHBlciBmdW5jdGlvbiB0byBzZXQgYSBwdWJsaWMgcHJvcGVydHkgdG8g
YW4gb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEZ1bmN0aW9uKTogSGVscGVyIGZ1bmN0
aW9uIHRvIGNhbGwgYSBKUyBmdW5jdGlvbiBmcm9tIEMrKy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U6OlJlYWRhYmxlU3RyZWFtSlNTb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6bm90SW1wbGVtZW50ZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbik6IENyZWF0ZXMgdGhlIEpTIGZ1bmN0aW9u
IGZvciBlbnF1ZXVlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1DbG9z
ZUZ1bmN0aW9uKTogQ3JlYXRlcyB0aGUgSlMgZnVuY3Rpb24gZm9yIGNsb3NlLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0aW9uKTogQ3JlYXRlcyB0aGUg
SlMgZnVuY3Rpb24gZm9yIGVycm9yLgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRSZWFkYWJsZVN0
cmVhbUFzeW5jKTogRXF1aXZhbGVudCBvZiBwcm9taXNlIHJlc29sdXRpb24gZm9yIHN0YXJ0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQpOiBDYWxscyB0
aGUgInN0YXJ0IiBmdW5jdGlvbiBvZiB0aGUgSlMgc291cmNlIHdpdGggYWxsIHRocmVlIEpTIGZ1
bmN0aW9ucyAoZW5xdWV1ZSwgY2xvc2UsIGVycm9yKSBhcyBwYXJhbWV0ZXJzLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuaDoKKwogMjAxNS0wNC0wMyAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWVkaWFEZXZpY2Vz
IHBvc3Nlc3NlcyBhIHZ0YWJsZSBkZXNwaXRlIHVzaW5nIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUgSURMIGF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggNjBiYTgzNWM1Y2I2NzlmODY5YWUxOWE1MTRhZWFhNjJh
N2ExYWM0NC4uNDljMThmYjUzZDIwZTQ4NmU1YjM5NDM2ZGM1YmZiN2FmNGQ0ZTgxZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uY3BwCkBA
IC01OCw2ICs1OCwxMSBAQCBSZWFkYWJsZVN0cmVhbTo6flJlYWRhYmxlU3RyZWFtKCkKICNlbmRp
ZgogfQogCit2b2lkIFJlYWRhYmxlU3RyZWFtOjpzdGFydCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwogY29uc3QgY2hhciogUmVhZGFibGVTdHJlYW06OmFjdGl2ZURPTU9iamVjdE5h
bWUoKSBjb25zdAogewogICAgIHJldHVybiAiUmVhZGFibGVTdHJlYW0iOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uaAppbmRleCBhMWM4NGVkNjFi
M2ZkZTFmZjJkYTQzNTczMzhhMWJjOTljZGExZmQzLi4xNGZiYTRjN2UyMjQ4MjUwOTQyM2NhNDkz
Yzk4ZTlkMmUzN2RmNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvUmVhZGFibGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMv
UmVhZGFibGVTdHJlYW0uaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAKICAgICBTdGF0ZSBp
bnRlcm5hbFN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQogCisgICAgdm9pZCBzdGFydCgpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgUmVhZGFibGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IFJlZjxSZWFkYWJsZVN0cmVhbVNvdXJjZT4mJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVhZGFibGVTdHJlYW1DdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKaW5kZXggNTgxZTQzNjNm
ZDE4MGIzN2FlMTk4Mjk2OTliMWYyZGU0MDI2OWE3Mi4uZDhiMDY4MTE2M2Y3MTRjMWEyYjYzZTY1
ZjE2OWVhOWRhMDhlNjVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZWFkYWJsZVN0cmVhbUN1c3RvbS5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1JlYWRhYmxlU3RyZWFtKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpOwogICAgIEpTUmVhZGFibGVTdHJlYW0qIGpzUmVhZGFibGVTdHJlYW0g
PSBKU1JlYWRhYmxlU3RyZWFtOjpjcmVhdGUoSlNSZWFkYWJsZVN0cmVhbTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTUmVhZGFibGVTdHJlYW06OmNyZWF0ZVByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCksIHJlYWRhYmxlU3RyZWFtLnJlbGVhc2VOb25OdWxsKCkpOwogCi0gICAgc291cmNlLT5zdGFy
dChleGVjKTsKKyAgICBzb3VyY2UtPnN0YXJ0KGV4ZWMsIGpzUmVhZGFibGVTdHJlYW0pOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1JlYWRhYmxlU3RyZWFtKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtSlNTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAK
aW5kZXggYzQ5NDg2Y2RhYTQwYjNhNzE1NTJmNDBhODYzODQxYzQ5OGUzZmNiMy4uNmY5ZDdiYTc5
ZmU0MTljNWU1MjJkNGFmM2FkOTc3YjgzZjVkOTExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5jcHAKQEAgLTI4LDE0ICsy
OCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFkYWJsZVN0
cmVhbUpTU291cmNlLmgiCiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0jaW5jbHVkZSAiUmVh
ZGFibGVTdHJlYW1KU1NvdXJjZS5oIgogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAj
aW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpAQCAtNjMs
NiArNjQsMjUgQEAgSlNWYWx1ZSBnZXRJbnRlcm5hbFNsb3RGcm9tT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBvYmplY3RWYWx1ZSwgUHJpdmF0ZU4KICAgICByZXR1cm4gcHJvcGVydHlT
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBnZXRQcm9wZXJ0eUZyb21PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCBjb25zdCBjaGFyKiBpZGVudGlmaWVyKQoreworICAgIHJldHVybiBvYmplY3QtPmdldChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXIpKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIHNldFByb3BlcnR5VG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIG9iamVjdFZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBvYmplY3RWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBQdXRQ
cm9wZXJ0eVNsb3QgcHJvcGVydHlTbG90KG9iamVjdFZhbHVlKTsKKyAgICBvYmplY3QtPnB1dChv
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbmFtZSksIHZhbHVlLCBw
cm9wZXJ0eVNsb3QpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgY2FsbEZ1bmN0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJndW1lbnRzLCBKU1ZhbHVlKiBleGNlcHRpb24pCit7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShqc0Z1bmN0
aW9uLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKK30KKwogUmVm
PFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U+IFJlYWRhYmxlU3RyZWFtSlNTb3VyY2U6OmNyZWF0ZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkYWJs
ZVN0cmVhbUpTU291cmNlKGV4ZWMpKTsKQEAgLTcwLDE1ICs5MCw4MSBAQCBSZWY8UmVhZGFibGVT
dHJlYW1KU1NvdXJjZT4gUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQogCiBSZWFkYWJsZVN0cmVhbUpTU291cmNlOjpSZWFkYWJsZVN0cmVhbUpTU291
cmNlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpLCAiQ2FsbGVyIG9mIFJlYWRhYmxlU3RyZWFtSlNTb3VyY2UgY29uc3RydWN0b3Igc2hv
dWxkIGVuc3VyZSB0aGF0IHBhc3NlZCBhcmd1bWVudCBpcyBhbiBvYmplY3QuIik7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFyYW1ldGVycyBzdXBwb3J0OwotICAgIH0KKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFleGVjLT5hcmd1bWVudENvdW50KCkgfHwgZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSwgIkNhbGxlciBvZiBSZWFkYWJsZVN0cmVhbUpTU291cmNlIGNvbnN0cnVj
dG9yIHNob3VsZCBlbnN1cmUgdGhhdCBwYXNzZWQgYXJndW1lbnQgaWYgYW55IGlzIGFuIG9iamVj
dC4iKTsKKyAgICBKU09iamVjdCogc291cmNlID0gIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4
ZWMtPmFyZ3VtZW50KDApLmdldE9iamVjdCgpIDogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCBleGVjLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpLCAxKSk7CisgICAgbV9zb3VyY2Uuc2V0
KGV4ZWMtPnZtKCksIHNvdXJjZSk7CiB9CiAKLXZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6
c3RhcnQoSlNDOjpFeGVjU3RhdGUqKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbm90SW1wbGVtZW50ZWRGdW5jdGlvbihFeGVjU3RhdGUqKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU0Z1bmN0aW9uKiBjcmVhdGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksIDEsIFN0cmluZygpLCBu
b3RJbXBsZW1lbnRlZEZ1bmN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBKU0Z1bmN0aW9uKiBj
cmVhdGVSZWFkYWJsZVN0cmVhbUNsb3NlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLCAwLCBTdHJpbmcoKSwgbm90SW1wbGVtZW50ZWRGdW5jdGlvbik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNGdW5jdGlvbiogY3JlYXRlUmVhZGFibGVTdHJlYW1FcnJvckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgMSwgU3RyaW5nKCksIG5v
dEltcGxlbWVudGVkRnVuY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCBzdGFydFJlYWRhYmxlU3Ry
ZWFtQXN5bmMoUmVhZGFibGVTdHJlYW0mIHJlYWRhYmxlU3RyZWFtKQoreworICAgIFJlZlB0cjxS
ZWFkYWJsZVN0cmVhbT4gc3RyZWFtID0gJnJlYWRhYmxlU3RyZWFtOworICAgIHN0cmVhbS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbc3RyZWFtXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgeworICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNPYmplY3QqIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBlbnF1ZXVlRnVuY3Rpb24gPSBjcmVh
dGVSZWFkYWJsZVN0cmVhbUVucXVldWVGdW5jdGlvbihleGVjKTsKKyAgICBKU0Z1bmN0aW9uKiBj
bG9zZUZ1bmN0aW9uID0gY3JlYXRlUmVhZGFibGVTdHJlYW1DbG9zZUZ1bmN0aW9uKGV4ZWMpOwor
ICAgIEpTRnVuY3Rpb24qIGVycm9yRnVuY3Rpb24gPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUVycm9y
RnVuY3Rpb24oZXhlYyk7CisKKyAgICBKU09iamVjdCogY29udHJvbGxlciA9ICBKU0ZpbmFsT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwganNOdWxsKCksIDMpKTsK
KyAgICBzZXRQcm9wZXJ0eVRvT2JqZWN0KGV4ZWMsIGNvbnRyb2xsZXIsICJlbnF1ZXVlIiwgZW5x
dWV1ZUZ1bmN0aW9uKTsKKyAgICBzZXRQcm9wZXJ0eVRvT2JqZWN0KGV4ZWMsIGNvbnRyb2xsZXIs
ICJjbG9zZSIsIGNsb3NlRnVuY3Rpb24pOworICAgIHNldFByb3BlcnR5VG9PYmplY3QoZXhlYywg
Y29udHJvbGxlciwgImVycm9yIiwgZXJyb3JGdW5jdGlvbik7CisgICAgcmV0dXJuIGNvbnRyb2xs
ZXI7Cit9CisKK3ZvaWQgUmVhZGFibGVTdHJlYW1KU1NvdXJjZTo6c3RhcnQoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTUmVhZGFibGVTdHJlYW0qIHJlYWRhYmxlU3RyZWFtKQoreworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgbV9jb250cm9sbGVyLnNldChleGVjLT52bSgpLCBj
cmVhdGVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIoZXhlYykpOworCisgICAgSlNWYWx1ZSBzdGFy
dEZ1bmN0aW9uID0gZ2V0UHJvcGVydHlGcm9tT2JqZWN0KGV4ZWMsIG1fc291cmNlLmdldCgpLCAi
c3RhcnQiKTsKKyAgICBpZiAoIXN0YXJ0RnVuY3Rpb24uaXNGdW5jdGlvbigpKSB7CisgICAgICAg
IGlmICghc3RhcnRGdW5jdGlvbi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlJlYWRhYmxlU3Ry
ZWFtIGNvbnN0cnVjdG9yIG9iamVjdCBzdGFydCBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlv
bi4iKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5
bmMocmVhZGFibGVTdHJlYW0tPmltcGwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgYXJndW1lbnRzLmFwcGVuZCht
X2NvbnRyb2xsZXIuZ2V0KCkpOworCisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgY2FsbEZ1
bmN0aW9uKGV4ZWMsIHN0YXJ0RnVuY3Rpb24sIG1fc291cmNlLmdldCgpLCBhcmd1bWVudHMsICZl
eGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICB0aHJvd1ZNRXJyb3Io
ZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgaGFuZGxpbmcgcHJvbWlzZSBhcyByZXN1bHQgb2YgY2FsbGluZyBzdGFydCBm
dW5jdGlvbi4KKyAgICBzdGFydFJlYWRhYmxlU3RyZWFtQXN5bmMocmVhZGFibGVTdHJlYW0tPmlt
cGwoKSk7CiB9CiAKIFJlZjxSZWFkYWJsZUpTU3RyZWFtPiBSZWFkYWJsZUpTU3RyZWFtOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJl
YWRhYmxlU3RyZWFtSlNTb3VyY2U+JiYgc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1KU1NvdXJjZS5oCmluZGV4IGUwZWFkMDI4OTUyM2Ux
OGI1ZTAyZmNlYmYwNmM1MDlkMmRmYWJlZjAuLjQ3ODUxMGJhOTcwOWRmZmJhNzJhMWEzNjBjNGZm
YmE0OTljYjk3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtSlNTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFk
YWJsZVN0cmVhbUpTU291cmNlLmgKQEAgLTUwLDEwICs1MCwxNSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxSZWFkYWJsZVN0cmVhbUpTU291cmNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqKTsK
ICAgICB+UmVhZGFibGVTdHJlYW1KU1NvdXJjZSgpIHsgfQogCi0gICAgdm9pZCBzdGFydChKU0M6
OkV4ZWNTdGF0ZSopOworICAgIHZvaWQgc3RhcnQoSlNDOjpFeGVjU3RhdGUqLCBKU1JlYWRhYmxl
U3RyZWFtKik7CiAKIHByaXZhdGU6CiAgICAgUmVhZGFibGVTdHJlYW1KU1NvdXJjZShKU0M6OkV4
ZWNTdGF0ZSopOworCisgICAgLy8gT2JqZWN0IHBhc3NlZCB0byBjb25zdHJ1Y3Rvci4KKyAgICBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX3NvdXJjZTsKKworICAgIEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+IG1fY29udHJvbGxlcjsKIH07CiAKIGNsYXNzIFJlYWRhYmxlSlNTdHJlYW06
IHB1YmxpYyBSZWFkYWJsZVN0cmVhbSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDE0Yzc3YWU1MDg1ZDgzOWMxZmQ1OTlj
YWI4NmNmNmRlNDQzMGE2OC4uYTlhOWFmZWQyNTczODM0MzQ4ODVlMTYzNGM5NzdlMTJjMzhkYjdl
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTA0IFhhYmllciBSb2RyaWd1ZXogQ2Fs
dmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCA8eW91ZW5uLmZhYmxl
dEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBTdXBwb3J0IHRoZSBzdGFy
dCBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE2MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIHRv
IGNoZWNrIHRoYXQgc3RhcnQgSlMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHJpZ2h0IHBh
cmFtZXRlcnMgYW5kIGNhbiB0aHJvdyBlcnJvcnMuCisKKyAgICAgICAgKiBzdHJlYW1zL3JlYWRh
Ymxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RyZWFtcy9y
ZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wMyAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2ZpeGVkLWxheW91
dC9maXhlZC1sYXlvdXQuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Ry
ZWFtcy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWFkYWJsZXN0cmVhbS1jb25zdHJ1Y3Rvci5odG1sCmluZGV4IDQ0YTUwOTZkNDY2NjE1ZmMz
MjllMDQzMWU1MzAwNmRhN2EzMmNjOTcuLmJiMDA1NDVjM2FiZGE2MzJkYjkzOTgwYzJkZTJmYWU5
ZTJmNmIxNDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0t
Y29uc3RydWN0b3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFt
LWNvbnN0cnVjdG9yLmh0bWwKQEAgLTcsNiArNywxMyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICAg
IGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKICAgICAgICAgbmV3
IFJlYWRhYmxlU3RyZWFtKCdwb3RhdG8nKTsKICAgICB9KTsKKyAgICB2YXIgeAorICAgIGFzc2Vy
dF90aHJvd3MobmV3IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRh
YmxlU3RyZWFtKHgpOworICAgIH0pOworICAgIGFzc2VydF90aHJvd3MobmV3IFR5cGVFcnJvcigp
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKG51bGwpOworICAgIH0p
OwogfSwgJ1JlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHNob3VsZCBnZXQgYW4gb2JqZWN0IGFz
IGFyZ3VtZW50Jyk7CiAKIHRlc3QoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVh
MmQ5YjM4YjU2YmFmN2E2ODNmN2FhMDIyZGVmM2MxMzY0NWU2NDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlYWRhYmxlc3RyZWFtLXN0YXJ0LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDcgQEAKKworUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgY2Fs
bGVkIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBzdGFy
dCBjb250cm9sbGVyIHBhcmFtZXRlciBzaG91bGQgYmUgdXBkYXRhYmxlIAorUEFTUyBSZWFkYWJs
ZVN0cmVhbSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIHN0YXJ0IG1ldGhvZCB3aXRoaW4gcHJvdG90
eXBlIGNoYWluIG9mIGl0cyBzb3VyY2UgCitQQVNTIFJlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3Vs
ZCBiZSBhYmxlIHRvIHRocm93IAorUEFTUyBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBzaG91
bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQgCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0
cmVhbXMvcmVhZGFibGVzdHJlYW0tc3RhcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGU2Mjk4ZWIzZDJi
MzJkN2RkMDVmZDc2NjQ3YTQ2YWM2YjliY2ViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWFkYWJsZXN0cmVhbS1zdGFydC5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPHNjcmlwdCBzcmM9Jy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyc+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Jz48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBpc1N0
YXJ0Q2FsbGVkID0gZmFsc2U7CisgICAgdmFyIHNvdXJjZSA9CisgICAgeyBzdGFydDoKKyAgICAg
ICAgZnVuY3Rpb24oY29udHJvbGxlcikgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0aGlz
LCBzb3VyY2UpOworCisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRP
d25Qcm9wZXJ0eU5hbWVzKGNvbnRyb2xsZXIpLCBbJ2VucXVldWUnLCAnY2xvc2UnLCAnZXJyb3In
XSk7CisKKyAgICAgICAgICAgIGVucXVldWUgPSBjb250cm9sbGVyLmVucXVldWU7CisgICAgICAg
ICAgICBjbG9zZSA9IGNvbnRyb2xsZXIuY2xvc2U7CisgICAgICAgICAgICBlcnJvciA9IGNvbnRy
b2xsZXIuZXJyb3I7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGVucXVldWUs
ICdmdW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgY2xvc2UsICdm
dW5jdGlvbicpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZXJyb3IsICdmdW5j
dGlvbicpOworCisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGVucXVldWUpLCBbJ25hbWUnLCAnbGVuZ3RoJ10pOworICAgICAgICAgICAg
YXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjbG9zZSksIFsn
bmFtZScsICdsZW5ndGgnXSk7CisgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSwgWyduYW1lJywgJ2xlbmd0aCddKTsKKworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhlbnF1ZXVlLm5hbWUsICcnKTsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMoY2xvc2UubmFtZSwgJycpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhl
cnJvci5uYW1lLCAnJyk7CisKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW5xdWV1ZS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjbG9zZS5sZW5ndGgsIDApOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhlcnJvci5sZW5ndGgsIDEpOworCisgICAgICAgICAgICBp
c1N0YXJ0Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIHJzID0gbmV3
IFJlYWRhYmxlU3RyZWFtKHNvdXJjZSk7CisgICAgYXNzZXJ0X3RydWUoaXNTdGFydENhbGxlZCk7
Cit9LCAnUmVhZGFibGVTdHJlYW0gc3RhcnQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBwcm9w
ZXIgcGFyYW1ldGVycycpOworCit0ZXN0KGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgaXNTdGFydENh
bGxlZCA9IGZhbHNlOworICAgIHZhciBzb3VyY2UgPQorICAgIHsgc3RhcnQ6CisgICAgICAgIGZ1
bmN0aW9uKGNvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXMoY29udHJvbGxlciksIFsnZW5xdWV1ZScsICdjbG9zZScs
ICdlcnJvciddKTsKKyAgICAgICAgICAgIGNvbnRyb2xsZXIudGVzdCA9ICIiOworICAgICAgICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjb250cm9s
bGVyKSwgWydlbnF1ZXVlJywgJ2Nsb3NlJywgJ2Vycm9yJywgJ3Rlc3QnXSk7CisKKyAgICAgICAg
ICAgIGlzU3RhcnRDYWxsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfTsKKyAgICB2YXIgcnMg
PSBuZXcgUmVhZGFibGVTdHJlYW0oc291cmNlKTsKKyAgICBhc3NlcnRfdHJ1ZShpc1N0YXJ0Q2Fs
bGVkKTsKK30sICdSZWFkYWJsZVN0cmVhbSBzdGFydCBjb250cm9sbGVyIHBhcmFtZXRlciBzaG91
bGQgYmUgdXBkYXRhYmxlJyk7CisKK3Rlc3QoZnVuY3Rpb24oKQoreworICAgIHZhciBpc1N0YXJ0
Q2FsbGVkID0gZmFsc2U7CisgICAgU2ltcGxlU3RyZWFtU291cmNlID0gZnVuY3Rpb24oKSB7IH07
CisgICAgU2ltcGxlU3RyZWFtU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkgeyBp
c1N0YXJ0Q2FsbGVkID0gdHJ1ZTsgfTsKKyAgICBTaW1wbGVTdHJlYW1Tb3VyY2UucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gU2ltcGxlU3RyZWFtU291cmNlOworCisgICAgdmFyIHJzID0gbmV3IFJl
YWRhYmxlU3RyZWFtKG5ldyBTaW1wbGVTdHJlYW1Tb3VyY2UoKSk7CisgICAgYXNzZXJ0X3RydWUo
aXNTdGFydENhbGxlZCk7Cit9LCAnUmVhZGFibGVTdHJlYW0gc2hvdWxkIGJlIGFibGUgdG8gY2Fs
bCBzdGFydCBtZXRob2Qgd2l0aGluIHByb3RvdHlwZSBjaGFpbiBvZiBpdHMgc291cmNlJyk7CisK
K3Rlc3QoZnVuY3Rpb24oKQoreworICAgIG1hc2hlZEVycm9yID0gbmV3IEVycm9yKCdwb3RhdG8n
KTsKKyAgICBhc3NlcnRfdGhyb3dzKG1hc2hlZEVycm9yLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKAorICAgICAgICB7IHN0YXJ0OgorICAgICAgICAg
ICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbWFzaGVkRXJyb3I7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfSwgJ1JlYWRhYmxlU3RyZWFtIHN0YXJ0
IHNob3VsZCBiZSBhYmxlIHRvIHRocm93Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgYXNz
ZXJ0X3Rocm93cyhuZXcgVHlwZUVycm9yKCksIGZ1bmN0aW9uKCkgeworICAgICAgICBuZXcgUmVh
ZGFibGVTdHJlYW0oeyBzdGFydDogJ3BvdGF0byd9KTsKKyAgICB9KTsKK30sICdSZWFkYWJsZVN0
cmVhbSBjb25zdHJ1Y3RvciBzaG91bGQgZ2V0IGEgZnVuY3Rpb24gYXMgc3RhcnQgYXJndW1lbnQn
KTsKKworPC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>