<?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>25151</bug_id>
          
          <creation_ts>2009-04-12 16:35:10 -0700</creation_ts>
          <short_desc>workers that fail to load scripts not firing error event</short_desc>
          <delta_ts>2009-07-15 16:18:19 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>27282</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="jason a">jarbon</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>jianli</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117276</commentid>
    <comment_count>0</comment_count>
    <who name="jason a">jarbon</who>
    <bug_when>2009-04-12 16:35:10 -0700</bug_when>
    <thetext>worker js files with syntax errors do not throw exception when worker is created or message is posted to worker.

Expected: exception during construction and/or onerror when message is posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117441</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-14 02:28:01 -0700</bug_when>
    <thetext>Exception during construction is definitely not possible - the constructor just starts a network load, and returns before the script is available.

What does the spec say about this situation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128000</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-24 14:15:24 -0700</bug_when>
    <thetext>Here is what the spec says:

---
Attempt to fetch the resource identified by url.
If the attempt fails, or if the attempt involves any redirects to URIs that do not have the same origin as url (even if the final URI is at the same origin as the original url), then for each Worker or SharedWorker object associated with worker global scope, queue a task to fire a simple event called error at that object. 
---

There is also a description on how exactly to fire this event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130585</commentid>
    <comment_count>3</comment_count>
      <attachid>32493</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-08 17:42:09 -0700</bug_when>
    <thetext>Created attachment 32493
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131714</commentid>
    <comment_count>4</comment_count>
      <attachid>32493</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-14 15:45:09 -0700</bug_when>
    <thetext>Comment on attachment 32493
Proposed Patch

Just a few things to address/clarify.  Thanks.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +2009-07-08  Jian Li  &lt;jianli@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 25151 - workers with syntax errors not firing error event.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=25151
&gt; +
&gt; +        This fixes the problem that an error event is not fired when failed

Consider this wording:

  This fixes the problem that an error event is not fired when the worker script
  fails to load.  Some reasons this may occur are an invalid URL for the worker 
  script, a cross-origin redirect, or a syntax error in the script.


Another problem is this changelog doesn&apos;t say much about why things were done.  When I
first looked at the patch I thought another issue was being fixed but some items were moved
around.  Function level comments in the changelog would be helpful here.

&gt; diff --git a/WebCore/bindings/js/JSWorkerConstructor.cpp b/WebCore/bindings/js/JSWorkerConstructor.cpp
&gt; -    ExceptionCode ec = 0;
&gt; -    RefPtr&lt;Worker&gt; worker = Worker::create(scriptURL, window-&gt;document(), ec);
&gt; -    setDOMException(exec, ec);
&gt; +    RefPtr&lt;Worker&gt; worker = Worker::create(scriptURL, window-&gt;document());

Why is it ok to stop setting the dom exception?


&gt; diff --git a/WebCore/bindings/v8/custom/V8WorkerCustom.cpp b/WebCore/bindings/v8/custom/V8WorkerCustom.cpp
&gt; -    ExceptionCode ec = 0;
&gt; -    RefPtr&lt;Worker&gt; obj = Worker::create(toWebCoreString(scriptUrl), context, ec);
&gt; -
&gt; -    if (ec)
&gt; -        return throwError(ec);
&gt; +    RefPtr&lt;Worker&gt; obj = Worker::create(toWebCoreString(scriptUrl), context);

Same question as above (but here it is throwError).

&gt; diff --git a/WebCore/workers/WorkerMessagingProxy.cpp b/WebCore/workers/WorkerMessagingProxy.cpp

&gt;      virtual void performTask(ScriptExecutionContext* context)
&gt;      {
&gt; -        if (!m_messagingProxy-&gt;askedToTerminate())
&gt; -            context-&gt;reportException(m_errorMessage, m_lineNumber, m_sourceURL);
&gt; +        Worker* workerObject = m_messagingProxy-&gt;workerObject();
&gt; +        if (!workerObject || m_messagingProxy-&gt;askedToTerminate())
&gt; +            return;
&gt; +
&gt; +        context-&gt;reportException(m_errorMessage, m_lineNumber, m_sourceURL);
&gt; +        workerObject-&gt;dispatchErrorEvent();

This changes the behavior for more than just the case that you&apos;re fixing.  Any code that calls ScriptExecutionContext-&gt;reportException will get this behavior.  Why is that the correct thing to do?

Also, is there a chromium change corresponding to this?

&gt; diff --git a/WebCore/workers/WorkerMessagingProxy.h b/WebCore/workers/WorkerMessagingProxy.h
&gt; namespace WebCore {
...
&gt; +        friend class WorkerExceptionTask;

Why is this being added here?

&gt; diff --git a/WebCore/workers/WorkerScriptLoader.cpp b/WebCore/workers/WorkerScriptLoader.cpp
&gt; +void WorkerScriptLoader::loadSynchronously(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy)
...
&gt; +    CrossOriginRedirectPolicy crossOriginRedirectPolicy = (crossOriginLoadPolicy == DenyCrossOriginLoad) ? DenyCrossOriginRedirect : AllowCrossOriginRedirect;
    
&gt; +void WorkerScriptLoader::loadAsynchronously(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy, WorkerScriptLoaderClient* client)
...
&gt; +    CrossOriginRedirectPolicy crossOriginRedirectPolicy = (crossOriginLoadPolicy == DenyCrossOriginLoad) ? DenyCrossOriginRedirect : AllowCrossOriginRedirect;

It would be nice to only have one place that does the conversion of CrossOriginLoadPolicy to CrossOriginRedirectPolicy.  Right now there are two in this file.

&gt; +ResourceRequest* WorkerScriptLoader::createResourceRequest(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy)

This should return a PassOwnPtr&lt;ResourceRequest&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131751</commentid>
    <comment_count>5</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-14 17:05:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 32493 [details])
&gt; Just a few things to address/clarify.  Thanks.
&gt; 
&gt; &gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; &gt; +2009-07-08  Jian Li  &lt;jianli@chromium.org&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Bug 25151 - workers with syntax errors not firing error event.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=25151
&gt; &gt; +
&gt; &gt; +        This fixes the problem that an error event is not fired when failed
&gt; 
&gt; Consider this wording:
&gt; 
&gt;   This fixes the problem that an error event is not fired when the worker
&gt; script
&gt;   fails to load.  Some reasons this may occur are an invalid URL for the worker 
&gt;   script, a cross-origin redirect, or a syntax error in the script.
&gt; 
&gt; 
&gt; Another problem is this changelog doesn&apos;t say much about why things were done. 
&gt; When I
&gt; first looked at the patch I thought another issue was being fixed but some
&gt; items were moved
&gt; around.  Function level comments in the changelog would be helpful here.
&gt; 
Updated.

&gt; &gt; diff --git a/WebCore/bindings/js/JSWorkerConstructor.cpp b/WebCore/bindings/js/JSWorkerConstructor.cpp
&gt; &gt; -    ExceptionCode ec = 0;
&gt; &gt; -    RefPtr&lt;Worker&gt; worker = Worker::create(scriptURL, window-&gt;document(), ec);
&gt; &gt; -    setDOMException(exec, ec);
&gt; &gt; +    RefPtr&lt;Worker&gt; worker = Worker::create(scriptURL, window-&gt;document());
&gt; 
&gt; Why is it ok to stop setting the dom exception?
&gt; 
This is because the worker constructor will never return an exception code to indicate a DOM exception.
&gt; 
&gt; &gt; diff --git a/WebCore/bindings/v8/custom/V8WorkerCustom.cpp b/WebCore/bindings/v8/custom/V8WorkerCustom.cpp
&gt; &gt; -    ExceptionCode ec = 0;
&gt; &gt; -    RefPtr&lt;Worker&gt; obj = Worker::create(toWebCoreString(scriptUrl), context, ec);
&gt; &gt; -
&gt; &gt; -    if (ec)
&gt; &gt; -        return throwError(ec);
&gt; &gt; +    RefPtr&lt;Worker&gt; obj = Worker::create(toWebCoreString(scriptUrl), context);
&gt; 
&gt; Same question as above (but here it is throwError).

This is because the worker constructor will never return an exception code to indicate a DOM exception.
&gt; 
&gt; &gt; diff --git a/WebCore/workers/WorkerMessagingProxy.cpp b/WebCore/workers/WorkerMessagingProxy.cpp
&gt; 
&gt; &gt;      virtual void performTask(ScriptExecutionContext* context)
&gt; &gt;      {
&gt; &gt; -        if (!m_messagingProxy-&gt;askedToTerminate())
&gt; &gt; -            context-&gt;reportException(m_errorMessage, m_lineNumber, m_sourceURL);
&gt; &gt; +        Worker* workerObject = m_messagingProxy-&gt;workerObject();
&gt; &gt; +        if (!workerObject || m_messagingProxy-&gt;askedToTerminate())
&gt; &gt; +            return;
&gt; &gt; +
&gt; &gt; +        context-&gt;reportException(m_errorMessage, m_lineNumber, m_sourceURL);
&gt; &gt; +        workerObject-&gt;dispatchErrorEvent();
&gt; 
&gt; This changes the behavior for more than just the case that you&apos;re fixing.  Any
&gt; code that calls ScriptExecutionContext-&gt;reportException will get this behavior.
&gt;  Why is that the correct thing to do?
&gt; 
This indeed fixes a bug here. Previously we only called &quot;context-&gt;reportException(...)&quot; that only reported an exception to the ScriptExecutionContext that put the error message in the console. We need to also call onerror event handler of the worker object.

&gt; Also, is there a chromium change corresponding to this?
&gt; 
Yes, I will have another patch for corresponding chromium change for review after I land this.

&gt; &gt; diff --git a/WebCore/workers/WorkerMessagingProxy.h b/WebCore/workers/WorkerMessagingProxy.h
&gt; &gt; namespace WebCore {
&gt; ...
&gt; &gt; +        friend class WorkerExceptionTask;
&gt; 
&gt; Why is this being added here?

This is because WorkerExceptionTask::performTask needs to access private function WorkerMessagingProxy::workerObject.
&gt; 
&gt; &gt; diff --git a/WebCore/workers/WorkerScriptLoader.cpp b/WebCore/workers/WorkerScriptLoader.cpp
&gt; &gt; +void WorkerScriptLoader::loadSynchronously(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy)
&gt; ...
&gt; &gt; +    CrossOriginRedirectPolicy crossOriginRedirectPolicy = (crossOriginLoadPolicy == DenyCrossOriginLoad) ? DenyCrossOriginRedirect : AllowCrossOriginRedirect;
&gt; 
&gt; &gt; +void WorkerScriptLoader::loadAsynchronously(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy, WorkerScriptLoaderClient* client)
&gt; ...
&gt; &gt; +    CrossOriginRedirectPolicy crossOriginRedirectPolicy = (crossOriginLoadPolicy == DenyCrossOriginLoad) ? DenyCrossOriginRedirect : AllowCrossOriginRedirect;
&gt; 
&gt; It would be nice to only have one place that does the conversion of
&gt; CrossOriginLoadPolicy to CrossOriginRedirectPolicy.  Right now there are two in
&gt; this file.

Fixed.
&gt; 
&gt; &gt; +ResourceRequest* WorkerScriptLoader::createResourceRequest(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, URLCompletionPolicy urlCompletionPolicy, CrossOriginLoadPolicy crossOriginLoadPolicy)
&gt; 
&gt; This should return a PassOwnPtr&lt;ResourceRequest&gt;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131753</commentid>
    <comment_count>6</comment_count>
      <attachid>32747</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-14 17:06:20 -0700</bug_when>
    <thetext>Created attachment 32747
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131755</commentid>
    <comment_count>7</comment_count>
      <attachid>32749</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-14 17:07:10 -0700</bug_when>
    <thetext>Created attachment 32749
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132041</commentid>
    <comment_count>8</comment_count>
      <attachid>32814</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-15 14:33:42 -0700</bug_when>
    <thetext>Created attachment 32814
Proposed Patch

Uploaded a new pacth per discussion with levin. Removed the handling of syntax error in the script from this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132048</commentid>
    <comment_count>9</comment_count>
      <attachid>32814</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-15 14:55:30 -0700</bug_when>
    <thetext>Comment on attachment 32814
Proposed Patch

Looks good.

Please file a bug about the error not being fired on WorkerContext when there is a syntax error in the script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132077</commentid>
    <comment_count>10</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-07-15 16:18:19 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/45958</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32493</attachid>
            <date>2009-07-08 17:42:09 -0700</date>
            <delta_ts>2009-07-14 17:06:20 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25151</filename>
            <type>text/plain</type>
            <size>25347</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNTdhMzZiLi5jMGE0ZjY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDct
MDggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNTE1MSAtIHdvcmtlcnMgd2l0aCBzeW50
YXggZXJyb3JzIG5vdCBmaXJpbmcgZXJyb3IgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTE1MQorCisgICAgICAgIEFkZHMgYW5kIHVwZGF0
ZXMgbGF5b3V0IHRlc3QgY2FzZXMgZm9yIGJ1ZyAyNTE1MS4KKworICAgICAgICAqIGZhc3Qvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLWludmFsaWQtc3ludGF4LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICogaHR0cC90
ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0
cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sOgorCiAyMDA5LTA3LTA4ICBQaWVy
cmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3Jlc291cmNlcy93b3JrZXItaW52YWxpZC1zeW50YXguanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1pbnZhbGlkLXN5bnRheC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hNzRlZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItaW52YWxpZC1zeW50YXguanMKQEAgLTAs
MCArMSBAQAorSW52YWxpZCBzeW50YXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy93b3JrZXItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CmluZGV4IDk3Njc4ZDEuLjE3
OWUxMTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3Ry
dWN0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXIt
Y29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CkBAIC0xLDggKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAxOiBTeW50YXhFcnJvcjogUGFyc2UgZXJyb3IKIFRlc3QgV29ya2VyIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2Vz
LCBmb2xsb3dlZCB3aXRoIERPTkUuCiAKIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBwcm9wYWdh
dGVkIGNvcnJlY3RseS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVs
eSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFj
ayBzaXplIGV4Y2VlZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRo
b3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cykKK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gZW1wdHkgc2Ny
aXB0IFVSTC4KK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gaW52YWxpZCBzY3JpcHQgVVJM
LgogUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5vdCBiZSBs
b2FkZWQuCitQQVNTOiBvbmVycm9yIGludm9rZWQgZm9yIGEgc2NyaXB0IHRoYXQgaGFzIGludmFs
aWQgc3ludGF4LgogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
d29ya2VyLWNvbnN0cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2Vy
LWNvbnN0cnVjdG9yLmh0bWwKaW5kZXggOGY4ZTcyMy4uZmE0ZDYyNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbApAQCAtNyw0OCArNywx
MTkgQEAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlc3VsdCIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwogfQogCi1pZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK2Z1bmN0
aW9uIHJ1bk5leHRUZXN0KCkKK3sKKyAgICB0ZXN0SW5kZXgrKzsKKyAgICBpZiAodGVzdEluZGV4
ID4gdG90YWxUZXN0cykgeworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmFsKCJ0ZXN0IiArIHRlc3RJ
bmRleCArICIoKTsiKTsKKyAgICB9CiB9CiAKLXRyeSB7Ci0gICAgbmV3IFdvcmtlcih7dG9TdHJp
bmc6ZnVuY3Rpb24oKXt0aHJvdyAiZXhjZXB0aW9uIn19KQotICAgIGxvZygiRkFJTDogdG9TdHJp
bmcgZXhjZXB0aW9uIG5vdCBwcm9wYWdhdGVkLiIpOwotfSBjYXRjaCAoZXgpIHsKLSAgICBpZiAo
ZXggPT0gImV4Y2VwdGlvbiIpCi0gICAgICAgIGxvZygiUEFTUzogdG9TdHJpbmcgZXhjZXB0aW9u
IHByb3BhZ2F0ZWQgY29ycmVjdGx5LiIpOwotICAgIGVsc2UKLSAgICAgICAgbG9nKCJGQUlMOiB1
bmV4cGVjdGVkIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikgcmVjZWl2ZWQgaW5zdGVhZCBvZiBvbmUg
cHJvcGFnYXRlZCBmcm9tIHRvU3RyaW5nLiIpOworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHRy
eSB7CisgICAgICAgIG5ldyBXb3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2Vw
dGlvbiJ9fSkKKyAgICAgICAgbG9nKCJGQUlMOiB0b1N0cmluZyBleGNlcHRpb24gbm90IHByb3Bh
Z2F0ZWQuIik7CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYgKGV4ID09ICJleGNlcHRp
b24iKQorICAgICAgICAgICAgbG9nKCJQQVNTOiB0b1N0cmluZyBleGNlcHRpb24gcHJvcGFnYXRl
ZCBjb3JyZWN0bHkuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTDogdW5l
eHBlY3RlZCBleGNlcHRpb24gKCIgKyBleCArICIpIHJlY2VpdmVkIGluc3RlYWQgb2Ygb25lIHBy
b3BhZ2F0ZWQgZnJvbSB0b1N0cmluZy4iKTsKKyAgICB9CisgICAgcnVuTmV4dFRlc3QoKTsKIH0K
IAotdHJ5IHsKLSAgICB2YXIgZm9vID0ge3RvU3RyaW5nOmZ1bmN0aW9uKCl7bmV3IFdvcmtlcihm
b28pfX0KLSAgICBuZXcgV29ya2VyKGZvbyk7Ci0gICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24g
d2hlbiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkiKTsKLX0gY2F0Y2ggKGV4
KSB7Ci0gICAgbG9nKCJQQVNTOiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkg
cmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworZnVuY3Rpb24gdGVzdDIo
KQoreworICAgIHRyeSB7CisgICAgICAgIHZhciBmb28gPSB7dG9TdHJpbmc6ZnVuY3Rpb24oKXtu
ZXcgV29ya2VyKGZvbyl9fQorICAgICAgICBuZXcgV29ya2VyKGZvbyk7CisgICAgICAgIGxvZygi
RkFJTDogbm8gZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSB3b3JrZXJzIHJlY3Vyc2l2
ZWx5Iik7CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJQQVNTOiB0cnlpbmcgdG8g
Y3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsg
ZXggKyAiKSIpOworICAgIH0KKyAgICBydW5OZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIG5l
dyBXb3JrZXIoKTsKLSAgICBsb2coIkZBSUw6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3
aXRob3V0IGFyZ3VtZW50cyBkaWQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24iKTsKLX0gY2F0
Y2ggKGV4KSB7Ci0gICAgbG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0
aG91dCBhcmd1bWVudHMgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOwor
ZnVuY3Rpb24gdGVzdDMoKQoreworICAgIHRyeSB7CisgICAgICAgIG5ldyBXb3JrZXIoKTsKKyAg
ICAgICAgbG9nKCJGQUlMOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1
bWVudHMgZGlkIG5vdCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIik7CisgICAgfSBjYXRjaCAoZXgp
IHsKKyAgICAgICAgbG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91
dCBhcmd1bWVudHMgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworICAg
IH0KKyAgICBydW5OZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIHZhciB3b3JrZXIgPSBuZXcg
V29ya2VyKCJkb2VzLW5vdC1leGlzdC5qcyIpOwotICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0
aGF0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIik7Ci0gICAgICAgIGxvZygiRE9ORSIpOwotICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworZnVuY3Rpb24gdGVzdDQoKQoreworICAgIHRyeSB7
CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCIiKTsKKyAgICAgICAgd29ya2VyLm9u
ZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZv
a2VkIGZvciBhbiBlbXB0eSBzY3JpcHQgVVJMLiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5l
eHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICB9
Ci19IGNhdGNoIChleCkgewotICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiAr
IGV4KTsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiB9CisKK2Z1bmN0aW9uIHRlc3Q1KCkKK3sK
KyAgICB0cnkgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigiaW52YWxpZHVybDov
LyIpOworICAgICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
bG9nKCJQQVNTOiBvbmVycm9yIGludm9rZWQgZm9yIGFuIGludmFsaWQgc2NyaXB0IFVSTC4iKTsK
KyAgICAgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChleCkg
eworICAgICAgICBsb2coIkZBSUw6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyBleCk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NigpCit7CisgICAg
dHJ5IHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0Lmpz
Iik7CisgICAgICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBs
b2coIlBBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBjb3VsZCBub3QgYmUg
bG9hZGVkLiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAgfQorICAgIH0g
Y2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiAr
IGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q3
KCkKK3sKKyAgICB0cnkgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3Vy
Y2VzL3dvcmtlci1pbnZhbGlkLXN5bnRheC5qcyIpOworICAgICAgICB3b3JrZXIub25lcnJvciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBvbmVycm9yIGludm9rZWQgZm9y
IGEgc2NyaXB0IHRoYXQgaGFzIGludmFsaWQgc3ludGF4LiIpOworICAgICAgICAgICAgcnVuTmV4
dFRlc3QoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJ
TDogdW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsK
KyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgdG90YWxUZXN0cyA9IDc7Cit2YXIgdGVzdEluZGV4
ID0gMDsKK3J1bk5leHRUZXN0KCk7CisKIDwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVj
dGVkLnR4dAppbmRleCBkYmYxMzJlLi4wYjE1YjNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dApA
QCAtMSw0ICsxLDYgQEAKIFRlc3QgdGhhdCBsb2FkaW5nIHRoZSB3b3JrZXIncyBzY3JpcHQgZG9l
cyBub3QgYWxsb3cgYSBjcm9zcyBvcmlnaW4gcmVkaXJlY3QgKGJ1ZyAyNjE0NikKIAorU1VDQ0VT
UzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2Fk
aW5nIHRoZSB3b3JrZXIgc2NyaXB0LgogU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0
aW5nIHRvIHJlZGlyZWN0ZWQgY3Jvc3Mgb3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBz
Y3JpcHQuCitET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vy
cy93b3JrZXItcmVkaXJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93
b3JrZXItcmVkaXJlY3QuaHRtbAppbmRleCA4NjAzN2YyLi44ZjcyMzlkIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sCkBAIC03
LDIyICs3LDUzIEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKIH0KIAorZnVu
Y3Rpb24gcnVuTmV4dFRlc3QoKQoreworICAgIHRlc3RJbmRleCsrOworICAgIGlmICh0ZXN0SW5k
ZXggPiB0b3RhbFRlc3RzKSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2YWwoInRlc3QiICsgdGVz
dEluZGV4ICsgIigpOyIpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHZh
ciB3b3JrZXIgPSBuZXcgV29ya2VyKCdodHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNv
dXJjZXMvd29ya2VyLXJlZGlyZWN0LXRhcmdldC5qcycpOworICAgIHdvcmtlci5vbmVycm9yID0g
ZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBh
dHRlbXB0aW5nIHRvIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIgc2NyaXB0
LiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAgICB3b3JrZXIub25tZXNzYWdl
ID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogZXhlY3V0ZWQgc2NyaXB0IHdo
ZW4gcmVkaXJlY3QgY3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAg
IH0KK30KKworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2Vy
KCcvcmVzb3VyY2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtl
cnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKKyAgICB3b3JrZXIub25l
cnJvciA9IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9y
IHdoZW4gYXR0ZW1wdGluZyB0byByZWRpcmVjdGVkIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5n
IHRoZSB3b3JrZXIgc2NyaXB0LiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAg
ICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDog
ZXhlY3V0ZWQgc2NyaXB0IHdoZW4gcmVkaXJlY3QgY3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KK30KKwogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9CiAKLXZhciB3b3JrZXIgPSBuZXcgV29y
a2VyKCcvcmVzb3VyY2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dv
cmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKLXdvcmtlci5vbmVy
cm9yID0gZnVuY3Rpb24oZXZ0KSB7Ci0gICAgbG9nKCJTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVu
IGF0dGVtcHRpbmcgdG8gcmVkaXJlY3RlZCBjcm9zcyBvcmlnaW4gd2hpbGUgbG9hZGluZyB0aGUg
d29ya2VyIHNjcmlwdC4iKTsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQot
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci13b3JrZXIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7Ci0gICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQg
d2hlbiByZWRpcmVjdCBjcm9zcyBvcmlnaW4uIik7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwot
fQordmFyIHRvdGFsVGVzdHMgPSAyOwordmFyIHRlc3RJbmRleCA9IDA7CitydW5OZXh0VGVzdCgp
OworCiA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg4ZGI5Yi4uMzJhNDNkYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MSBAQAorMjAwOS0wNy0wOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDI1MTUxIC0g
d29ya2VycyB3aXRoIHN5bnRheCBlcnJvcnMgbm90IGZpcmluZyBlcnJvciBldmVudC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTUxCisKKyAgICAg
ICAgVGhpcyBmaXhlcyB0aGUgcHJvYmxlbSB0aGF0IGFuIGVycm9yIGV2ZW50IGlzIG5vdCBmaXJl
ZCB3aGVuIGZhaWxlZAorICAgICAgICB0byBsb2FkIHdvcmtlciBzY3JpcHQsIGR1ZSB0byBzb21l
dGhpbmcgbGlrZSBpbnZhbGlkIFVSTCwgY3Jvc3Mtb3JpZ2luCisgICAgICAgIHJlZGlyZWN0ZWQg
VVJMLCBzeW50YXggZXJyb3IgaW4gc2NyaXB0IGFuZCBldGMuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVj
dFdvcmtlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3JrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6Y3JlYXRlKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dDo6aW1wb3J0U2NyaXB0cyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFeGNlcHRpb25UYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oOgorICAgICAg
ICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6bm90aWZ5TG9hZEVycm9yVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRM
b2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJT
Y3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9h
ZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3Jp
cHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUVycm9yKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6dXJsKToKKwogMjAwOS0wNy0wOCAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4OiBB
ZGQgbWlzc2luZyAjaW5jbHVkZXMgZm9yIFdpbmRvd3MgKGNVUkwpIGJ1aWxkLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAKaW5kZXggOGVhNjcxOC4uZDcwZmNl
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCkBAIC01
OSw5ICs1OSw3IEBAIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0V29ya2VyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBBcmdMaXN0JiBhcmdzCiAKICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
OwogICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXb3JrZXI+IHdv
cmtlciA9IFdvcmtlcjo6Y3JlYXRlKHNjcmlwdFVSTCwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBSZWZQdHI8V29ya2VyPiB3b3Jr
ZXIgPSBXb3JrZXI6OmNyZWF0ZShzY3JpcHRVUkwsIHdpbmRvdy0+ZG9jdW1lbnQoKSk7CiAKICAg
ICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCB3b3JrZXIucmVsZWFzZSgpKSk7CiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKaW5kZXggOTg4YmRi
ZC4uNzBmN2YxYSAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3Vz
dG9tLmNwcApAQCAtODAsMTEgKzgwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnN0
cnVjdG9yKQogCiAgICAgLy8gQ3JlYXRlIHRoZSB3b3JrZXIgb2JqZWN0LgogICAgIC8vIE5vdGU6
IGl0J3MgT0sgdG8gbGV0IHRoaXMgUmVmUHRyIGdvIG91dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFs
c28gY2FsbCBzZXRET01XcmFwcGVyKCksIHdoaWNoIGVmZmVjdGl2ZWx5IGhvbGRzIGEgcmVmZXJl
bmNlIHRvIG9iai4KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V29ya2Vy
PiBvYmogPSBXb3JrZXI6OmNyZWF0ZSh0b1dlYkNvcmVTdHJpbmcoc2NyaXB0VXJsKSwgY29udGV4
dCwgZWMpOwotCi0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7Cisg
ICAgUmVmUHRyPFdvcmtlcj4gb2JqID0gV29ya2VyOjpjcmVhdGUodG9XZWJDb3JlU3RyaW5nKHNj
cmlwdFVybCksIGNvbnRleHQpOwogCiAgICAgLy8gU2V0dXAgdGhlIHN0YW5kYXJkIHdyYXBwZXIg
b2JqZWN0IGludGVybmFsIGZpZWxkcy4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXJPYmplY3QgPSBhcmdzLkhvbGRlcigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAppbmRleCAyZTAzZTNkLi5mMjhj
YTQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyLmNwcApAQCAtNTAsMjMgKzUwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorV29ya2VyOjpXb3JrZXIoY29u
c3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBB
Y3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fY29udGV4dFByb3h5KFdvcmtl
ckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMpKQogewotICAgIG1fc2NyaXB0VVJMID0gY29udGV4
dC0+Y29tcGxldGVVUkwodXJsKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhbV9zY3JpcHRV
UkwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNz
KFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV9zY3JpcHRVUkwpLmdldCgpKSkgewotICAgICAgICBl
YyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIG1fc2NyaXB0
TG9hZGVyID0gbmV3IFdvcmtlclNjcmlwdExvYWRlcigpOwotICAgIG1fc2NyaXB0TG9hZGVyLT5s
b2FkQXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3NjcmlwdFVSTCwg
RGVueUNyb3NzT3JpZ2luUmVkaXJlY3QsIHRoaXMpOworICAgIG1fc2NyaXB0TG9hZGVyLT5sb2Fk
QXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB1cmwsIENvbXBsZXRlVVJM
LCBEZW55Q3Jvc3NPcmlnaW5Mb2FkLCB0aGlzKTsKICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7ICAvLyBUaGUgd29ya2VyIGNvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2hpbGUgbG9hZGluZywg
c28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgd29ya2VyIG9iamVjdCBpcyBub3QgY29sbGVjdGVk
LCBhcyB3ZWxsIGFzIGl0cyBldmVudCBsaXN0ZW5lcnMuCiB9CiAKQEAgLTExNyw3ICsxMDYsNyBA
QCB2b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoKQogICAgIGlmIChtX3NjcmlwdExvYWRlci0+
ZmFpbGVkKCkpCiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdFVSTCwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBtX3NjcmlwdExvYWRl
ci0+c2NyaXB0KCkpOworICAgICAgICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0
KG1fc2NyaXB0TG9hZGVyLT51cmwoKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdl
bnQobV9zY3JpcHRMb2FkZXItPnVybCgpKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIAog
ICAgIG1fc2NyaXB0TG9hZGVyID0gMDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCmluZGV4IDFmY2M4YmUuLmJkZTI3ZTgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAorKysgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIK
LSNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC01MSw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdvcmtlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZh
dGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwgY29udGV4dCwgZWMpKTsgfQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVy
bCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtlcih1cmwsIGNvbnRleHQpKTsgfQogICAgICAgICB+V29ya2VyKCk7CiAKICAgICAgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
IH0KQEAgLTg4LDE0ICs4NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEV2ZW50
TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX29uRXJyb3JMaXN0ZW5lci5nZXQo
KTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV29ya2VyKGNvbnN0IFN0cmluZyYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIFdvcmtlcihjb25z
dCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZpbmlzaGVkKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQogCi0gICAgICAgIEtVUkwgbV9zY3JpcHRVUkw7CiAgICAgICAgIE93blB0
cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOwogCiAgICAgICAgIFdvcmtlckNv
bnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRoZSBwcm94eSBvdXRsaXZlcyB0aGUgd29y
a2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
CmluZGV4IDliMDE5YjguLjNiM2ZmMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAg
LTI5MCw3ICsyOTAsNyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHVybHMsIGNvbnN0IFN0cmluZyYgY2FsbAogCiAgICAgZm9yIChWZWN0
b3I8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29tcGxldGVkVVJMcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgV29ya2VyU2NyaXB0TG9hZGVyIHNjcmlwdExvYWRlcjsK
LSAgICAgICAgc2NyaXB0TG9hZGVyLmxvYWRTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgKml0LCBBbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QpOworICAgICAgICBzY3JpcHRM
b2FkZXIubG9hZFN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaXQsIERv
Tm90Q29tcGxldGVVUkwsIEFsbG93Q3Jvc3NPcmlnaW5Mb2FkKTsKIAogICAgICAgICAvLyBJZiB0
aGUgZmV0Y2hpbmcgYXR0ZW1wdCBmYWlsZWQsIHRocm93IGEgTkVUV09SS19FUlIgZXhjZXB0aW9u
IGFuZCBhYm9ydCBhbGwgdGhlc2Ugc3RlcHMuCiAgICAgICAgIGlmIChzY3JpcHRMb2FkZXIuZmFp
bGVkKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDA0
ZTYxYzEuLjM2NzIyNWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cApAQCAtMTI3LDggKzEyNywxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBp
ZiAoIW1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlcG9ydEV4Y2VwdGlvbihtX2Vycm9yTWVzc2FnZSwgbV9saW5lTnVtYmVyLCBtX3Nv
dXJjZVVSTCk7CisgICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0ID0gbV9tZXNzYWdpbmdQcm94
eS0+d29ya2VyT2JqZWN0KCk7CisgICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2Fn
aW5nUHJveHktPmFza2VkVG9UZXJtaW5hdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjb250ZXh0LT5yZXBvcnRFeGNlcHRpb24obV9lcnJvck1lc3NhZ2UsIG1fbGluZU51bWJl
ciwgbV9zb3VyY2VVUkwpOworICAgICAgICB3b3JrZXJPYmplY3QtPmRpc3BhdGNoRXJyb3JFdmVu
dCgpOwogICAgIH0KIAogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggMjk4ZDg2OC4uYTU0M2YwZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTgyLDYgKzgyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNZXNzYWdlV29ya2Vy
VGFzazsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOwor
ICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyRXhjZXB0aW9uVGFzazsKICAgICAgICAgZnJpZW5k
IGNsYXNzIFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazsKIAogICAgICAgICB2aXJ0dWFs
IH5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclNjcmlwdExvYWRlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcAppbmRleCA4NzM3Yjg4Li42OWVhOTJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0
TG9hZGVyLmNwcApAQCAtMzEsMTIgKzMxLDE1IEBACiAKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRM
b2FkZXIuaCIKIAorI2luY2x1ZGUgIkdlbmVyaWNXb3JrZXJUYXNrLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldvcmtlclRocmVh
ZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsMjQgKzUwLDU2IEBA
IFdvcmtlclNjcmlwdExvYWRlcjo6V29ya2VyU2NyaXB0TG9hZGVyKCkKIHsKIH0KIAotdm9pZCBX
b3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpCit2b2lkIFdvcmtlclNj
cmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xp
Y3kgdXJsQ29tcGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5IGNyb3NzT3JpZ2lu
TG9hZFBvbGljeSkKIHsKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4g
cmVxdWVzdChjcmVhdGVSZXNvdXJjZVJlcXVlc3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJs
LCB1cmxDb21wbGV0aW9uUG9saWN5LCBjcm9zc09yaWdpbkxvYWRQb2xpY3kpKTsKKyAgICBpZiAo
IXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0gICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCksIHJlcXVlc3QsICp0aGlzLCBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICBDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgPSAoY3Jvc3NPcmlnaW5Mb2FkUG9saWN5
ID09IERlbnlDcm9zc09yaWdpbkxvYWQpID8gRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QgOiBBbGxv
d0Nyb3NzT3JpZ2luUmVkaXJlY3Q7CisgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCksICpyZXF1ZXN0LCAqdGhpcywgQWxsb3dTdG9yZWRDcmVkZW50aWFscywg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CiB9CiAgICAgCi12b2lkIFdvcmtlclNjcmlwdExv
YWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09yaWdpblJlZGlyZWN0UG9s
aWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3ksIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCog
Y2xpZW50KQordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcm
IHVybCwgVVJMQ29tcGxldGlvblBvbGljeSB1cmxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdp
bkxvYWRQb2xpY3kgY3Jvc3NPcmlnaW5Mb2FkUG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQqIGNsaWVudCkKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBtX2NsaWVudCA9IGNsaWVu
dDsKIAotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAgcmVxdWVzdC5zZXRI
VFRQTWV0aG9kKCJHRVQiKTsKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0KGNy
ZWF0ZVJlc291cmNlUmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHVybENvbXBs
ZXRpb25Qb2xpY3ksIGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAgIGlmICghcmVxdWVzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5ID0gKGNyb3NzT3JpZ2luTG9hZFBvbGljeSA9PSBEZW55Q3Jvc3NP
cmlnaW5Mb2FkKSA/IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IDogQWxsb3dDcm9zc09yaWdpblJl
ZGlyZWN0OworICAgIG1fdGhyZWFkYWJsZUxvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0aGlzLCAqcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENh
bGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlMb2FkRXJyb3JU
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlclNjcmlwdExvYWRlciog
bG9hZGVyKQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBsb2FkZXItPm5vdGlm
eUVycm9yKCk7Cit9CisKK1Jlc291cmNlUmVxdWVzdCogV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVh
dGVSZXNvdXJjZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3kgdXJsQ29tcGxl
dGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5IGNyb3NzT3JpZ2luTG9hZFBvbGljeSkK
K3sKKyAgICBpZiAodXJsQ29tcGxldGlvblBvbGljeSA9PSBDb21wbGV0ZVVSTCkgeworICAgICAg
ICBtX3VybCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7CisgICAg
ICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8ICFtX3VybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90
aWZ5TG9hZEVycm9yVGFzaywgdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV91cmwgPSBLVVJMKHVybCk7CisKKyAgICBpZiAoY3Jv
c3NPcmlnaW5Mb2FkUG9saWN5ID09IERlbnlDcm9zc09yaWdpbkxvYWQgJiYgIXNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKG1fdXJsKS5nZXQoKSkpIHsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlMb2FkRXJyb3JUYXNrLCB0aGlzKSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCogcmVxdWVz
dCA9IG5ldyBSZXNvdXJjZVJlcXVlc3QobV91cmwpOworICAgIHJlcXVlc3QtPnNldEhUVFBNZXRo
b2QoIkdFVCIpOwogCi0gICAgbV90aHJlYWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMsIHJlcXVlc3QsIERvTm90U2VuZExv
YWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKIH0KICAgICAK
IHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTEsMTggKzE0NiwyMSBAQCB2b2lkIFdvcmtlclNj
cmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAK
IHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQog
ewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICBub3RpZnlGaW5pc2hlZCgpOworICAgIG5vdGlm
eUVycm9yKCk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RD
aGVjaygpCiB7Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotICAgIG5vdGlmeUZpbmlzaGVkKCk7Cisg
ICAgbm90aWZ5RXJyb3IoKTsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsK
KyAgICBub3RpZnlFcnJvcigpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bm90aWZ5
RXJyb3IoKQorewogICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICBub3RpZnlGaW5pc2hlZCgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCmluZGV4IGUzYTk2NjMuLmVhMjQzMzIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCkBAIC00MSwxNCArNDIsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgV29ya2VyU2Ny
aXB0TG9hZGVyQ2xpZW50OwogCisgICAgZW51bSBVUkxDb21wbGV0aW9uUG9saWN5IHsKKyAgICAg
ICAgQ29tcGxldGVVUkwsCisgICAgICAgIERvTm90Q29tcGxldGVVUkwKKyAgICB9OworCisgICAg
ZW51bSBDcm9zc09yaWdpbkxvYWRQb2xpY3kgeworICAgICAgICBEZW55Q3Jvc3NPcmlnaW5Mb2Fk
LAorICAgICAgICBBbGxvd0Nyb3NzT3JpZ2luTG9hZAorICAgIH07CisKICAgICBjbGFzcyBXb3Jr
ZXJTY3JpcHRMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiAgICAgcHVi
bGljOgogICAgICAgICBXb3JrZXJTY3JpcHRMb2FkZXIoKTsKIAotICAgICAgICB2b2lkIGxvYWRT
eW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwg
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7Ci0gICAgICAgIHZvaWQgbG9hZEFzeW5jaHJvbm91
c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwgQ3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisgICAgICAgIHZv
aWQgbG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgdXJsLCBVUkxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kpOworICAg
ICAgICB2b2lkIGxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3JpZ2luTG9hZFBvbGlj
eSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisKKyAgICAgICAgdm9pZCBub3RpZnlFcnJv
cigpOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHQ7IH0KKyAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7
IH0KICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogICAg
ICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KIApAQCAtNjAsNiArNzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
KiBjcmVhdGVSZXNvdXJjZVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgdXJsLCBVUkxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kpOwog
ICAgICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7CiAKICAgICAgICAgV29ya2VyU2NyaXB0TG9h
ZGVyQ2xpZW50KiBtX2NsaWVudDsKQEAgLTY3LDYgKzgyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTdHJpbmcgbV9yZXNwb25zZUVuY29kaW5nOyAgICAgICAgCiAgICAgICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgICAgIFN0cmluZyBtX3Nj
cmlwdDsKKyAgICAgICAgS1VSTCBtX3VybDsKICAgICAgICAgYm9vbCBtX2ZhaWxlZDsKICAgICAg
ICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7CiAgICAgfTsK
</data>
<flag name="review"
          id="16919"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32747</attachid>
            <date>2009-07-14 17:06:20 -0700</date>
            <delta_ts>2009-07-14 17:07:10 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25151_3</filename>
            <type>application/octet-stream</type>
            <size>25820</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NzE4YmU3Li4zNmFmYjIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDct
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNTE1MSAtIHdvcmtlcnMgd2l0aCBzeW50
YXggZXJyb3JzIG5vdCBmaXJpbmcgZXJyb3IgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTE1MQorCisgICAgICAgIEFkZHMgYW5kIHVwZGF0
ZXMgbGF5b3V0IHRlc3QgY2FzZXMgZm9yIGJ1ZyAyNTE1MS4KKworICAgICAgICAqIGZhc3Qvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLWludmFsaWQtc3ludGF4LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICogaHR0cC90
ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0
cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sOgorCiAyMDA5LTA3LTE0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93
b3JrZXItaW52YWxpZC1zeW50YXguanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1pbnZhbGlkLXN5bnRheC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hNzRlZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3Jlc291cmNlcy93b3JrZXItaW52YWxpZC1zeW50YXguanMKQEAgLTAsMCArMSBAQAorSW52
YWxpZCBzeW50YXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2Vy
LWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CmluZGV4IDk3Njc4ZDEuLjE3OWUxMTggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3ItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CkBAIC0xLDggKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBT
eW50YXhFcnJvcjogUGFyc2UgZXJyb3IKIFRlc3QgV29ya2VyIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
YWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3
aXRoIERPTkUuCiAKIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBwcm9wYWdhdGVkIGNvcnJlY3Rs
eS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVseSByZXN1bHRlZCBp
biBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2Vl
ZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRob3V0IGFyZ3VtZW50
cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3Vt
ZW50cykKK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gZW1wdHkgc2NyaXB0IFVSTC4KK1BB
U1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gaW52YWxpZCBzY3JpcHQgVVJMLgogUEFTUzogb25l
cnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5vdCBiZSBsb2FkZWQuCitQQVNT
OiBvbmVycm9yIGludm9rZWQgZm9yIGEgc2NyaXB0IHRoYXQgaGFzIGludmFsaWQgc3ludGF4Lgog
RE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0
cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9y
Lmh0bWwKaW5kZXggOGY4ZTcyMy4uZmE0ZDYyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbApAQCAtNyw0OCArNywxMTkgQEAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlu
bmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwogfQogCi1pZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK2Z1bmN0aW9uIHJ1bk5leHRU
ZXN0KCkKK3sKKyAgICB0ZXN0SW5kZXgrKzsKKyAgICBpZiAodGVzdEluZGV4ID4gdG90YWxUZXN0
cykgeworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmFsKCJ0ZXN0IiArIHRlc3RJbmRleCArICIoKTsi
KTsKKyAgICB9CiB9CiAKLXRyeSB7Ci0gICAgbmV3IFdvcmtlcih7dG9TdHJpbmc6ZnVuY3Rpb24o
KXt0aHJvdyAiZXhjZXB0aW9uIn19KQotICAgIGxvZygiRkFJTDogdG9TdHJpbmcgZXhjZXB0aW9u
IG5vdCBwcm9wYWdhdGVkLiIpOwotfSBjYXRjaCAoZXgpIHsKLSAgICBpZiAoZXggPT0gImV4Y2Vw
dGlvbiIpCi0gICAgICAgIGxvZygiUEFTUzogdG9TdHJpbmcgZXhjZXB0aW9uIHByb3BhZ2F0ZWQg
Y29ycmVjdGx5LiIpOwotICAgIGVsc2UKLSAgICAgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4
Y2VwdGlvbiAoIiArIGV4ICsgIikgcmVjZWl2ZWQgaW5zdGVhZCBvZiBvbmUgcHJvcGFnYXRlZCBm
cm9tIHRvU3RyaW5nLiIpOworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHRyeSB7CisgICAgICAg
IG5ldyBXb3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKKyAg
ICAgICAgbG9nKCJGQUlMOiB0b1N0cmluZyBleGNlcHRpb24gbm90IHByb3BhZ2F0ZWQuIik7Cisg
ICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYgKGV4ID09ICJleGNlcHRpb24iKQorICAgICAg
ICAgICAgbG9nKCJQQVNTOiB0b1N0cmluZyBleGNlcHRpb24gcHJvcGFnYXRlZCBjb3JyZWN0bHku
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNl
cHRpb24gKCIgKyBleCArICIpIHJlY2VpdmVkIGluc3RlYWQgb2Ygb25lIHByb3BhZ2F0ZWQgZnJv
bSB0b1N0cmluZy4iKTsKKyAgICB9CisgICAgcnVuTmV4dFRlc3QoKTsKIH0KIAotdHJ5IHsKLSAg
ICB2YXIgZm9vID0ge3RvU3RyaW5nOmZ1bmN0aW9uKCl7bmV3IFdvcmtlcihmb28pfX0KLSAgICBu
ZXcgV29ya2VyKGZvbyk7Ci0gICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiB0cnlpbmcg
dG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkiKTsKLX0gY2F0Y2ggKGV4KSB7Ci0gICAgbG9n
KCJQQVNTOiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkgcmVzdWx0ZWQgaW4g
YW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHRy
eSB7CisgICAgICAgIHZhciBmb28gPSB7dG9TdHJpbmc6ZnVuY3Rpb24oKXtuZXcgV29ya2VyKGZv
byl9fQorICAgICAgICBuZXcgV29ya2VyKGZvbyk7CisgICAgICAgIGxvZygiRkFJTDogbm8gZXhj
ZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSB3b3JrZXJzIHJlY3Vyc2l2ZWx5Iik7CisgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJQQVNTOiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtl
cnMgcmVjdXJzaXZlbHkgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOwor
ICAgIH0KKyAgICBydW5OZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIG5ldyBXb3JrZXIoKTsK
LSAgICBsb2coIkZBSUw6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRob3V0IGFyZ3Vt
ZW50cyBkaWQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24iKTsKLX0gY2F0Y2ggKGV4KSB7Ci0g
ICAgbG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVu
dHMgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworZnVuY3Rpb24gdGVz
dDMoKQoreworICAgIHRyeSB7CisgICAgICAgIG5ldyBXb3JrZXIoKTsKKyAgICAgICAgbG9nKCJG
QUlMOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVudHMgZGlkIG5v
dCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIik7CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAg
bG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVudHMg
cmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworICAgIH0KKyAgICBydW5O
ZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJkb2Vz
LW5vdC1leGlzdC5qcyIpOwotICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5v
dCBiZSBsb2FkZWQuIik7Ci0gICAgICAgIGxvZygiRE9ORSIpOwotICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworZnVuY3Rpb24gdGVzdDQoKQoreworICAgIHRyeSB7CisgICAgICAgIHZh
ciB3b3JrZXIgPSBuZXcgV29ya2VyKCIiKTsKKyAgICAgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhbiBl
bXB0eSBzY3JpcHQgVVJMLiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAg
fQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNl
cHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICB9Ci19IGNhdGNoIChl
eCkgewotICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKLSAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CiB9CisKK2Z1bmN0aW9uIHRlc3Q1KCkKK3sKKyAgICB0cnkgewor
ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigiaW52YWxpZHVybDovLyIpOworICAgICAg
ICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBv
bmVycm9yIGludm9rZWQgZm9yIGFuIGludmFsaWQgc2NyaXB0IFVSTC4iKTsKKyAgICAgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBs
b2coIkZBSUw6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyBleCk7CisgICAgICAgIHJ1bk5leHRU
ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NigpCit7CisgICAgdHJ5IHsKKyAgICAg
ICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7CisgICAgICAg
IHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IG9u
ZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIpOwor
ICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7
CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q3KCkKK3sKKyAgICB0
cnkgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3dvcmtlci1p
bnZhbGlkLXN5bnRheC5qcyIpOworICAgICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgbG9nKCJQQVNTOiBvbmVycm9yIGludm9rZWQgZm9yIGEgc2NyaXB0IHRo
YXQgaGFzIGludmFsaWQgc3ludGF4LiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAg
ICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3Rl
ZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9Cit9CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworfQorCit2YXIgdG90YWxUZXN0cyA9IDc7Cit2YXIgdGVzdEluZGV4ID0gMDsKK3J1bk5l
eHRUZXN0KCk7CisKIDwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAppbmRl
eCBkYmYxMzJlLi4wYjE1YjNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dv
cmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDYg
QEAKIFRlc3QgdGhhdCBsb2FkaW5nIHRoZSB3b3JrZXIncyBzY3JpcHQgZG9lcyBub3QgYWxsb3cg
YSBjcm9zcyBvcmlnaW4gcmVkaXJlY3QgKGJ1ZyAyNjE0NikKIAorU1VDQ0VTUzogdGhyZXcgZXJy
b3Igd2hlbiBhdHRlbXB0aW5nIHRvIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3Jr
ZXIgc2NyaXB0LgogU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHJlZGly
ZWN0ZWQgY3Jvc3Mgb3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBzY3JpcHQuCitET05F
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVk
aXJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJl
Y3QuaHRtbAppbmRleCA4NjAzN2YyLi44ZjcyMzlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sCkBAIC03LDIyICs3LDUzIEBA
IGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1
bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKIH0KIAorZnVuY3Rpb24gcnVuTmV4
dFRlc3QoKQoreworICAgIHRlc3RJbmRleCsrOworICAgIGlmICh0ZXN0SW5kZXggPiB0b3RhbFRl
c3RzKSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2YWwoInRlc3QiICsgdGVzdEluZGV4ICsgIigp
OyIpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHZhciB3b3JrZXIgPSBu
ZXcgV29ya2VyKCdodHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2Vy
LXJlZGlyZWN0LXRhcmdldC5qcycpOworICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oZXZ0
KSB7CisgICAgICAgIGxvZygiU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRv
IGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIgc2NyaXB0LiIpOworICAgICAg
ICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogZXhlY3V0ZWQgc2NyaXB0IHdoZW4gcmVkaXJlY3Qg
Y3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KK30KKworZnVu
Y3Rpb24gdGVzdDIoKQoreworICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCcvcmVzb3VyY2Vz
L3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtlcnMvcmVzb3VyY2Vz
L3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKKyAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0
aW9uKGV2dCkgeworICAgICAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1w
dGluZyB0byByZWRpcmVjdGVkIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIg
c2NyaXB0LiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAgICB3b3JrZXIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogZXhlY3V0ZWQgc2Ny
aXB0IHdoZW4gcmVkaXJlY3QgY3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBydW5OZXh0VGVzdCgp
OworICAgIH0KK30KKwogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CiB9CiAKLXZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCcvcmVzb3Vy
Y2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKLXdvcmtlci5vbmVycm9yID0gZnVuY3Rp
b24oZXZ0KSB7Ci0gICAgbG9nKCJTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRpbmcg
dG8gcmVkaXJlY3RlZCBjcm9zcyBvcmlnaW4gd2hpbGUgbG9hZGluZyB0aGUgd29ya2VyIHNjcmlw
dC4iKTsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci13b3JrZXIub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7Ci0gICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQgd2hlbiByZWRpcmVj
dCBjcm9zcyBvcmlnaW4uIik7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
LSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQordmFyIHRvdGFs
VGVzdHMgPSAyOwordmFyIHRlc3RJbmRleCA9IDA7CitydW5OZXh0VGVzdCgpOworCiA8L3Njcmlw
dD4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggNDhlMTJjOC4uMDA4NmY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAw
OS0wNy0xNCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDI1MTUxIC0gd29ya2VycyB3aXRo
IHN5bnRheCBlcnJvcnMgbm90IGZpcmluZyBlcnJvciBldmVudC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTUxCisKKyAgICAgICAgVGhpcyBmaXhl
cyB0aGUgcHJvYmxlbSB0aGF0IGFuIGVycm9yIGV2ZW50IGlzIG5vdCBmaXJlZCB3aGVuIHRoZSB3
b3JrZXIKKyAgICAgICAgc2NyaXB0IGZhaWxzIHRvIGxvYWQuIFNvbWUgcmVhc29ucyB0aGlzIG1h
eSBvY2N1ciBhcmUgYW4gaW52YWxpZCBVUkwgZm9yCisgICAgICAgIHRoZSB3b3JrZXIgc2NyaXB0
LCBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgb3IgYSBzeW50YXggZXJyb3IgaW4gdGhlCisgICAg
ICAgIHNjcmlwdC4KKworICAgICAgICBXZSBhbHNvIG1vdmVzIHRoZSBjb2RlIHRvIGNvbXBsZXRl
IHRoZSBVUkwgYW5kIGNoZWNrIGl0cyBvcmlnaW4gZnJvbQorICAgICAgICBXb3JrZXIgY29uc3Ry
dWN0b3IgdG8gV29ya2VyU2NyaXB0TG9hZGVyIGxvYWRpbmcgZnVuY3Rpb25zIGluIG9yZGVyIHRv
CisgICAgICAgIG1vdmUgdGhlIGV4Y2VwdGlvbiB0aHJvd2luZyBsb2dpYyBvdXQgb2YgdGhlIHNj
b3BlIG9mIFdvcmtlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgRHVlIHRvIHRoaXMgY2hhbmdlLCB3
ZSBhbHNvIHJlbW92ZSB0aGUgb3V0cHV0IEV4Y2VwdGlvbkNvZGUgcGFyYW1ldGVyCisgICAgICAg
IGluIHRoZSB3b3JrZXIgY29uc3RydWN0b3IuIENvcnJlc3BvbmRpbmcgSlMvVjggYmluZGluZyBj
b2RlcyBoYXZlIGJlZW4KKyAgICAgICAgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdHJ1Y3RXb3JrZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlcjo6V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6
OmNyZWF0ZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhj
ZXB0aW9uVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6bm90aWZ5TG9hZEVycm9yVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUVycm9yKToK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6dXJsKToKKwogMjAw
OS0wNy0xNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29u
c3RydWN0b3IuY3BwCmluZGV4IDhlYTY3MTguLmQ3MGZjZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcApAQCAtNTksOSArNTksNyBAQCBzdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3Qg
QXJnTGlzdCYgYXJncwogCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V29ya2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZShz
Y3JpcHRVUkwsIHdpbmRvdy0+ZG9jdW1lbnQoKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgUmVmUHRyPFdvcmtlcj4gd29ya2VyID0gV29ya2VyOjpjcmVhdGUoc2Ny
aXB0VVJMLCB3aW5kb3ctPmRvY3VtZW50KCkpOwogCiAgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMo
ZXhlYywgd29ya2VyLnJlbGVhc2UoKSkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDdXN0b20uY3BwCmluZGV4IDI5YjJkNDMuLjdlYjRmNjAgMTAwNzU1Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTgwLDExICs4MCw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIAogICAgIC8vIENyZWF0
ZSB0aGUgd29ya2VyIG9iamVjdC4KICAgICAvLyBOb3RlOiBpdCdzIE9LIHRvIGxldCB0aGlzIFJl
ZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNhbGwgc2V0RE9NV3JhcHBlcigp
LCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBhIHJlZmVyZW5jZSB0byBvYmouCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdvcmtlcj4gb2JqID0gV29ya2VyOjpjcmVhdGUo
dG9XZWJDb3JlU3RyaW5nKHNjcmlwdFVybCksIGNvbnRleHQsIGVjKTsKLQotICAgIGlmIChlYykK
LSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworICAgIFJlZlB0cjxXb3JrZXI+IG9iaiA9
IFdvcmtlcjo6Y3JlYXRlKHRvV2ViQ29yZVN0cmluZyhzY3JpcHRVcmwpLCBjb250ZXh0KTsKIAog
ICAgIC8vIFNldHVwIHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMu
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyT2JqZWN0ID0gYXJncy5Ib2xkZXIo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAKaW5kZXggMmUwM2UzZC4uZjI4Y2E0MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAg
LTUwLDIzICs1MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtlcjo6V29ya2Vy
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKK1dvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX2NvbnRleHRQcm94eShXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSh0
aGlzKSkKIHsKLSAgICBtX3NjcmlwdFVSTCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7Ci0g
ICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIW1fc2NyaXB0VVJMLmlzVmFsaWQoKSkgewotICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KG1fc2NyaXB0VVJMKS5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBtX3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3Jp
cHRMb2FkZXIoKTsKLSAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9zY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0
LCB0aGlzKTsKKyAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgdXJsLCBDb21wbGV0ZVVSTCwgRGVueUNyb3NzT3JpZ2luTG9hZCwg
dGhpcyk7CiAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdvcmtlciBjb250
ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQg
dGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBpdHMgZXZlbnQg
bGlzdGVuZXJzLgogfQogCkBAIC0xMTcsNyArMTA2LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZp
bmlzaGVkKCkKICAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQogICAgICAgICBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFy
dFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNl
ckFnZW50KG1fc2NyaXB0VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKKyAgICAgICAg
bV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdExvYWRlci0+dXJsKCks
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0TG9hZGVyLT51cmwo
KSksIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKICAgICBtX3NjcmlwdExvYWRlciA9IDA7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaAppbmRleCAxZmNjOGJlLi5iZGUyN2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIldvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNTEsNyArNTAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3Jr
ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIFdvcmtlclNjcmlwdExvYWRlckNs
aWVudCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdvcmtlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFdvcmtlcih1cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXIodXJsLCBjb250ZXh0KSk7
IH0KICAgICAgICAgfldvcmtlcigpOwogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC04OCwxNCArODcsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgICAgICBXb3JrZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgICAg
ICBLVVJMIG1fc2NyaXB0VVJMOwogICAgICAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBt
X3NjcmlwdExvYWRlcjsKIAogICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFBy
b3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBz
aHV0ZG93bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBi
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA4ZTlmYjk3Li41ZmNjMDgw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBX
b3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBj
b25zdCBTdHJpbmcmIGNhbGwKIAogICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGNvbXBsZXRlZFVSTHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IFdvcmtlclNjcmlwdExvYWRlciBzY3JpcHRMb2FkZXI7Ci0gICAgICAgIHNjcmlwdExvYWRlci5s
b2FkU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppdCwgQWxsb3dDcm9z
c09yaWdpblJlZGlyZWN0KTsKKyAgICAgICAgc2NyaXB0TG9hZGVyLmxvYWRTeW5jaHJvbm91c2x5
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKml0LCBEb05vdENvbXBsZXRlVVJMLCBBbGxvd0Ny
b3NzT3JpZ2luTG9hZCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFp
bGVkLCB0aHJvdyBhIE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0
ZXBzLgogICAgICAgICBpZiAoc2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAppbmRleCBiNmUxNjQyLi5mYjM2NWY2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAgLTEyNyw4ICsxMjcsMTIgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgaWYgKCFtX21lc3NhZ2luZ1Byb3h5LT5h
c2tlZFRvVGVybWluYXRlKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZXBvcnRFeGNlcHRpb24o
bV9lcnJvck1lc3NhZ2UsIG1fbGluZU51bWJlciwgbV9zb3VyY2VVUkwpOworICAgICAgICBXb3Jr
ZXIqIHdvcmtlck9iamVjdCA9IG1fbWVzc2FnaW5nUHJveHktPndvcmtlck9iamVjdCgpOworICAg
ICAgICBpZiAoIXdvcmtlck9iamVjdCB8fCBtX21lc3NhZ2luZ1Byb3h5LT5hc2tlZFRvVGVybWlu
YXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29udGV4dC0+cmVwb3J0RXhj
ZXB0aW9uKG1fZXJyb3JNZXNzYWdlLCBtX2xpbmVOdW1iZXIsIG1fc291cmNlVVJMKTsKKyAgICAg
ICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICB9CiAKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCmlu
ZGV4IGY5ZTFjZDQuLmRlZDk4NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5oCkBAIC04Miw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVdvcmtlclRhc2s7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdv
cmtlckV4Y2VwdGlvblRhc2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJUaHJlYWRBY3Rp
dml0eVJlcG9ydFRhc2s7CiAKICAgICAgICAgdmlydHVhbCB+V29ya2VyTWVzc2FnaW5nUHJveHko
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwIGIv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKaW5kZXggODczN2I4OC4uZWM2
ZDU3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKQEAgLTMxLDEyICsz
MSwxNSBAQAogCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCiAKKyNpbmNsdWRlICJH
ZW5lcmljV29ya2VyVGFzay5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDI0ICs1MCw1OSBAQCBXb3JrZXJTY3JpcHRMb2FkZXI6Oldv
cmtlclNjcmlwdExvYWRlcigpCiB7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2Fk
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5KQorc3RhdGljIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgZ2V0
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jvc3NPcmln
aW5Mb2FkUG9saWN5KQogewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICByZXR1cm4gKGNyb3NzT3JpZ2luTG9h
ZFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5Mb2FkKSA/IERlbnlDcm9zc09yaWdpblJlZGlyZWN0
IDogQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0OworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRl
cjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3kgdXJsQ29t
cGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5IGNyb3NzT3JpZ2luTG9hZFBvbGlj
eSkKK3sKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0KGNyZWF0ZVJlc291cmNl
UmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHVybENvbXBsZXRpb25Qb2xpY3ks
IGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKLSAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwg
cmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpOworICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCAqcmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGdldENyb3NzT3Jp
Z2luUmVkaXJlY3RQb2xpY3koY3Jvc3NPcmlnaW5Mb2FkUG9saWN5KSk7CiB9CiAgICAgCi12b2lk
IFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3ksIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudCogY2xpZW50KQordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBTdHJpbmcmIHVybCwgVVJMQ29tcGxldGlvblBvbGljeSB1cmxDb21wbGV0aW9uUG9s
aWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jvc3NPcmlnaW5Mb2FkUG9saWN5LCBXb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBt
X2NsaWVudCA9IGNsaWVudDsKIAotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0g
ICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1
ZXN0PiByZXF1ZXN0KGNyZWF0ZVJlc291cmNlUmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCB1cmwsIHVybENvbXBsZXRpb25Qb2xpY3ksIGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAg
IGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aHJlYWRhYmxlTG9hZGVy
ID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMs
IHJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICBtX3Ro
cmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgdGhpcywgKnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25p
ZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBnZXRDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5KGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlM
b2FkRXJyb3JUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlclNjcmlw
dExvYWRlciogbG9hZGVyKQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBsb2Fk
ZXItPm5vdGlmeUVycm9yKCk7Cit9CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgVVJMQ29tcGxl
dGlvblBvbGljeSB1cmxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jv
c3NPcmlnaW5Mb2FkUG9saWN5KQoreworICAgIGlmICh1cmxDb21wbGV0aW9uUG9saWN5ID09IENv
bXBsZXRlVVJMKSB7CisgICAgICAgIG1fdXJsID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y29t
cGxldGVVUkwodXJsKTsKKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIW1fdXJsLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlMb2FkRXJyb3JUYXNrLCB0aGlzKSk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX3VybCA9IEtVUkwo
dXJsKTsKKworICAgIGlmIChjcm9zc09yaWdpbkxvYWRQb2xpY3kgPT0gRGVueUNyb3NzT3JpZ2lu
TG9hZCAmJiAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpLmdldCgpKSkgeworICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUxv
YWRFcnJvclRhc2ssIHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVz
b3VyY2VSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlc291cmNlUmVxdWVzdChtX3VybCk7CisgICAg
cmVxdWVzdC0+c2V0SFRUUE1ldGhvZCgiR0VUIik7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKIH0K
ICAgICAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTEsMTggKzE0OSwyMSBAQCB2b2lkIFdv
cmtlclNjcmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCiAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKQogewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICBub3RpZnlGaW5pc2hlZCgpOworICAg
IG5vdGlmeUVycm9yKCk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVk
aXJlY3RDaGVjaygpCiB7Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotICAgIG5vdGlmeUZpbmlzaGVk
KCk7CisgICAgbm90aWZ5RXJyb3IoKTsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikKIHsKKyAgICBub3RpZnlFcnJvcigpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6
bm90aWZ5RXJyb3IoKQorewogICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICBub3RpZnlGaW5pc2hl
ZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCmluZGV4IGUzYTk2NjMuLmY0
NjVkN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaAor
KysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCkBAIC00MSwxNCArNDIsMjcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50OwogCisgICAgZW51bSBVUkxDb21wbGV0aW9uUG9saWN5IHsK
KyAgICAgICAgQ29tcGxldGVVUkwsCisgICAgICAgIERvTm90Q29tcGxldGVVUkwKKyAgICB9Owor
CisgICAgZW51bSBDcm9zc09yaWdpbkxvYWRQb2xpY3kgeworICAgICAgICBEZW55Q3Jvc3NPcmln
aW5Mb2FkLAorICAgICAgICBBbGxvd0Nyb3NzT3JpZ2luTG9hZAorICAgIH07CisKICAgICBjbGFz
cyBXb3JrZXJTY3JpcHRMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiAg
ICAgcHVibGljOgogICAgICAgICBXb3JrZXJTY3JpcHRMb2FkZXIoKTsKIAotICAgICAgICB2b2lk
IGxvYWRTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7Ci0gICAgICAgIHZvaWQgbG9hZEFzeW5j
aHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwgQ3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisgICAg
ICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgdXJsLCBVUkxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kp
OworICAgICAgICB2b2lkIGxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3JpZ2luTG9h
ZFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisKKyAgICAgICAgdm9pZCBub3Rp
ZnlFcnJvcigpOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsg
fQogICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KIApAQCAtNjAsNiArNzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUGFzc093blB0
cjxSZXNvdXJjZVJlcXVlc3Q+IGNyZWF0ZVJlc291cmNlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3Jp
Z2luTG9hZFBvbGljeSk7CiAgICAgICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKIAogICAgICAg
ICBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqIG1fY2xpZW50OwpAQCAtNjcsNiArODIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3Jlc3BvbnNlRW5jb2Rpbmc7ICAg
ICAgICAKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKICAg
ICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBLVVJMIG1fdXJsOwogICAgICAgICBib29s
IG1fZmFpbGVkOwogICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32749</attachid>
            <date>2009-07-14 17:07:10 -0700</date>
            <delta_ts>2009-07-15 14:33:42 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25151_3</filename>
            <type>text/plain</type>
            <size>25820</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NzE4YmU3Li4zNmFmYjIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDct
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNTE1MSAtIHdvcmtlcnMgd2l0aCBzeW50
YXggZXJyb3JzIG5vdCBmaXJpbmcgZXJyb3IgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTE1MQorCisgICAgICAgIEFkZHMgYW5kIHVwZGF0
ZXMgbGF5b3V0IHRlc3QgY2FzZXMgZm9yIGJ1ZyAyNTE1MS4KKworICAgICAgICAqIGZhc3Qvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLWludmFsaWQtc3ludGF4LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICogaHR0cC90
ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0
cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sOgorCiAyMDA5LTA3LTE0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy93
b3JrZXItaW52YWxpZC1zeW50YXguanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1pbnZhbGlkLXN5bnRheC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hNzRlZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3Jlc291cmNlcy93b3JrZXItaW52YWxpZC1zeW50YXguanMKQEAgLTAsMCArMSBAQAorSW52
YWxpZCBzeW50YXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2Vy
LWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CmluZGV4IDk3Njc4ZDEuLjE3OWUxMTggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3ItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0CkBAIC0xLDggKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBT
eW50YXhFcnJvcjogUGFyc2UgZXJyb3IKIFRlc3QgV29ya2VyIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
YWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3
aXRoIERPTkUuCiAKIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBwcm9wYWdhdGVkIGNvcnJlY3Rs
eS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVseSByZXN1bHRlZCBp
biBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2Vl
ZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRob3V0IGFyZ3VtZW50
cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3Vt
ZW50cykKK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gZW1wdHkgc2NyaXB0IFVSTC4KK1BB
U1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gaW52YWxpZCBzY3JpcHQgVVJMLgogUEFTUzogb25l
cnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5vdCBiZSBsb2FkZWQuCitQQVNT
OiBvbmVycm9yIGludm9rZWQgZm9yIGEgc2NyaXB0IHRoYXQgaGFzIGludmFsaWQgc3ludGF4Lgog
RE9ORQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0
cnVjdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9y
Lmh0bWwKaW5kZXggOGY4ZTcyMy4uZmE0ZDYyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbApAQCAtNyw0OCArNywxMTkgQEAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlu
bmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwogfQogCi1pZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK2Z1bmN0aW9uIHJ1bk5leHRU
ZXN0KCkKK3sKKyAgICB0ZXN0SW5kZXgrKzsKKyAgICBpZiAodGVzdEluZGV4ID4gdG90YWxUZXN0
cykgeworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmFsKCJ0ZXN0IiArIHRlc3RJbmRleCArICIoKTsi
KTsKKyAgICB9CiB9CiAKLXRyeSB7Ci0gICAgbmV3IFdvcmtlcih7dG9TdHJpbmc6ZnVuY3Rpb24o
KXt0aHJvdyAiZXhjZXB0aW9uIn19KQotICAgIGxvZygiRkFJTDogdG9TdHJpbmcgZXhjZXB0aW9u
IG5vdCBwcm9wYWdhdGVkLiIpOwotfSBjYXRjaCAoZXgpIHsKLSAgICBpZiAoZXggPT0gImV4Y2Vw
dGlvbiIpCi0gICAgICAgIGxvZygiUEFTUzogdG9TdHJpbmcgZXhjZXB0aW9uIHByb3BhZ2F0ZWQg
Y29ycmVjdGx5LiIpOwotICAgIGVsc2UKLSAgICAgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4
Y2VwdGlvbiAoIiArIGV4ICsgIikgcmVjZWl2ZWQgaW5zdGVhZCBvZiBvbmUgcHJvcGFnYXRlZCBm
cm9tIHRvU3RyaW5nLiIpOworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHRyeSB7CisgICAgICAg
IG5ldyBXb3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKKyAg
ICAgICAgbG9nKCJGQUlMOiB0b1N0cmluZyBleGNlcHRpb24gbm90IHByb3BhZ2F0ZWQuIik7Cisg
ICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYgKGV4ID09ICJleGNlcHRpb24iKQorICAgICAg
ICAgICAgbG9nKCJQQVNTOiB0b1N0cmluZyBleGNlcHRpb24gcHJvcGFnYXRlZCBjb3JyZWN0bHku
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNl
cHRpb24gKCIgKyBleCArICIpIHJlY2VpdmVkIGluc3RlYWQgb2Ygb25lIHByb3BhZ2F0ZWQgZnJv
bSB0b1N0cmluZy4iKTsKKyAgICB9CisgICAgcnVuTmV4dFRlc3QoKTsKIH0KIAotdHJ5IHsKLSAg
ICB2YXIgZm9vID0ge3RvU3RyaW5nOmZ1bmN0aW9uKCl7bmV3IFdvcmtlcihmb28pfX0KLSAgICBu
ZXcgV29ya2VyKGZvbyk7Ci0gICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiB0cnlpbmcg
dG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkiKTsKLX0gY2F0Y2ggKGV4KSB7Ci0gICAgbG9n
KCJQQVNTOiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtlcnMgcmVjdXJzaXZlbHkgcmVzdWx0ZWQgaW4g
YW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworZnVuY3Rpb24gdGVzdDIoKQoreworICAgIHRy
eSB7CisgICAgICAgIHZhciBmb28gPSB7dG9TdHJpbmc6ZnVuY3Rpb24oKXtuZXcgV29ya2VyKGZv
byl9fQorICAgICAgICBuZXcgV29ya2VyKGZvbyk7CisgICAgICAgIGxvZygiRkFJTDogbm8gZXhj
ZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSB3b3JrZXJzIHJlY3Vyc2l2ZWx5Iik7CisgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJQQVNTOiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtl
cnMgcmVjdXJzaXZlbHkgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOwor
ICAgIH0KKyAgICBydW5OZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIG5ldyBXb3JrZXIoKTsK
LSAgICBsb2coIkZBSUw6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRob3V0IGFyZ3Vt
ZW50cyBkaWQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24iKTsKLX0gY2F0Y2ggKGV4KSB7Ci0g
ICAgbG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVu
dHMgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworZnVuY3Rpb24gdGVz
dDMoKQoreworICAgIHRyeSB7CisgICAgICAgIG5ldyBXb3JrZXIoKTsKKyAgICAgICAgbG9nKCJG
QUlMOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVudHMgZGlkIG5v
dCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIik7CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAg
bG9nKCJQQVNTOiBpbnZva2luZyBXb3JrZXIgY29uc3RydWN0b3Igd2l0aG91dCBhcmd1bWVudHMg
cmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworICAgIH0KKyAgICBydW5O
ZXh0VGVzdCgpOwogfQogCi10cnkgewotICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJkb2Vz
LW5vdC1leGlzdC5qcyIpOwotICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5v
dCBiZSBsb2FkZWQuIik7Ci0gICAgICAgIGxvZygiRE9ORSIpOwotICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworZnVuY3Rpb24gdGVzdDQoKQoreworICAgIHRyeSB7CisgICAgICAgIHZh
ciB3b3JrZXIgPSBuZXcgV29ya2VyKCIiKTsKKyAgICAgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhbiBl
bXB0eSBzY3JpcHQgVVJMLiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAg
fQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNl
cHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICB9Ci19IGNhdGNoIChl
eCkgewotICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKLSAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CiB9CisKK2Z1bmN0aW9uIHRlc3Q1KCkKK3sKKyAgICB0cnkgewor
ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigiaW52YWxpZHVybDovLyIpOworICAgICAg
ICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBv
bmVycm9yIGludm9rZWQgZm9yIGFuIGludmFsaWQgc2NyaXB0IFVSTC4iKTsKKyAgICAgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBs
b2coIkZBSUw6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyBleCk7CisgICAgICAgIHJ1bk5leHRU
ZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NigpCit7CisgICAgdHJ5IHsKKyAgICAg
ICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7CisgICAgICAg
IHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IG9u
ZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIpOwor
ICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7
CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAg
ICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q3KCkKK3sKKyAgICB0
cnkgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3dvcmtlci1p
bnZhbGlkLXN5bnRheC5qcyIpOworICAgICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgbG9nKCJQQVNTOiBvbmVycm9yIGludm9rZWQgZm9yIGEgc2NyaXB0IHRo
YXQgaGFzIGludmFsaWQgc3ludGF4LiIpOworICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAg
ICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDogdW5leHBlY3Rl
ZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9Cit9CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworfQorCit2YXIgdG90YWxUZXN0cyA9IDc7Cit2YXIgdGVzdEluZGV4ID0gMDsKK3J1bk5l
eHRUZXN0KCk7CisKIDwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAppbmRl
eCBkYmYxMzJlLi4wYjE1YjNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dv
cmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDYg
QEAKIFRlc3QgdGhhdCBsb2FkaW5nIHRoZSB3b3JrZXIncyBzY3JpcHQgZG9lcyBub3QgYWxsb3cg
YSBjcm9zcyBvcmlnaW4gcmVkaXJlY3QgKGJ1ZyAyNjE0NikKIAorU1VDQ0VTUzogdGhyZXcgZXJy
b3Igd2hlbiBhdHRlbXB0aW5nIHRvIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3Jr
ZXIgc2NyaXB0LgogU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHJlZGly
ZWN0ZWQgY3Jvc3Mgb3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBzY3JpcHQuCitET05F
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVk
aXJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJl
Y3QuaHRtbAppbmRleCA4NjAzN2YyLi44ZjcyMzlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sCkBAIC03LDIyICs3LDUzIEBA
IGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1
bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKIH0KIAorZnVuY3Rpb24gcnVuTmV4
dFRlc3QoKQoreworICAgIHRlc3RJbmRleCsrOworICAgIGlmICh0ZXN0SW5kZXggPiB0b3RhbFRl
c3RzKSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2YWwoInRlc3QiICsgdGVzdEluZGV4ICsgIigp
OyIpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDEoKQoreworICAgIHZhciB3b3JrZXIgPSBu
ZXcgV29ya2VyKCdodHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2Vy
LXJlZGlyZWN0LXRhcmdldC5qcycpOworICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oZXZ0
KSB7CisgICAgICAgIGxvZygiU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRv
IGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIgc2NyaXB0LiIpOworICAgICAg
ICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogZXhlY3V0ZWQgc2NyaXB0IHdoZW4gcmVkaXJlY3Qg
Y3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KK30KKworZnVu
Y3Rpb24gdGVzdDIoKQoreworICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCcvcmVzb3VyY2Vz
L3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtlcnMvcmVzb3VyY2Vz
L3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKKyAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0
aW9uKGV2dCkgeworICAgICAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1w
dGluZyB0byByZWRpcmVjdGVkIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIg
c2NyaXB0LiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKyAgICB3b3JrZXIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgIGxvZygiRkFJTDogZXhlY3V0ZWQgc2Ny
aXB0IHdoZW4gcmVkaXJlY3QgY3Jvc3Mgb3JpZ2luLiIpOworICAgICAgICBydW5OZXh0VGVzdCgp
OworICAgIH0KK30KKwogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CiB9CiAKLXZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCcvcmVzb3Vy
Y2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKLXdvcmtlci5vbmVycm9yID0gZnVuY3Rp
b24oZXZ0KSB7Ci0gICAgbG9nKCJTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRpbmcg
dG8gcmVkaXJlY3RlZCBjcm9zcyBvcmlnaW4gd2hpbGUgbG9hZGluZyB0aGUgd29ya2VyIHNjcmlw
dC4iKTsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci13b3JrZXIub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7Ci0gICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQgd2hlbiByZWRpcmVj
dCBjcm9zcyBvcmlnaW4uIik7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
LSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQordmFyIHRvdGFs
VGVzdHMgPSAyOwordmFyIHRlc3RJbmRleCA9IDA7CitydW5OZXh0VGVzdCgpOworCiA8L3Njcmlw
dD4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggNDhlMTJjOC4uMDA4NmY4ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAw
OS0wNy0xNCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDI1MTUxIC0gd29ya2VycyB3aXRo
IHN5bnRheCBlcnJvcnMgbm90IGZpcmluZyBlcnJvciBldmVudC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTUxCisKKyAgICAgICAgVGhpcyBmaXhl
cyB0aGUgcHJvYmxlbSB0aGF0IGFuIGVycm9yIGV2ZW50IGlzIG5vdCBmaXJlZCB3aGVuIHRoZSB3
b3JrZXIKKyAgICAgICAgc2NyaXB0IGZhaWxzIHRvIGxvYWQuIFNvbWUgcmVhc29ucyB0aGlzIG1h
eSBvY2N1ciBhcmUgYW4gaW52YWxpZCBVUkwgZm9yCisgICAgICAgIHRoZSB3b3JrZXIgc2NyaXB0
LCBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgb3IgYSBzeW50YXggZXJyb3IgaW4gdGhlCisgICAg
ICAgIHNjcmlwdC4KKworICAgICAgICBXZSBhbHNvIG1vdmVzIHRoZSBjb2RlIHRvIGNvbXBsZXRl
IHRoZSBVUkwgYW5kIGNoZWNrIGl0cyBvcmlnaW4gZnJvbQorICAgICAgICBXb3JrZXIgY29uc3Ry
dWN0b3IgdG8gV29ya2VyU2NyaXB0TG9hZGVyIGxvYWRpbmcgZnVuY3Rpb25zIGluIG9yZGVyIHRv
CisgICAgICAgIG1vdmUgdGhlIGV4Y2VwdGlvbiB0aHJvd2luZyBsb2dpYyBvdXQgb2YgdGhlIHNj
b3BlIG9mIFdvcmtlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgRHVlIHRvIHRoaXMgY2hhbmdlLCB3
ZSBhbHNvIHJlbW92ZSB0aGUgb3V0cHV0IEV4Y2VwdGlvbkNvZGUgcGFyYW1ldGVyCisgICAgICAg
IGluIHRoZSB3b3JrZXIgY29uc3RydWN0b3IuIENvcnJlc3BvbmRpbmcgSlMvVjggYmluZGluZyBj
b2RlcyBoYXZlIGJlZW4KKyAgICAgICAgdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdHJ1Y3RXb3JrZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlcjo6V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6
OmNyZWF0ZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhj
ZXB0aW9uVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6bm90aWZ5TG9hZEVycm9yVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUVycm9yKToK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6dXJsKToKKwogMjAw
OS0wNy0xNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29u
c3RydWN0b3IuY3BwCmluZGV4IDhlYTY3MTguLmQ3MGZjZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcApAQCAtNTksOSArNTksNyBAQCBzdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3Qg
QXJnTGlzdCYgYXJncwogCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V29ya2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZShz
Y3JpcHRVUkwsIHdpbmRvdy0+ZG9jdW1lbnQoKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgUmVmUHRyPFdvcmtlcj4gd29ya2VyID0gV29ya2VyOjpjcmVhdGUoc2Ny
aXB0VVJMLCB3aW5kb3ctPmRvY3VtZW50KCkpOwogCiAgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMo
ZXhlYywgd29ya2VyLnJlbGVhc2UoKSkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDdXN0b20uY3BwCmluZGV4IDI5YjJkNDMuLjdlYjRmNjAgMTAwNzU1Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTgwLDExICs4MCw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIAogICAgIC8vIENyZWF0
ZSB0aGUgd29ya2VyIG9iamVjdC4KICAgICAvLyBOb3RlOiBpdCdzIE9LIHRvIGxldCB0aGlzIFJl
ZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNhbGwgc2V0RE9NV3JhcHBlcigp
LCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBhIHJlZmVyZW5jZSB0byBvYmouCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdvcmtlcj4gb2JqID0gV29ya2VyOjpjcmVhdGUo
dG9XZWJDb3JlU3RyaW5nKHNjcmlwdFVybCksIGNvbnRleHQsIGVjKTsKLQotICAgIGlmIChlYykK
LSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworICAgIFJlZlB0cjxXb3JrZXI+IG9iaiA9
IFdvcmtlcjo6Y3JlYXRlKHRvV2ViQ29yZVN0cmluZyhzY3JpcHRVcmwpLCBjb250ZXh0KTsKIAog
ICAgIC8vIFNldHVwIHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMu
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyT2JqZWN0ID0gYXJncy5Ib2xkZXIo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAKaW5kZXggMmUwM2UzZC4uZjI4Y2E0MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAg
LTUwLDIzICs1MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtlcjo6V29ya2Vy
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKK1dvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX2NvbnRleHRQcm94eShXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSh0
aGlzKSkKIHsKLSAgICBtX3NjcmlwdFVSTCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7Ci0g
ICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIW1fc2NyaXB0VVJMLmlzVmFsaWQoKSkgewotICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KG1fc2NyaXB0VVJMKS5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBtX3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3Jp
cHRMb2FkZXIoKTsKLSAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9zY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0
LCB0aGlzKTsKKyAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgdXJsLCBDb21wbGV0ZVVSTCwgRGVueUNyb3NzT3JpZ2luTG9hZCwg
dGhpcyk7CiAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdvcmtlciBjb250
ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQg
dGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBpdHMgZXZlbnQg
bGlzdGVuZXJzLgogfQogCkBAIC0xMTcsNyArMTA2LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZp
bmlzaGVkKCkKICAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQogICAgICAgICBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFy
dFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNl
ckFnZW50KG1fc2NyaXB0VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKKyAgICAgICAg
bV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdExvYWRlci0+dXJsKCks
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0TG9hZGVyLT51cmwo
KSksIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKICAgICBtX3NjcmlwdExvYWRlciA9IDA7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaAppbmRleCAxZmNjOGJlLi5iZGUyN2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIldvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNTEsNyArNTAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3Jr
ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIFdvcmtlclNjcmlwdExvYWRlckNs
aWVudCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdvcmtlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFdvcmtlcih1cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXIodXJsLCBjb250ZXh0KSk7
IH0KICAgICAgICAgfldvcmtlcigpOwogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC04OCwxNCArODcsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgICAgICBXb3JrZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgICAg
ICBLVVJMIG1fc2NyaXB0VVJMOwogICAgICAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBt
X3NjcmlwdExvYWRlcjsKIAogICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFBy
b3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBz
aHV0ZG93bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBi
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA4ZTlmYjk3Li41ZmNjMDgw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBX
b3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBj
b25zdCBTdHJpbmcmIGNhbGwKIAogICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGNvbXBsZXRlZFVSTHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IFdvcmtlclNjcmlwdExvYWRlciBzY3JpcHRMb2FkZXI7Ci0gICAgICAgIHNjcmlwdExvYWRlci5s
b2FkU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppdCwgQWxsb3dDcm9z
c09yaWdpblJlZGlyZWN0KTsKKyAgICAgICAgc2NyaXB0TG9hZGVyLmxvYWRTeW5jaHJvbm91c2x5
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKml0LCBEb05vdENvbXBsZXRlVVJMLCBBbGxvd0Ny
b3NzT3JpZ2luTG9hZCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFp
bGVkLCB0aHJvdyBhIE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0
ZXBzLgogICAgICAgICBpZiAoc2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAppbmRleCBiNmUxNjQyLi5mYjM2NWY2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisrKyBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAgLTEyNyw4ICsxMjcsMTIgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgaWYgKCFtX21lc3NhZ2luZ1Byb3h5LT5h
c2tlZFRvVGVybWluYXRlKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZXBvcnRFeGNlcHRpb24o
bV9lcnJvck1lc3NhZ2UsIG1fbGluZU51bWJlciwgbV9zb3VyY2VVUkwpOworICAgICAgICBXb3Jr
ZXIqIHdvcmtlck9iamVjdCA9IG1fbWVzc2FnaW5nUHJveHktPndvcmtlck9iamVjdCgpOworICAg
ICAgICBpZiAoIXdvcmtlck9iamVjdCB8fCBtX21lc3NhZ2luZ1Byb3h5LT5hc2tlZFRvVGVybWlu
YXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29udGV4dC0+cmVwb3J0RXhj
ZXB0aW9uKG1fZXJyb3JNZXNzYWdlLCBtX2xpbmVOdW1iZXIsIG1fc291cmNlVVJMKTsKKyAgICAg
ICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICB9CiAKICAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCmlu
ZGV4IGY5ZTFjZDQuLmRlZDk4NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5oCkBAIC04Miw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgog
ICAgICAgICBmcmllbmQgY2xhc3MgTWVzc2FnZVdvcmtlclRhc2s7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdv
cmtlckV4Y2VwdGlvblRhc2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJUaHJlYWRBY3Rp
dml0eVJlcG9ydFRhc2s7CiAKICAgICAgICAgdmlydHVhbCB+V29ya2VyTWVzc2FnaW5nUHJveHko
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwIGIv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKaW5kZXggODczN2I4OC4uZWM2
ZDU3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKQEAgLTMxLDEyICsz
MSwxNSBAQAogCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCiAKKyNpbmNsdWRlICJH
ZW5lcmljV29ya2VyVGFzay5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDI0ICs1MCw1OSBAQCBXb3JrZXJTY3JpcHRMb2FkZXI6Oldv
cmtlclNjcmlwdExvYWRlcigpCiB7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2Fk
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5KQorc3RhdGljIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgZ2V0
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jvc3NPcmln
aW5Mb2FkUG9saWN5KQogewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICByZXR1cm4gKGNyb3NzT3JpZ2luTG9h
ZFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5Mb2FkKSA/IERlbnlDcm9zc09yaWdpblJlZGlyZWN0
IDogQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0OworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRl
cjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3kgdXJsQ29t
cGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5IGNyb3NzT3JpZ2luTG9hZFBvbGlj
eSkKK3sKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0KGNyZWF0ZVJlc291cmNl
UmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHVybENvbXBsZXRpb25Qb2xpY3ks
IGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKLSAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwg
cmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpOworICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCAqcmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGdldENyb3NzT3Jp
Z2luUmVkaXJlY3RQb2xpY3koY3Jvc3NPcmlnaW5Mb2FkUG9saWN5KSk7CiB9CiAgICAgCi12b2lk
IFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3ksIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudCogY2xpZW50KQordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBTdHJpbmcmIHVybCwgVVJMQ29tcGxldGlvblBvbGljeSB1cmxDb21wbGV0aW9uUG9s
aWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jvc3NPcmlnaW5Mb2FkUG9saWN5LCBXb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBt
X2NsaWVudCA9IGNsaWVudDsKIAotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0g
ICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1
ZXN0PiByZXF1ZXN0KGNyZWF0ZVJlc291cmNlUmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCB1cmwsIHVybENvbXBsZXRpb25Qb2xpY3ksIGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAg
IGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aHJlYWRhYmxlTG9hZGVy
ID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMs
IHJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICBtX3Ro
cmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgdGhpcywgKnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25p
ZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBnZXRDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5KGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlM
b2FkRXJyb3JUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlclNjcmlw
dExvYWRlciogbG9hZGVyKQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBsb2Fk
ZXItPm5vdGlmeUVycm9yKCk7Cit9CisKK1Bhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgVVJMQ29tcGxl
dGlvblBvbGljeSB1cmxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kgY3Jv
c3NPcmlnaW5Mb2FkUG9saWN5KQoreworICAgIGlmICh1cmxDb21wbGV0aW9uUG9saWN5ID09IENv
bXBsZXRlVVJMKSB7CisgICAgICAgIG1fdXJsID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y29t
cGxldGVVUkwodXJsKTsKKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIW1fdXJsLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlMb2FkRXJyb3JUYXNrLCB0aGlzKSk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX3VybCA9IEtVUkwo
dXJsKTsKKworICAgIGlmIChjcm9zc09yaWdpbkxvYWRQb2xpY3kgPT0gRGVueUNyb3NzT3JpZ2lu
TG9hZCAmJiAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpLmdldCgpKSkgeworICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm5vdGlmeUxv
YWRFcnJvclRhc2ssIHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVz
b3VyY2VSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlc291cmNlUmVxdWVzdChtX3VybCk7CisgICAg
cmVxdWVzdC0+c2V0SFRUUE1ldGhvZCgiR0VUIik7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKIH0K
ICAgICAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTEsMTggKzE0OSwyMSBAQCB2b2lkIFdv
cmtlclNjcmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCiAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKQogewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICBub3RpZnlGaW5pc2hlZCgpOworICAg
IG5vdGlmeUVycm9yKCk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVk
aXJlY3RDaGVjaygpCiB7Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotICAgIG5vdGlmeUZpbmlzaGVk
KCk7CisgICAgbm90aWZ5RXJyb3IoKTsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikKIHsKKyAgICBub3RpZnlFcnJvcigpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6
bm90aWZ5RXJyb3IoKQorewogICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICBub3RpZnlGaW5pc2hl
ZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCmluZGV4IGUzYTk2NjMuLmY0
NjVkN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaAor
KysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCkBAIC00MSwxNCArNDIsMjcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50OwogCisgICAgZW51bSBVUkxDb21wbGV0aW9uUG9saWN5IHsK
KyAgICAgICAgQ29tcGxldGVVUkwsCisgICAgICAgIERvTm90Q29tcGxldGVVUkwKKyAgICB9Owor
CisgICAgZW51bSBDcm9zc09yaWdpbkxvYWRQb2xpY3kgeworICAgICAgICBEZW55Q3Jvc3NPcmln
aW5Mb2FkLAorICAgICAgICBBbGxvd0Nyb3NzT3JpZ2luTG9hZAorICAgIH07CisKICAgICBjbGFz
cyBXb3JrZXJTY3JpcHRMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiAg
ICAgcHVibGljOgogICAgICAgICBXb3JrZXJTY3JpcHRMb2FkZXIoKTsKIAotICAgICAgICB2b2lk
IGxvYWRTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7Ci0gICAgICAgIHZvaWQgbG9hZEFzeW5j
aHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHVybCwgQ3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisgICAg
ICAgIHZvaWQgbG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgdXJsLCBVUkxDb21wbGV0aW9uUG9saWN5LCBDcm9zc09yaWdpbkxvYWRQb2xpY3kp
OworICAgICAgICB2b2lkIGxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3JpZ2luTG9h
ZFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Kik7CisKKyAgICAgICAgdm9pZCBub3Rp
ZnlFcnJvcigpOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KICAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsg
fQogICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KIApAQCAtNjAsNiArNzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUGFzc093blB0
cjxSZXNvdXJjZVJlcXVlc3Q+IGNyZWF0ZVJlc291cmNlUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3Jp
Z2luTG9hZFBvbGljeSk7CiAgICAgICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKIAogICAgICAg
ICBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqIG1fY2xpZW50OwpAQCAtNjcsNiArODIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3Jlc3BvbnNlRW5jb2Rpbmc7ICAg
ICAgICAKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKICAg
ICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBLVVJMIG1fdXJsOwogICAgICAgICBib29s
IG1fZmFpbGVkOwogICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32814</attachid>
            <date>2009-07-15 14:33:42 -0700</date>
            <delta_ts>2009-07-15 14:55:30 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25151_4</filename>
            <type>text/plain</type>
            <size>23524</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NzE4YmU3Li4yOGQ5M2M1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNTE1MSAtIHdvcmtlcnMgdGhhdCBmYWls
IHRvIGxvYWQgc2NyaXB0cyBub3QgZmlyaW5nIGVycm9yIGV2ZW50LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxNTEKKworICAgICAgICBVcGRhdGVz
IGxheW91dCB0ZXN0IGNhc2VzIGZvciBidWcgMjUxNTEuCisKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy93b3JrZXJz
L3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy93b3Jr
ZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sOgorCiAyMDA5LTA3LTE0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4
cGVjdGVkLnR4dAppbmRleCA5NzY3OGQxLi5hNTViM2M3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAt
Myw2ICszLDggQEAgVGVzdCBXb3JrZXIgY29uc3RydWN0b3IgZnVuY3Rpb25hbGl0eS4gU2hvdWxk
IHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMsIGYKIFBBU1M6IHRvU3RyaW5nIGV4Y2Vw
dGlvbiBwcm9wYWdhdGVkIGNvcnJlY3RseS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2Vy
cyByZWN1cnNpdmVseSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGlt
dW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25z
dHJ1Y3RvciB3aXRob3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRh
eEVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cykKK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3Ig
YW4gZW1wdHkgc2NyaXB0IFVSTC4KK1BBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gaW52YWxp
ZCBzY3JpcHQgVVJMLgogUEFTUzogb25lcnJvciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNv
dWxkIG5vdCBiZSBsb2FkZWQuCiBET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy93b3JrZXItY29uc3RydWN0b3IuaHRtbAppbmRleCA4ZjhlNzIzLi4yNjQ4OTJmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCkBAIC03
LDQ4ICs3LDEwNSBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkKICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7CiB9CiAKLWlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworZnVuY3Rpb24gcnVuTmV4dFRlc3QoKQoreworICAgIHRlc3RJbmRleCsrOworICAgIGlmICh0
ZXN0SW5kZXggPiB0b3RhbFRlc3RzKSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2YWwoInRlc3Qi
ICsgdGVzdEluZGV4ICsgIigpOyIpOworICAgIH0KIH0KIAotdHJ5IHsKLSAgICBuZXcgV29ya2Vy
KHt0b1N0cmluZzpmdW5jdGlvbigpe3Rocm93ICJleGNlcHRpb24ifX0pCi0gICAgbG9nKCJGQUlM
OiB0b1N0cmluZyBleGNlcHRpb24gbm90IHByb3BhZ2F0ZWQuIik7Ci19IGNhdGNoIChleCkgewot
ICAgIGlmIChleCA9PSAiZXhjZXB0aW9uIikKLSAgICAgICAgbG9nKCJQQVNTOiB0b1N0cmluZyBl
eGNlcHRpb24gcHJvcGFnYXRlZCBjb3JyZWN0bHkuIik7Ci0gICAgZWxzZQotICAgICAgICBsb2co
IkZBSUw6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICgiICsgZXggKyAiKSByZWNlaXZlZCBpbnN0ZWFk
IG9mIG9uZSBwcm9wYWdhdGVkIGZyb20gdG9TdHJpbmcuIik7CitmdW5jdGlvbiB0ZXN0MSgpCit7
CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdvcmtlcih7dG9TdHJpbmc6ZnVuY3Rpb24oKXt0aHJv
dyAiZXhjZXB0aW9uIn19KQorICAgICAgICBsb2coIkZBSUw6IHRvU3RyaW5nIGV4Y2VwdGlvbiBu
b3QgcHJvcGFnYXRlZC4iKTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBpZiAoZXggPT0g
ImV4Y2VwdGlvbiIpCisgICAgICAgICAgICBsb2coIlBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBw
cm9wYWdhdGVkIGNvcnJlY3RseS4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJG
QUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikgcmVjZWl2ZWQgaW5zdGVhZCBv
ZiBvbmUgcHJvcGFnYXRlZCBmcm9tIHRvU3RyaW5nLiIpOworICAgIH0KKyAgICBydW5OZXh0VGVz
dCgpOwogfQogCi10cnkgewotICAgIHZhciBmb28gPSB7dG9TdHJpbmc6ZnVuY3Rpb24oKXtuZXcg
V29ya2VyKGZvbyl9fQotICAgIG5ldyBXb3JrZXIoZm9vKTsKLSAgICBsb2coIkZBSUw6IG5vIGV4
Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVseSIpOwotfSBj
YXRjaCAoZXgpIHsKLSAgICBsb2coIlBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1
cnNpdmVseSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCArICIpIik7CitmdW5jdGlv
biB0ZXN0MigpCit7CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGZvbyA9IHt0b1N0cmluZzpmdW5j
dGlvbigpe25ldyBXb3JrZXIoZm9vKX19CisgICAgICAgIG5ldyBXb3JrZXIoZm9vKTsKKyAgICAg
ICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gY3JlYXRlIHdvcmtlcnMg
cmVjdXJzaXZlbHkiKTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBsb2coIlBBU1M6IHRy
eWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVseSByZXN1bHRlZCBpbiBhbiBleGNlcHRp
b24gKCIgKyBleCArICIpIik7CisgICAgfQorICAgIHJ1bk5leHRUZXN0KCk7CiB9CiAKLXRyeSB7
Ci0gICAgbmV3IFdvcmtlcigpOwotICAgIGxvZygiRkFJTDogaW52b2tpbmcgV29ya2VyIGNvbnN0
cnVjdG9yIHdpdGhvdXQgYXJndW1lbnRzIGRpZCBub3QgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbiIp
OwotfSBjYXRjaCAoZXgpIHsKLSAgICBsb2coIlBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1
Y3RvciB3aXRob3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCAr
ICIpIik7CitmdW5jdGlvbiB0ZXN0MygpCit7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdvcmtl
cigpOworICAgICAgICBsb2coIkZBSUw6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRo
b3V0IGFyZ3VtZW50cyBkaWQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24iKTsKKyAgICB9IGNh
dGNoIChleCkgeworICAgICAgICBsb2coIlBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3Rv
ciB3aXRob3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCArICIp
Iik7CisgICAgfQorICAgIHJ1bk5leHRUZXN0KCk7CiB9CiAKLXRyeSB7Ci0gICAgdmFyIHdvcmtl
ciA9IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7Ci0gICAgd29ya2VyLm9uZXJyb3Ig
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgbG9nKCJQQVNTOiBvbmVycm9yIGludm9rZWQgZm9yIGEg
c2NyaXB0IHRoYXQgY291bGQgbm90IGJlIGxvYWRlZC4iKTsKLSAgICAgICAgbG9nKCJET05FIik7
Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CitmdW5jdGlvbiB0ZXN0NCgpCit7Cisg
ICAgdHJ5IHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoIiIpOworICAgICAgICB3
b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJQQVNTOiBvbmVy
cm9yIGludm9rZWQgZm9yIGFuIGVtcHR5IHNjcmlwdCBVUkwuIik7CisgICAgICAgICAgICBydW5O
ZXh0VGVzdCgpOworICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJG
QUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZXgpOworICAgICAgICBydW5OZXh0VGVzdCgp
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDUoKQoreworICAgIHRyeSB7CisgICAgICAgIHZh
ciB3b3JrZXIgPSBuZXcgV29ya2VyKCJpbnZhbGlkdXJsOi8vIik7CisgICAgICAgIHdvcmtlci5v
bmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBsb2coIlBBU1M6IG9uZXJyb3IgaW52
b2tlZCBmb3IgYW4gaW52YWxpZCBzY3JpcHQgVVJMLiIpOworICAgICAgICAgICAgcnVuTmV4dFRl
c3QoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiRkFJTDog
dW5leHBlY3RlZCBleGNlcHRpb24gIiArIGV4KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q2KCkKK3sKKyAgICB0cnkgeworICAgICAgICB2YXIgd29y
a2VyID0gbmV3IFdvcmtlcigiZG9lcy1ub3QtZXhpc3QuanMiKTsKKyAgICAgICAgd29ya2VyLm9u
ZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxvZygiUEFTUzogb25lcnJvciBpbnZv
a2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIik7CisgICAgICAgICAg
ICBydW5OZXh0VGVzdCgpOworICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAg
bG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZXgpOworICAgICAgICBydW5OZXh0
VGVzdCgpOwogICAgIH0KLX0gY2F0Y2ggKGV4KSB7Ci0gICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVk
IGV4Y2VwdGlvbiAiICsgZXgpOwotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciB0b3RhbFRlc3RzID0gNjsKK3ZhciB0ZXN0SW5kZXggPSAwOworcnVuTmV4dFRlc3Qo
KTsKKwogPC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQudHh0CmluZGV4IGRiZjEz
MmUuLjBiMTViM2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93
b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNiBAQAogVGVz
dCB0aGF0IGxvYWRpbmcgdGhlIHdvcmtlcidzIHNjcmlwdCBkb2VzIG5vdCBhbGxvdyBhIGNyb3Nz
IG9yaWdpbiByZWRpcmVjdCAoYnVnIDI2MTQ2KQogCitTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVu
IGF0dGVtcHRpbmcgdG8gY3Jvc3Mgb3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBzY3Jp
cHQuCiBTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcmVkaXJlY3RlZCBj
cm9zcyBvcmlnaW4gd2hpbGUgbG9hZGluZyB0aGUgd29ya2VyIHNjcmlwdC4KK0RPTkUKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1s
CmluZGV4IDg2MDM3ZjIuLjhmNzIzOWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWwKQEAgLTcsMjIgKzcsNTMgQEAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlu
bmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwogfQogCitmdW5jdGlvbiBydW5OZXh0VGVzdCgp
Cit7CisgICAgdGVzdEluZGV4Kys7CisgICAgaWYgKHRlc3RJbmRleCA+IHRvdGFsVGVzdHMpIHsK
KyAgICAgICAgbG9nKCJET05FIik7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXZhbCgidGVzdCIgKyB0ZXN0SW5kZXggKyAiKCk7Iik7Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MSgpCit7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3Jr
ZXIoJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItcmVkaXJl
Y3QtdGFyZ2V0LmpzJyk7CisgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQpIHsKKyAg
ICAgICAgbG9nKCJTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gY3Jvc3Mg
b3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBzY3JpcHQuIik7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsK
KyAgICAgICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQgd2hlbiByZWRpcmVjdCBjcm9zcyBv
cmlnaW4uIik7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0
ZXN0MigpCit7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJy9yZXNvdXJjZXMvcmVkaXJl
Y3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2Vy
LXJlZGlyZWN0LXRhcmdldC5qcycpOworICAgIHdvcmtlci5vbmVycm9yID0gZnVuY3Rpb24oZXZ0
KSB7CisgICAgICAgIGxvZygiU1VDQ0VTUzogdGhyZXcgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRv
IHJlZGlyZWN0ZWQgY3Jvc3Mgb3JpZ2luIHdoaWxlIGxvYWRpbmcgdGhlIHdvcmtlciBzY3JpcHQu
Iik7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorICAgIHdvcmtlci5vbm1lc3NhZ2Ug
PSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQgd2hl
biByZWRpcmVjdCBjcm9zcyBvcmlnaW4uIik7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorfQorCiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKIH0KIAotdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJy9yZXNvdXJjZXMvcmVk
aXJlY3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29y
a2VyLXJlZGlyZWN0LXRhcmdldC5qcycpOwotd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQp
IHsKLSAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byByZWRp
cmVjdGVkIGNyb3NzIG9yaWdpbiB3aGlsZSBsb2FkaW5nIHRoZSB3b3JrZXIgc2NyaXB0LiIpOwot
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0KLXdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsKLSAgICBsb2coIkZBSUw6IGV4ZWN1dGVkIHNjcmlwdCB3aGVuIHJlZGlyZWN0IGNyb3Nz
IG9yaWdpbi4iKTsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Cit2YXIgdG90YWxUZXN0cyA9
IDI7Cit2YXIgdGVzdEluZGV4ID0gMDsKK3J1bk5leHRUZXN0KCk7CisKIDwvc2NyaXB0PgogPC9i
b2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OGUxMmM4Li5hMjEzOGFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDA5LTA3LTE0
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjUxNTEgLSB3b3JrZXJzIHRoYXQgZmFpbCB0
byBsb2FkIHNjcmlwdHMgbm90IGZpcmluZyBlcnJvciBldmVudC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTUxCisKKyAgICAgICAgVGhpcyBmaXhl
cyB0aGUgcHJvYmxlbSB0aGF0IGFuIGVycm9yIGV2ZW50IGlzIG5vdCBmaXJlZCB3aGVuIHRoZSB3
b3JrZXIKKyAgICAgICAgc2NyaXB0IGZhaWxzIHRvIGxvYWQuIFNvbWUgcmVhc29ucyB0aGlzIG1h
eSBvY2N1ciBhcmUgYW4gaW52YWxpZCBVUkwgZm9yCisgICAgICAgIHRoZSB3b3JrZXIgc2NyaXB0
IG9yIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0LgorCisgICAgICAgIFdlIGFsc28gbW92ZXMgdGhl
IGNvZGUgdG8gY29tcGxldGUgdGhlIFVSTCBhbmQgY2hlY2sgaXRzIG9yaWdpbiBmcm9tCisgICAg
ICAgIFdvcmtlciBjb25zdHJ1Y3RvciB0byBXb3JrZXJTY3JpcHRMb2FkZXIgbG9hZGluZyBmdW5j
dGlvbnMgaW4gb3JkZXIgdG8KKyAgICAgICAgbW92ZSB0aGUgZXhjZXB0aW9uIHRocm93aW5nIGxv
Z2ljIG91dCBvZiB0aGUgc2NvcGUgb2YgV29ya2VyIGNvbnN0cnVjdG9yLgorICAgICAgICBEdWUg
dG8gdGhpcyBjaGFuZ2UsIHdlIGFsc28gcmVtb3ZlIHRoZSBvdXRwdXQgRXhjZXB0aW9uQ29kZSBw
YXJhbWV0ZXIKKyAgICAgICAgaW4gdGhlIHdvcmtlciBjb25zdHJ1Y3Rvci4gQ29ycmVzcG9uZGlu
ZyBKUy9WOCBiaW5kaW5nIGNvZGVzIGhhdmUgYmVlbgorICAgICAgICB1cGRhdGVkIHRvIHJlZmxl
Y3QgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdvcmtlcik6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Oldvcmtlcjo6Y3JlYXRlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyk6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dG9Dcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6bm90aWZ5TG9hZEVycm9yVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRM
b2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJT
Y3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9h
ZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3Jp
cHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUVycm9yKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6dXJsKToKKwogMjAwOS0wNy0xNCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0
cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25z
dHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3Bw
CmluZGV4IDhlYTY3MTguLmQ3MGZjZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckNvbnN0cnVjdG9yLmNwcApAQCAtNTksOSArNTksNyBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0
cnVjdFdvcmtlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJn
cwogCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBSZWZQdHI8V29ya2VyPiB3b3JrZXIgPSBXb3JrZXI6OmNyZWF0ZShzY3JpcHRVUkwsIHdp
bmRvdy0+ZG9jdW1lbnQoKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgUmVmUHRyPFdvcmtlcj4gd29ya2VyID0gV29ya2VyOjpjcmVhdGUoc2NyaXB0VVJMLCB3aW5k
b3ctPmRvY3VtZW50KCkpOwogCiAgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywgd29ya2Vy
LnJlbGVhc2UoKSkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
dXN0b20uY3BwCmluZGV4IDI5YjJkNDMuLjdlYjRmNjAgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTgwLDExICs4MCw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIAogICAgIC8vIENyZWF0ZSB0aGUgd29ya2Vy
IG9iamVjdC4KICAgICAvLyBOb3RlOiBpdCdzIE9LIHRvIGxldCB0aGlzIFJlZlB0ciBnbyBvdXQg
b2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNhbGwgc2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZl
Y3RpdmVseSBob2xkcyBhIHJlZmVyZW5jZSB0byBvYmouCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUmVmUHRyPFdvcmtlcj4gb2JqID0gV29ya2VyOjpjcmVhdGUodG9XZWJDb3JlU3Ry
aW5nKHNjcmlwdFVybCksIGNvbnRleHQsIGVjKTsKLQotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOworICAgIFJlZlB0cjxXb3JrZXI+IG9iaiA9IFdvcmtlcjo6Y3Jl
YXRlKHRvV2ViQ29yZVN0cmluZyhzY3JpcHRVcmwpLCBjb250ZXh0KTsKIAogICAgIC8vIFNldHVw
IHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyT2JqZWN0ID0gYXJncy5Ib2xkZXIoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5j
cHAKaW5kZXggMmUwM2UzZC4uZjI4Y2E0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTUwLDIzICs1MCwx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmlu
ZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKK1dvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAg
LCBtX2NvbnRleHRQcm94eShXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSh0aGlzKSkKIHsKLSAg
ICBtX3NjcmlwdFVSTCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7Ci0gICAgaWYgKHVybC5p
c0VtcHR5KCkgfHwgIW1fc2NyaXB0VVJMLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fc2NyaXB0VVJM
KS5nZXQoKSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBtX3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3JpcHRMb2FkZXIoKTsK
LSAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgbV9zY3JpcHRVUkwsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0LCB0aGlzKTsKKyAg
ICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgdXJsLCBDb21wbGV0ZVVSTCwgRGVueUNyb3NzT3JpZ2luTG9hZCwgdGhpcyk7CiAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90
IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBv
YmplY3QgaXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBpdHMgZXZlbnQgbGlzdGVuZXJzLgog
fQogCkBAIC0xMTcsNyArMTA2LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKICAg
ICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZl
bnQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRl
eHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2Ny
aXB0VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKKyAgICAgICAgbV9jb250ZXh0UHJv
eHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdExvYWRlci0+dXJsKCksIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0TG9hZGVyLT51cmwoKSksIG1fc2NyaXB0
TG9hZGVyLT5zY3JpcHQoKSk7CiAKICAgICBtX3NjcmlwdExvYWRlciA9IDA7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaApp
bmRleCAxZmNjOGJlLi5iZGUyN2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIldvcmtl
clNjcmlwdExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNTEsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXI+LCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCwgcHVibGlj
IEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdv
cmtlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlcih1
cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXIodXJsLCBjb250ZXh0KSk7IH0KICAgICAgICAg
fldvcmtlcigpOwogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC04OCwxNCArODcsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4g
bV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFdvcmtl
cihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICBXb3JrZXIoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgICAgICBLVVJMIG1fc2Ny
aXB0VVJMOwogICAgICAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRl
cjsKIAogICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUg
cHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA4ZTlmYjk3Li41ZmNjMDgwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBXb3JrZXJDb250ZXh0
OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcm
IGNhbGwKIAogICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvbXBs
ZXRlZFVSTHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFdvcmtlclNjcmlw
dExvYWRlciBzY3JpcHRMb2FkZXI7Ci0gICAgICAgIHNjcmlwdExvYWRlci5sb2FkU3luY2hyb25v
dXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppdCwgQWxsb3dDcm9zc09yaWdpblJlZGly
ZWN0KTsKKyAgICAgICAgc2NyaXB0TG9hZGVyLmxvYWRTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKml0LCBEb05vdENvbXBsZXRlVVJMLCBBbGxvd0Nyb3NzT3JpZ2luTG9h
ZCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFpbGVkLCB0aHJvdyBh
IE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0ZXBzLgogICAgICAg
ICBpZiAoc2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuY3BwCmluZGV4IDg3MzdiODguLjA5M2JmMDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuY3BwCkBAIC0zMSwxMiArMzEsMTUgQEAKIAogI2luY2x1ZGUgIldvcmtlclNj
cmlwdExvYWRlci5oIgogCisjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2Vy
VGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NywyNCArNTAs
NTkgQEAgV29ya2VyU2NyaXB0TG9hZGVyOjpXb3JrZXJTY3JpcHRMb2FkZXIoKQogewogfQogCi12
b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK3N0YXRpYyBD
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5IHRvQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShDcm9z
c09yaWdpbkxvYWRQb2xpY3kgY3Jvc3NPcmlnaW5Mb2FkUG9saWN5KQogewotICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsK
KyAgICByZXR1cm4gKGNyb3NzT3JpZ2luTG9hZFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5Mb2Fk
KSA/IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IDogQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0Owor
fQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmws
IFVSTENvbXBsZXRpb25Qb2xpY3kgdXJsQ29tcGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2Fk
UG9saWN5IGNyb3NzT3JpZ2luTG9hZFBvbGljeSkKK3sKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1
ZXN0PiByZXF1ZXN0KGNyZWF0ZVJlc291cmNlUmVxdWVzdChzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCB1cmwsIHVybENvbXBsZXRpb25Qb2xpY3ksIGNyb3NzT3JpZ2luTG9hZFBvbGljeSkpOworICAg
IGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgcmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCAqcmVxdWVzdCwgKnRoaXMsIEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMsIHRvQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShjcm9zc09yaWdpbkxv
YWRQb2xpY3kpKTsKIH0KICAgICAKLXZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNo
cm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y29uc3QgU3RyaW5nJiB1cmwsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQpCit2b2lkIFdv
cmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBVUkxDb21wbGV0
aW9uUG9saWN5IHVybENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3JpZ2luTG9hZFBvbGljeSBjcm9z
c09yaWdpbkxvYWRQb2xpY3ksIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogY2xpZW50KQogewog
ICAgIEFTU0VSVChjbGllbnQpOwogICAgIG1fY2xpZW50ID0gY2xpZW50OwogCi0gICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIp
OworICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IHJlcXVlc3QoY3JlYXRlUmVzb3VyY2VSZXF1
ZXN0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHVybCwgdXJsQ29tcGxldGlvblBvbGljeSwgY3Jv
c3NPcmlnaW5Mb2FkUG9saWN5KSk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47
CiAKLSAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENhbGxiYWNr
cywgRG9Ob3RTbmlmZkNvbnRlbnQsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kpOworICAgIG1fdGhyZWFkYWJsZUxvYWRlciA9IFRocmVhZGFibGVMb2Fk
ZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0aGlzLCAqcmVxdWVzdCwgRG9Ob3RT
ZW5kTG9hZENhbGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMsIHRvQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShjcm9zc09yaWdpbkxvYWRQb2xpY3kpKTsK
K30KKworc3RhdGljIHZvaWQgbm90aWZ5TG9hZEVycm9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBXb3JrZXJTY3JpcHRMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CisgICAgbG9hZGVyLT5ub3RpZnlFcnJvcigpOworfQorCitQYXNzT3du
UHRyPFJlc291cmNlUmVxdWVzdD4gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGVSZXNvdXJjZVJl
cXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29u
c3QgU3RyaW5nJiB1cmwsIFVSTENvbXBsZXRpb25Qb2xpY3kgdXJsQ29tcGxldGlvblBvbGljeSwg
Q3Jvc3NPcmlnaW5Mb2FkUG9saWN5IGNyb3NzT3JpZ2luTG9hZFBvbGljeSkKK3sKKyAgICBpZiAo
dXJsQ29tcGxldGlvblBvbGljeSA9PSBDb21wbGV0ZVVSTCkgeworICAgICAgICBtX3VybCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7CisgICAgICAgIGlmICh1cmwu
aXNFbXB0eSgpIHx8ICFtX3VybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmbm90aWZ5TG9hZEVycm9y
VGFzaywgdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgbV91cmwgPSBLVVJMKHVybCk7CisKKyAgICBpZiAoY3Jvc3NPcmlnaW5Mb2Fk
UG9saWN5ID09IERlbnlDcm9zc09yaWdpbkxvYWQgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fdXJs
KS5nZXQoKSkpIHsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZub3RpZnlMb2FkRXJyb3JUYXNrLCB0aGlzKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IHJlcXVlc3QobmV3
IFJlc291cmNlUmVxdWVzdChtX3VybCkpOworICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoIkdF
VCIpOworCisgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogICAgIAogdm9pZCBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKQEAgLTExMSwxOCArMTQ5LDIxIEBAIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIAogdm9pZCBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7Ci0gICAgbV9m
YWlsZWQgPSB0cnVlOwotICAgIG5vdGlmeUZpbmlzaGVkKCk7CisgICAgbm90aWZ5RXJyb3IoKTsK
IH0KIAogdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWxSZWRpcmVjdENoZWNrKCkKIHsK
LSAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgbm90aWZ5RmluaXNoZWQoKTsKKyAgICBub3RpZnlF
cnJvcigpOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQogeworICAgIG5vdGlm
eUVycm9yKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlFcnJvcigpCit7
CiAgICAgbV9mYWlsZWQgPSB0cnVlOwogICAgIG5vdGlmeUZpbmlzaGVkKCk7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmggYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKaW5kZXggZTNhOTY2My4uZjQ2NWQ3ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCisrKyBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgRU5BQkxF
KFdPUktFUlMpCiAKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKQEAgLTQxLDE0ICs0MiwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBXb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQ7CiAKKyAgICBlbnVtIFVSTENvbXBsZXRpb25Qb2xpY3kgeworICAgICAgICBDb21wbGV0
ZVVSTCwKKyAgICAgICAgRG9Ob3RDb21wbGV0ZVVSTAorICAgIH07CisKKyAgICBlbnVtIENyb3Nz
T3JpZ2luTG9hZFBvbGljeSB7CisgICAgICAgIERlbnlDcm9zc09yaWdpbkxvYWQsCisgICAgICAg
IEFsbG93Q3Jvc3NPcmlnaW5Mb2FkCisgICAgfTsKKwogICAgIGNsYXNzIFdvcmtlclNjcmlwdExv
YWRlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIFdvcmtlclNjcmlwdExvYWRlcigpOwogCi0gICAgICAgIHZvaWQgbG9hZFN5bmNocm9ub3Vz
bHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KTsKLSAgICAgICAgdm9pZCBsb2FkQXN5bmNocm9ub3VzbHkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdXJsLCBDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqKTsKKyAgICAgICAgdm9pZCBsb2FkU3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIFVS
TENvbXBsZXRpb25Qb2xpY3ksIENyb3NzT3JpZ2luTG9hZFBvbGljeSk7CisgICAgICAgIHZvaWQg
bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IHVybCwgVVJMQ29tcGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5LCBXb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQqKTsKKworICAgICAgICB2b2lkIG5vdGlmeUVycm9yKCk7CiAKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdDsgfQor
ICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogICAgICAg
ICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAgICAgICAgIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCkBA
IC02MCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBQYXNzT3duUHRyPFJlc291cmNlUmVxdWVz
dD4gY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIHVybCwgVVJMQ29tcGxldGlvblBvbGljeSwgQ3Jvc3NPcmlnaW5Mb2FkUG9saWN5KTsK
ICAgICAgICAgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwogCiAgICAgICAgIFdvcmtlclNjcmlwdExv
YWRlckNsaWVudCogbV9jbGllbnQ7CkBAIC02Nyw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgU3RyaW5nIG1fcmVzcG9uc2VFbmNvZGluZzsgICAgICAgIAogICAgICAgICBS
ZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwogICAgICAgICBTdHJpbmcgbV9z
Y3JpcHQ7CisgICAgICAgIEtVUkwgbV91cmw7CiAgICAgICAgIGJvb2wgbV9mYWlsZWQ7CiAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOwogICAgIH07Cg==
</data>
<flag name="review"
          id="17175"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>