<?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>39145</bug_id>
          
          <creation_ts>2010-05-14 18:02:55 -0700</creation_ts>
          <short_desc>Add v8 bindings for async DB API in workers</short_desc>
          <delta_ts>2010-06-01 11:52:03 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>34992</dependson>
    
    <dependson>38742</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>dumi</cc>
    
    <cc>jochen</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226085</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-14 18:02:55 -0700</bug_when>
    <thetext>It&apos;s in the commit queue for JSC right now, as is the needed support for canEstablishDatabase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226099</commentid>
    <comment_count>1</comment_count>
      <attachid>56130</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-14 19:10:19 -0700</bug_when>
    <thetext>Created attachment 56130
Reviewable, but not committable, patch.

This patch is a standalone, testable implementation of the V8 bindings, which will apply, build, and run in Chromium [although not quite build in WebKit+JSC].  This bug is blocked on two CLs currently in the commit queue.  Once they&apos;re in, I&apos;ll reformulate this patch to assume their existence, and then everything will coexist happily.  But I wanted to get this up for general review without waiting for the queue, which currently has quite a backlog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226103</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-14 19:17:24 -0700</bug_when>
    <thetext>Attachment 56130 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2287081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226130</commentid>
    <comment_count>3</comment_count>
      <attachid>56130</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-14 21:27:31 -0700</bug_when>
    <thetext>Comment on attachment 56130
Reviewable, but not committable, patch.

I really like the direction this patch is going.  Please run-bindings-tests --reset-results so we can see the effect of your change to the CodeGenerator in the review.  Minor complains below.

WebCore/bindings/scripts/CodeGeneratorV8.pm:2274
 +              push(@implContent, &quot;    return !invokeCallback(m_callback, &quot; .  scalar(@params). &quot;, argv, callbackReturnValue, context);\n&quot;);
Why did you add a second space before &quot;scalar&quot;?  Also, I think we need a space &quot;after params)&quot;

WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:65
 +  bool invokeCallback(v8::Persistent&lt;v8::Object&gt; callback, int argc, v8::Handle&lt;v8::Value&gt; argv[], bool&amp; callbackReturnValue, ScriptExecutionContext* executionContext)
I think we either call it a &quot;context&quot; or a &quot;scriptExecutionContext&quot; but not really an &quot;executionContext&quot;.

WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:96
 +  }
Why did you remove this namespace comment?  We have these in most files.

WebCore/bindings/v8/custom/V8CustomVoidCallback.h:45
 +      static PassRefPtr&lt;V8CustomVoidCallback&gt; create(v8::Local&lt;v8::Value&gt; value, ScriptExecutionContext *context)
The * goes next to ScriptExecutionContext not next to context.

WebCore/bindings/v8/custom/V8CustomVoidCallback.h:55
 +      V8CustomVoidCallback(v8::Local&lt;v8::Object&gt;, ScriptExecutionContext *context);
ditto

WebCore/bindings/v8/custom/V8CustomVoidCallback.h:62
 +  bool invokeCallback(v8::Persistent&lt;v8::Object&gt; callback, int argc, v8::Handle&lt;v8::Value&gt; argv[], bool&amp; callbackReturnValue, ScriptExecutionContext* executionContext);
Same comment about &quot;executionContext&quot;

WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp:93
 +          callback = V8CustomVoidCallback::create(args[0], context);
Can these be different?  Where does the context come from?

WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp:147
 +  v8::Handle&lt;v8::Value&gt; V8WorkerContext::openDatabaseCallback(const v8::Arguments&amp; args)
This method looks like it can be autogenerated.

WebKit/chromium/src/DatabaseObserver.cpp:54
 +      // ASSERT(scriptExecutionContext-&gt;isDocument());
Please don&apos;t comment out code.  If this assert is now bogus, we can remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228124</commentid>
    <comment_count>4</comment_count>
      <attachid>56544</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-19 18:13:38 -0700</bug_when>
    <thetext>Created attachment 56544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228126</commentid>
    <comment_count>5</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-19 18:16:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 56130 [details])
&gt; I really like the direction this patch is going.  Please run-bindings-tests --reset-results so we can see the effect of your change to the CodeGenerator in the review.  Minor complains below.

Done.  Wow, I didn&apos;t know about that.

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2274
&gt;  +              push(@implContent, &quot;    return !invokeCallback(m_callback, &quot; .  scalar(@params). &quot;, argv, callbackReturnValue, context);\n&quot;);
&gt; Why did you add a second space before &quot;scalar&quot;?  Also, I think we need a space &quot;after params)&quot;

Fixed; I think that may have happened when I brought the changelist between machines.

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:65
&gt;  +  bool invokeCallback(v8::Persistent&lt;v8::Object&gt; callback, int argc, v8::Handle&lt;v8::Value&gt; argv[], bool&amp; callbackReturnValue, ScriptExecutionContext* executionContext)
&gt; I think we either call it a &quot;context&quot; or a &quot;scriptExecutionContext&quot; but not really an &quot;executionContext&quot;.

Renamed, in a number of places.

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:96
&gt;  +  }
&gt; Why did you remove this namespace comment?  We have these in most files.

Accident--fixed.

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.h:45
&gt;  +      static PassRefPtr&lt;V8CustomVoidCallback&gt; create(v8::Local&lt;v8::Value&gt; value, ScriptExecutionContext *context)
&gt; The * goes next to ScriptExecutionContext not next to context.

Ditto.

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.h:55
&gt;  +      V8CustomVoidCallback(v8::Local&lt;v8::Object&gt;, ScriptExecutionContext *context);
&gt; ditto

Ditto.

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.h:62
&gt;  +  bool invokeCallback(v8::Persistent&lt;v8::Object&gt; callback, int argc, v8::Handle&lt;v8::Value&gt; argv[], bool&amp; callbackReturnValue, ScriptExecutionContext* executionContext);
&gt; Same comment about &quot;executionContext&quot;

Ditto.

&gt; WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp:93
&gt;  +          callback = V8CustomVoidCallback::create(args[0], context);
&gt; Can these be different?  Where does the context come from?

Can what be different?  I&apos;m not sure what you&apos;re talking about.

&gt; WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp:147
&gt;  +  v8::Handle&lt;v8::Value&gt; V8WorkerContext::openDatabaseCallback(const v8::Arguments&amp; args)
&gt; This method looks like it can be autogenerated.

In another changelist perhaps, that covers openDatabaseCallback and openDatabaseSyncCallback?

&gt; WebKit/chromium/src/DatabaseObserver.cpp:54
&gt;  +      // ASSERT(scriptExecutionContext-&gt;isDocument());
&gt; Please don&apos;t comment out code.  If this assert is now bogus, we can remove it.

No worries--that&apos;s code that was about to go away due to one of the CLs in the commit queue.  It&apos;s all gone now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230781</commentid>
    <comment_count>6</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-26 11:22:59 -0700</bug_when>
    <thetext>Ping?
Incidentally, all the dependencies have landed, so the latest patch should be committable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230783</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-26 11:24:45 -0700</bug_when>
    <thetext>Looking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230786</commentid>
    <comment_count>8</comment_count>
      <attachid>56544</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-26 11:29:08 -0700</bug_when>
    <thetext>Comment on attachment 56544
Patch

Fantastic.  I love it.

WebCore/bindings/scripts/CodeGeneratorV8.pm:2150
 +      static PassRefPtr&lt;${className}&gt; create(v8::Local&lt;v8::Value&gt; value)
Nice.  Whenever we can remove Frame* from the bindings, we&apos;re doing something right.

WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:55
 +      v8::Handle&lt;v8::Context&gt; v8Context = toV8Context(m_scriptExecutionContext.get(), WorldContextHandle(UseCurrentWorld));
I&apos;m not sure the &quot;WorldContextHandle(UseCurrentWorld)&quot; part is right.  Is there other code that uses this pattern?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230796</commentid>
    <comment_count>9</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-26 11:35:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 56544 [details])
&gt; Fantastic.  I love it.
&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2150
&gt;  +      static PassRefPtr&lt;${className}&gt; create(v8::Local&lt;v8::Value&gt; value)
&gt; Nice.  Whenever we can remove Frame* from the bindings, we&apos;re doing something right.
&gt; 
&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:55
&gt;  +      v8::Handle&lt;v8::Context&gt; v8Context = toV8Context(m_scriptExecutionContext.get(), WorldContextHandle(UseCurrentWorld));
&gt; I&apos;m not sure the &quot;WorldContextHandle(UseCurrentWorld)&quot; part is right.  Is there other code that uses this pattern?

IIRC I had to ask dglazkov [+CC] what to use there, and that&apos;s what he suggested.  That was 4-5 months ago, though, so I don&apos;t know if that&apos;s changed.

BTW I&apos;m not a committer, so I&apos;ll need you to CQ+ or land this for me if the WorldContextHandle isn&apos;t a blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230803</commentid>
    <comment_count>10</comment_count>
      <attachid>56544</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-26 11:56:12 -0700</bug_when>
    <thetext>Comment on attachment 56544
Patch

It hasn&apos;t changed.  If dglazkov said that&apos;s right, then it is.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231192</commentid>
    <comment_count>11</comment_count>
      <attachid>56544</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-27 02:24:44 -0700</bug_when>
    <thetext>Comment on attachment 56544
Patch

Rejecting patch 56544 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Adam Barth&apos;, u&apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
s/v8/custom/V8DOMWindowCustom.cpp
patching file WebCore/bindings/v8/custom/V8DatabaseCustom.cpp
patching file WebCore/bindings/v8/custom/V8DatabaseSyncCustom.cpp
patching file WebCore/bindings/v8/custom/V8NotificationCenterCustom.cpp
patching file WebCore/bindings/v8/custom/V8SQLTransactionCustom.cpp
patching file WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
patching file WebKit/chromium/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file WebKit/chromium/src/DatabaseObserver.cpp

Full output: http://webkit-commit-queue.appspot.com/results/2502064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231362</commentid>
    <comment_count>12</comment_count>
      <attachid>57258</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-27 10:54:26 -0700</bug_when>
    <thetext>Created attachment 57258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231364</commentid>
    <comment_count>13</comment_count>
      <attachid>57258</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-27 10:55:19 -0700</bug_when>
    <thetext>Comment on attachment 57258
Patch

Resolved recent changes; this is the exact same patch.  It should apply cleanly now [fingers crossed].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231497</commentid>
    <comment_count>14</comment_count>
      <attachid>57258</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-27 16:22:04 -0700</bug_when>
    <thetext>Comment on attachment 57258
Patch

Clearing flags on attachment: 57258

Committed r60330: &lt;http://trac.webkit.org/changeset/60330&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231498</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-27 16:22:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232292</commentid>
    <comment_count>16</comment_count>
      <attachid>57443</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-31 02:23:13 -0700</bug_when>
    <thetext>Created attachment 57443
patch: fix the world context

&gt; WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:55
&gt;  +      v8::Handle&lt;v8::Context&gt; v8Context = toV8Context(m_scriptExecutionContext.get(), WorldContextHandle(UseCurrentWorld));
&gt; I&apos;m not sure the &quot;WorldContextHandle(UseCurrentWorld)&quot; part is right.  Is there other code that uses this pattern?

Turns out Adam was right. We should save the context in which the callback is created and run the callback in that context, instead of the context in which handleEvent() is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232295</commentid>
    <comment_count>17</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-31 02:28:45 -0700</bug_when>
    <thetext>Reopening bug until the latest patch is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232876</commentid>
    <comment_count>18</comment_count>
      <attachid>57443</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-01 11:43:54 -0700</bug_when>
    <thetext>Comment on attachment 57443
patch: fix the world context

That makes more sense to me.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232881</commentid>
    <comment_count>19</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 11:52:03 -0700</bug_when>
    <thetext>The fix to V8CustomVoidCallback was landed in r60492. Re-closing the bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56130</attachid>
            <date>2010-05-14 19:10:19 -0700</date>
            <delta_ts>2010-05-19 18:13:33 -0700</delta_ts>
            <desc>Reviewable, but not committable, patch.</desc>
            <filename>mac.patch</filename>
            <type>text/plain</type>
            <size>24818</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTUwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDUtMTQgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdjggYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiB3b3JrZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0NQorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gIFRoaXMgc2hvdWxkIHNoYXJlIGxheW91dCB0ZXN0cyB3aXRoIEpTQy4KKworICAg
ICAgICBUd2VhayB0aGUgY2FsbGJhY2sgZ2VuZXJhdGlvbiB0byBzd2l0Y2ggbG90cyBvZiBGcmFt
ZSogdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGFuZCB1c2UgdGhlIGNvbnRleHQgcGFzc2Vk
IGluIHRvIGhhbmRsZUV2ZW50IHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorCisgICAgICAgIEFzIHdpdGggQ29kZUdlbmVyYXRv
clY4OyB0aGVzZSBhcmUgcHJldHR5IG11Y2ggYWxsIHRpbnkgdHdlYWtzLgorICAgICAgICBXZSBk
byBoYXZlIHRvIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRjaCBmb3IgY2FsbGJhY2sgaW52
b2NhdGlvbiBpbiBpbnZva2VDYWxsYmFjaywgYXMgVjhQcm94eTo6cmV0cmlldmUoKSBkb2Vzbid0
IHdvcmsgaW4gdGhlIHdvcmtlciBjb250ZXh0LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9t
Vm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tVm9pZENhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnZva2VDYWxsYmFjayk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxD
YWxsYmFjayk6CisKKyAgICAgICAgQWRkIG9wZW5EYXRhYmFzZUNhbGxiYWNrLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayk6CisgICAgICAg
IFJlbW92ZSBhbiBvYnNvbGV0ZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtl
ckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmNDYWxsYmFjayk6CisKKyAgICAgICAgQWRkIHRoZSBh
Y3R1YWwgYmluZGluZy0tdGhpcyBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGNoZWNrZWQgaW4gaW4g
YW5vdGhlciBwYXRjaCwgYnV0IEkgYWRkIGl0IGhlcmUgc28gdGhhdCBJIGNhbiB0ZXN0LgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisKIDIwMTAtMDUtMTQgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTU0LDE1ICsyMTU0LDE0IEBAIHN1YiBH
ZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPlxuIik7CiAgICAgCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxu
bmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xh
c3MgRnJhbWU7XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NO
YW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOwogCiAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgPDxFTkQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7Y2xhc3NOYW1l
fT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8JHtjbGFzc05hbWV9PiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOwotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NOYW1lfSh2YWx1ZS0+VG9PYmplY3QoKSwg
ZnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFtZX0odmFsdWUt
PlRvT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH4ke2NsYXNzTmFtZX0oKTsKQEAg
LTIxOTIsMTAgKzIxOTEsOSBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7
CiAKIHByaXZhdGU6Ci0gICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJh
bWUqKTsKKyAgICAke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+KTsKIAogICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgIFdvcmxkQ29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKQEAg
LTIyMTgsMTUgKzIyMTYsMTMgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgog
ICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKICAgICBwdXNoKEBpbXBsRml4ZWRI
ZWFkZXIsIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVyKCRkYXRhTm9kZSkpOwog
ICAgICAgICAgCi0gICAgJGltcGxJbmNsdWRlc3siRnJhbWUuaCJ9ID0gMTsKICAgICAkaW1wbElu
Y2x1ZGVzeyJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRl
c3siVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCJ9ID0gMTsKIAogICAgIHB1c2goQGltcGxDb250ZW50
LCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOwotJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNh
bGxiYWNrLCBGcmFtZSogZnJhbWUpCiske2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2ODo6TG9j
YWw8djg6Ok9iamVjdD4gY2FsbGJhY2spCiAgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQotICAgICwgbV9mcmFtZShmcmFtZSkKICAgICAs
IG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KQEAgLTIyNzQsOSArMjI3MCw4
IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIixcbiIsIEBhcmd2
cykpOwogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIH07XG5cbiIpOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0
KG1fZnJhbWUpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJv
b2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBz
Y2FsYXIoQHBhcmFtcykuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1f
Y2FsbGJhY2ssICIgLiAgc2NhbGFyKEBwYXJhbXMpLiAiLCBhcmd2LCBjYWxsYmFja1JldHVyblZh
bHVlLCBjb250ZXh0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4i
KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gNTk1MDUp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgVjhDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrOjpoYW5kbGVFdmUKICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1l
KTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIGludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOworICAgIGlu
dm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1f
ZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1OTUwNSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
OjpoYW5kCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAKICAgICBib29s
IGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxi
YWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKKyAgICBpbnZva2VDYWxsYmFjayht
X2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1OTUwNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDkgKzM0LDkgQEAKIAogI2luY2x1ZGUgIlY4U1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTUUxFcnJvci5oIgogI2luY2x1ZGUgIlY4U1FMVHJhbnNh
Y3Rpb24uaCIKIApAQCAtNTcsMTUgKzU3LDE1IEBAIGJvb2wgVjhTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrOjpoYW5kbGUKICAgICAgICAgdG9WOChlcnJvcikKICAgICB9OwogCi0gICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVmUHRyPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAgLy8gUHJvdGVjdCB0aGUgY29udGV4dCB1bnRp
bCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gcHJvdGVjdG9yKGNvbnRleHQpOwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0g
ZmFsc2U7CiAgICAgLy8gU3RlcCA2OiBJZiB0aGUgZXJyb3IgY2FsbGJhY2sgcmV0dXJucyBmYWxz
ZSwgdGhlbiBtb3ZlIG9uIHRvIHRoZSBuZXh0CiAgICAgLy8gc3RhdGVtZW50LCBpZiBhbnksIG9y
IG9udG8gdGhlIG5leHQgb3ZlcmFsbCBzdGVwIG90aGVyd2lzZS4gT3RoZXJ3aXNlLAogICAgIC8v
IHRoZSBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSwgb3IgdGhlcmUgd2FzIG5v
IGVycm9yIGNhbGxiYWNrLgogICAgIC8vIEp1bXAgdG8gdGhlIGxhc3Qgc3RlcCBpbiB0aGUgb3Zl
cmFsbCBzdGVwcy4KLSAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMiwgYXJn
diwgY2FsbGJhY2tSZXR1cm5WYWx1ZSkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKKyAgICByZXR1
cm4gaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1
ZSwgY29udGV4dCkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tVm9pZENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE0ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9p
ZENhbGxiYWNrLmgiCiAKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3Vz
dG9tVm9pZENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZy
YW1lKQorVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAqY29udGV4dCkK
ICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFj
aykpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9leGVjdXRpb25Db250ZXh0KGNvbnRl
eHQpCiB7CiB9CiAKQEAgLTUxLDIwICs1MiwxNyBAQCB2b2lkIFY4Q3VzdG9tVm9pZENhbGxiYWNr
OjpoYW5kbGVFdmVudCgpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0g
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQobV9m
cmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KG1fZXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSwgV29ybGRDb250ZXh0SGFuZGxlKFVzZUN1cnJlbnRXb3JsZCkpOworICAgIGlmICh2OENv
bnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUoY29udGV4dCk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUg
Y2FsbGJhY2sgcmV0dXJucy4KLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsK
KyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAogICAgIGJvb2wgY2Fs
bGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ss
IDAsIDAsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOworICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDAsIDAsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fZXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7
CiB9CiAKLWJvb2wgaW52b2tlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gY2Fs
bGJhY2ssIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdLCBib29sJiBjYWxs
YmFja1JldHVyblZhbHVlKQorYm9vbCBpbnZva2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBjYWxsYmFjaywgaW50IGFyZ2MsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10s
IGJvb2wmIGNhbGxiYWNrUmV0dXJuVmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1
dGlvbkNvbnRleHQpCiB7CiAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAKQEAg
LTgzLDE5ICs4MSwxNiBAQCBib29sIGludm9rZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpP
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRoaXNPYmplY3QgPSB2ODo6Q29udGV4dDo6
R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsKIAotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUoKTsKLSAgICBBU1NFUlQocHJveHkpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlc3VsdCA9IHByb3h5LT5jYWxsRnVuY3Rpb24oY2FsbGJhY2tGdW5jdGlvbiwgdGhpc09i
amVjdCwgYXJnYywgYXJndik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGNh
bGxiYWNrRnVuY3Rpb24tPkNhbGwodGhpc09iamVjdCwgYXJnYywgYXJndik7CiAgICAgY2FsbGJh
Y2tSZXR1cm5WYWx1ZSA9ICFyZXN1bHQuSXNFbXB0eSgpICYmIHJlc3VsdC0+Qm9vbGVhblZhbHVl
KCk7Ci0KKyAgICAKICAgICBpZiAoZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkgewogICAg
ICAgICB2ODo6TG9jYWw8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UgPSBleGNlcHRpb25DYXRjaGVyLk1l
c3NhZ2UoKTsKLSAgICAgICAgcHJveHktPmZyYW1lKCktPmRvY3VtZW50KCktPnJlcG9ydEV4Y2Vw
dGlvbih0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0KCkpLCBtZXNzYWdlLT5HZXRMaW5lTnVt
YmVyKCksIHRvV2ViQ29yZVN0cmluZyhtZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKSkp
OworICAgICAgICBleGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24odG9XZWJDb3JlU3Ry
aW5nKG1lc3NhZ2UtPkdldCgpKSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCB0b1dlYkNvcmVT
dHJpbmcobWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCkpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCit9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRD
YWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tVm9pZENhbGxiYWNrLmgJKHJldmlzaW9uIDU5NTA1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjgg
KzM4LDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7CitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBWOEN1c3RvbVZvaWRDYWxsYmFjayA6IHB1
YmxpYyBWb2lkQ2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4Q3Vz
dG9tVm9pZENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIEZyYW1l
KiBmcmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVZvaWRDYWxsYmFjaz4gY3Jl
YXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0ICpj
b250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOEN1c3RvbVZvaWRDYWxsYmFjayh2YWx1ZS0+VG9PYmpl
Y3QoKSwgZnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOEN1c3RvbVZvaWRD
YWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgY29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFs
IH5WOEN1c3RvbVZvaWRDYWxsYmFjaygpOwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50
KCk7CiAKIHByaXZhdGU6Ci0gICAgVjhDdXN0b21Wb2lkQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpP
YmplY3Q+LCBGcmFtZSopOworICAgIFY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAqY29udGV4dCk7CiAKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFt
ZTsKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9leGVjdXRpb25Db250ZXh0
OwogfTsKIAogLy8gUmV0dXJucyBmYWxzZSBpZiBjYWxsYmFjayBmYWlsZWQgKG51bGwsIHdyb25n
IHR5cGUsIG9yIHRocmV3IGV4Y2VwdGlvbikuCi1ib29sIGludm9rZUNhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGFyZ3ZbXSwgYm9vbCYgY2FsbGJhY2tSZXR1cm5WYWx1ZSk7Citib29sIGludm9rZUNhbGxi
YWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBpbnQgYXJnYywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSwgYm9vbCYgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29udGV4dCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6Om9wZW5ECiAgICAgICAgIGlm
ICghYXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFz
ZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgaW1wLT5mcmFtZSgpKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOwogICAgIH0K
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDU5NTA1KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDggKzU1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNo
YW5nZQogCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhEYXRhYmFzZTo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yQ3VycmVudENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQorICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2s7CkBA
IC02NCw3ICs2NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNlOjpjaGFuZ2UK
ICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNhbGxiYWNrID0gVjhTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgZnJhbWUpOworICAgICAgICBjYWxs
YmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOwogICAgIH0K
IAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
azsKQEAgLTcyLDcgKzcyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNo
YW5nZQogICAgICAgICBpZiAoIWFyZ3NbM10tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgZXJyb3JDYWxsYmFj
ayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgZnJhbWUp
OworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzNdKTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjazsKQEAgLTgwLDcgKzgwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RGF0YWJhc2U6OmNoYW5nZQogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAg
ICAgICAgc3VjY2Vzc0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0ZShhcmdz
WzRdLCBmcmFtZSk7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxi
YWNrOjpjcmVhdGUoYXJnc1s0XSwgZXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgZGF0
YWJhc2UtPmNoYW5nZVZlcnNpb24ob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgY2FsbGJhY2sucmVs
ZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2Uo
KSk7CkBAIC05OCwxOCArOTgsMTcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVh
dGVUcmFucwogCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhEYXRhYmFzZTo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZy
YW1lRm9yQ3VycmVudENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQorICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sg
PSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBmcmFtZSk7CisgICAg
UmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKIAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+
IDEgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMV0pKSB7CiAgICAgICAgIGlmICghYXJnc1sx
XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFU
Q0hfRVJSKTsKIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBmcmFtZSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sg
PSBWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOwogICAgIH0K
IAogICAgIFJlZlB0cjxWOEN1c3RvbVZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrOwpAQCAt
MTE3LDcgKzExNiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMK
ICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9
IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgZnJhbWUpOworICAgICAgICBz
dWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIGV4
ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxs
YmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2su
cmVsZWFzZSgpLCByZWFkT25seSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA1OTUwNSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFz
ZVN5bmM6OmNoCiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjYWxsYmFj
ayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCAwKTsKKyAg
ICAgICAgY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJn
c1syXSk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03OCw3ICs3OCw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMKIAogICAgIERhdGFi
YXNlU3luYyogZGF0YWJhc2UgPSBWOERhdGFiYXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAKLSAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgMCk7CisgICAg
UmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwg
cmVhZE9ubHksIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZp
Y2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU5NTA1KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE5vdGlmaWNhdGlvbkNlbnQKICAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNhbGxiYWNrIG11c3QgYmUgb2YgdmFsaWQg
dHlwZS4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogIAotICAgICAgICBjYWxsYmFjayA9IFY4Q3Vz
dG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgVjhQcm94eTo6cmV0cmlldmVGcmFtZUZv
ckN1cnJlbnRDb250ZXh0KCkpOworICAgICAgICBjYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxi
YWNrOjpjcmVhdGUoYXJnc1swXSwgY29udGV4dCk7CiAgICAgfQogCiAgICAgbm90aWZpY2F0aW9u
Q2VudGVyLT5yZXF1ZXN0UGVybWlzc2lvbihjYWxsYmFjay5yZWxlYXNlKCkpOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU5NTA1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDI0ICs4OSwyMiBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAKICAgICBTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24gPSBWOFNRTFRyYW5zYWN0aW9uOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JD
dXJyZW50Q29udGV4dCgpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNv
bnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFleGVjdXRpb25D
b250ZXh0KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIg
JiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMl0pKSB7CiAgICAgICAgIGlmICghYXJnc1syXS0+
SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hf
RVJSKTsKLQotICAgICAgICBpZiAoZnJhbWUpCi0gICAgICAgICAgICBjYWxsYmFjayA9IFY4U1FM
U3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBmcmFtZSk7CisgICAgICAgIGNhbGxi
YWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOwogICAgIH0KIAog
ICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMyAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1szXSkpIHsK
ICAgICAgICAgaWYgKCFhcmdzWzNdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotCi0gICAgICAgIGlmIChmcmFtZSkKLSAgICAg
ICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzNdLCBmcmFtZSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0LmgiCiAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJWOERhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhEYXRh
YmFzZVN5bmMuaCIKICNlbmRpZgpAQCAtMTQyLDYgKzE0NCwzNCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChXb3JrZXJDb250ZXh0CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlY4V29ya2Vy
Q29udGV4dC5vcGVuRGF0YWJhc2UoKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgNCkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoU1lOVEFYX0VSUik7CisKKyAgICBFWENFUFRJT05fQkxP
Q0soU3RyaW5nLCBuYW1lLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOworICAgIEVYQ0VQVElP
Tl9CTE9DSyhTdHJpbmcsIHZlcnNpb24sIHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKSk7CisgICAg
RVhDRVBUSU9OX0JMT0NLKFN0cmluZywgZGlzcGxheU5hbWUsIHRvV2ViQ29yZVN0cmluZyhhcmdz
WzJdKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKHVuc2lnbmVkIGxvbmcsIGVzdGltYXRlZFNpemUs
IGFyZ3NbM10tPlVpbnQzMlZhbHVlKCkpOworCisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisKKyAgICBS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+PSA1KSB7CisgICAgICAgIGlmICghYXJnc1s0XS0+SXNPYmplY3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKworICAgICAgICBj
cmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7Cisg
ICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlc3VsdCA9IHRvVjgod29ya2VyQ29udGV4dC0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNp
b24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2Uo
KSwgZWMpKTsKKworICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3Bl
bkRhdGFiYXNlU3luY0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVjhXb3JrZXJDb250ZXh0Lm9wZW5EYXRhYmFzZVN5bmMoKSIpOwpAQCAt
MTYwLDcgKzE5MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om8K
ICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sg
PSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCAwKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOwogICAgIH0K
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmlkbAkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkgQEAgbW9kdWxlIHRocmVhZHMgewogICAg
ICAgICAvLyBXb3JrZXJVdGlscwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGltcG9ydFNjcmlwdHMo
LypbVmFyaWFkaWNdIGluIERPTVN0cmluZyB1cmxzICovKTsKICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtSZXBsYWNlYWJsZV0gV29ya2VyTmF2aWdhdG9yIG5hdmlnYXRvcjsKLQogI2lmIGRl
ZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgLy8gRGF0
YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lv
biwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJh
c2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CiAgICAgICAgIFtFbmFibGVBdFJ1bnRpbWUsIEN1c3RvbV0gRGF0YWJhc2VTeW5jIG9w
ZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBp
biBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
aW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKTsKICNlbmRpZgogCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU5NTA4KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA1LTE0ICBFcmljIFVocmhhbmUg
IDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHY4IGJpbmRpbmdzIGZvciBhc3luYyBEQiBBUEkgaW4gd29ya2Vy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxNDUK
KyAgICAgICAgCisgICAgICAgICogc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwOgorICAgICAgICBU
aGlzIGFzc2VydCByZW1vdmFsIHdpbGwgZ28gYXdheSB3aGVuIEpvY2hlbidzIGNoYW5nZSBnZXRz
IGNvbW1pdHRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKToKKyAgICAgICAgV2Ugc2hvdWxkIGNoZWNrIHRoYXQgd2UncmUgb24gdGhl
IGNvbnRleHQgdGhyZWFkIG5vdywgbm90IHRoZSBtYWluCisgICAgICAgIHRocmVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQpOgorCiAyMDEwLTA1LTE0
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVy
LmNwcAkocmV2aXNpb24gNTk1MDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2Jz
ZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgRGF0YWJhc2VP
YnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWIKIHsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgdGhlIGNhc2Ugc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dvcmtlcigpIG9uY2Ugd29y
a2VycyBpbXBsZW1lbnQgd2ViIGRhdGFiYXNlcy4KLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICAvLyBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCog
d2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7CkBA
IC02MywxOSArNjMsMTkgQEAgYm9vbCBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRh
YgogCiB2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKERhdGFiYXNlKiBkYXRh
YmFzZSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFz
ZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgV2Vi
RGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlT3BlbmVkKFdlYkRhdGFiYXNlKGRhdGFiYXNl
KSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VNb2RpZmllZChEYXRhYmFz
ZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwog
ICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRhYmFzZU1vZGlmaWVkKFdlYkRhdGFiYXNl
KGRhdGFiYXNlKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQo
RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVh
ZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VDbG9zZWQoV2ViRGF0
YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56544</attachid>
            <date>2010-05-19 18:13:38 -0700</date>
            <delta_ts>2010-05-27 10:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39145-20100519181337.patch</filename>
            <type>text/plain</type>
            <size>29680</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTcxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDUtMTkgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdjggYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiB3b3JrZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0NQorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gIFRoaXMgc2hvdWxkIHNoYXJlIGxheW91dCB0ZXN0cyB3aXRoIEpTQy4KKworICAg
ICAgICBUd2VhayB0aGUgY2FsbGJhY2sgZ2VuZXJhdGlvbiB0byBzd2l0Y2ggbG90cyBvZiBGcmFt
ZSogdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGFuZCB1c2UgdGhlIGNvbnRleHQgcGFzc2Vk
IGluIHRvIGhhbmRsZUV2ZW50IHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorCisgICAgICAgIEFzIHdpdGggQ29kZUdlbmVyYXRv
clY4OyB0aGVzZSBhcmUgcHJldHR5IG11Y2ggYWxsIHRpbnkgdHdlYWtzLgorICAgICAgICBXZSBk
byBoYXZlIHRvIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRjaCBmb3IgY2FsbGJhY2sgaW52
b2NhdGlvbiBpbiBpbnZva2VDYWxsYmFjaywgYXMgVjhQcm94eTo6cmV0cmlldmUoKSBkb2Vzbid0
IHdvcmsgaW4gdGhlIHdvcmtlciBjb250ZXh0LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9t
Vm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tVm9pZENhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnZva2VDYWxsYmFjayk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxD
YWxsYmFjayk6CisKKyAgICAgICAgQWRkIG9wZW5EYXRhYmFzZUNhbGxiYWNrLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayk6CisgICAgICAg
IFJlbW92ZSBhbiBvYnNvbGV0ZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtl
ckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmNDYWxsYmFjayk6CisKIDIwMTAtMDUtMTggIEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1
YmJlcnN0YW1wZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDU5NzE0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjE0
MywxNSArMjE0MywxNCBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD5cbiIpOwogICAgIAogICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7Ci0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgImNsYXNzIEZyYW1lO1xuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsK
IAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgRnJhbWUqIGZyYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7Y2xhc3NOYW1lfT4gY3Jl
YXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZh
bHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFt
ZX0odmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpKSk7CiAgICAgfQogCiAgICAgdmlydHVh
bCB+JHtjbGFzc05hbWV9KCk7CkBAIC0yMTgxLDEwICsyMTgwLDkgQEAgRU5ECiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgPDxFTkQpOwogCiBwcml2YXRlOgotICAgICR7Y2xhc3NOYW1lfSh2ODo6
TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisgICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2
ODo6T2JqZWN0Pik7CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNr
OwotICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93
b3JsZENvbnRleHQ7CiB9OwogCkBAIC0yMjA3LDE1ICsyMjA1LDEzIEBAIHN1YiBHZW5lcmF0ZUNh
bGxiYWNrSW1wbGVtZW50YXRpb24KICAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRl
CiAgICAgcHVzaChAaW1wbEZpeGVkSGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVu
dEhlYWRlcigkZGF0YU5vZGUpKTsKICAgICAgICAgIAotICAgICRpbXBsSW5jbHVkZXN7IkZyYW1l
LmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIn0g
PSAxOwogICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgifSA9IDE7CiAK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9KHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZyYW1lKQorJHtjbGFzc05hbWV9
Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrKQogICAgIDogbV9j
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKLSAgICAs
IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7
CiB9CkBAIC0yMjYzLDkgKzIyNTksOCBAQCBFTkQKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCBqb2luKCIsXG4iLCBAYXJndnMpKTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiAgICB9O1xuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFJlZlB0cjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTtcblxuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxs
YmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMpLiAiLCBhcmd2LCBjYWxsYmFja1Jl
dHVyblZhbHVlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwg
YXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDU5NzE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDcgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEludGVyZgogfTsKIAogI3VuZGVmIFRIVU5LX0dF
TkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVy
ZmFjZVRhYmxlID0KLSNpZiBFTkFCTEUoUEVSRkVDVF9IQVNIX1NJWkUpCi0gICAgeyAwLCBKU1Rl
c3RJbnRlcmZhY2VUYWJsZVZhbHVlcywgMCB9OwotI2Vsc2UKLSAgICB7IDIsIDEsIEpTVGVzdElu
dGVyZmFjZVRhYmxlVmFsdWVzLCAwIH07Ci0jZW5kaWYKLQorc3RhdGljIEpTQ19DT05TVF9IQVNI
VEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZVRhYmxlID0geyAyLCAxLCBKU1Rlc3RJbnRl
cmZhY2VUYWJsZVZhbHVlcywgMCB9OwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8K
ICNpZiBFTkFCTEUoSklUKQogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdl
bmVyYXRvcgpAQCAtNjQsMTMgKzU4LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEludGVyZgogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05T
VF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUgPQot
I2lmIEVOQUJMRShQRVJGRUNUX0hBU0hfU0laRSkKLSAgICB7IDAsIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLSNlbHNlCi0gICAgeyAxLCAwLCBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci0jZW5kaWYKLQorc3RhdGljIEpTQ19D
T05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUg
PSB7IDEsIDAsIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKIGNs
YXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMjksMTMgKzExNyw3
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJbnRlcmYKIH07CiAKICN1bmRl
ZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSA9Ci0jaWYgRU5BQkxFKFBFUkZFQ1RfSEFTSF9T
SVpFKQotICAgIHsgMCwgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsK
LSNlbHNlCi0gICAgeyAxLCAwLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlcywg
MCB9OwotI2VuZGlmCi0KK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSA9IHsgMSwgMCwgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VQcm90b3R5cGUiLCAwLCAmSlNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAJKHJldmlzaW9uIDU5NzE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTMgKzY2LDcgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialRhYgogfTsKIAogI3VuZGVmIFRIVU5LX0dF
TkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialRh
YmxlID0KLSNpZiBFTkFCTEUoUEVSRkVDVF9IQVNIX1NJWkUpCi0gICAgeyAxMjcsIEpTVGVzdE9i
alRhYmxlVmFsdWVzLCAwIH07Ci0jZWxzZQotICAgIHsgMzQsIDMxLCBKU1Rlc3RPYmpUYWJsZVZh
bHVlcywgMCB9OwotI2VuZGlmCi0KK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJs
ZSBKU1Rlc3RPYmpUYWJsZSA9IHsgMzQsIDMxLCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9Owog
LyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KICNpZiBFTkFCTEUoSklUKQogI2RlZmlu
ZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgpAQCAtODYsMTMgKzgwLDcg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9iakNvbgogfTsKIAogI3VuZGVm
IFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpT
VGVzdE9iakNvbnN0cnVjdG9yVGFibGUgPQotI2lmIEVOQUJMRShQRVJGRUNUX0hBU0hfU0laRSkK
LSAgICB7IDAsIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLSNlbHNlCi0g
ICAgeyAxLCAwLCBKU1Rlc3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci0jZW5kaWYK
LQorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9iakNvbnN0cnVj
dG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsK
IGNsYXNzIEpTVGVzdE9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0
IHsKIHB1YmxpYzoKICAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xNjcsMTMgKzE1NSw3IEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KIH07CiAKICN1bmRlZiBUSFVOS19H
RU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQ
cm90b3R5cGVUYWJsZSA9Ci0jaWYgRU5BQkxFKFBFUkZFQ1RfSEFTSF9TSVpFKQotICAgIHsgODE5
MSwgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKLSNlbHNlCi0gICAgeyA2OSwg
NjMsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07Ci0jZW5kaWYKLQorc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0g
eyA2OSwgNjMsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwg
MCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQ
cm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTk3MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDYgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Q2xhc3MxLmgi
CiAjaW5jbHVkZSAiVjhDbGFzczIuaCIKQEAgLTMyLDkgKzMxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1WOFRlc3RDYWxsYmFjazo6VjhUZXN0Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCitWOFRlc3RDYWxsYmFjazo6VjhUZXN0Q2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrKQogICAgIDogbV9jYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKLSAgICAsIG1fZnJhbWUo
ZnJhbWUpCiAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CkBAIC02
MCwxMCArNTgsOCBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQCiAg
ICAgICAgIHRvVjgoY2xhc3MxUGFyYW0pCiAgICAgfTsKIAotICAgIFJlZlB0cjxGcmFtZT4gcHJv
dGVjdChtX2ZyYW1lKTsKLQogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwot
ICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJhY2tS
ZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBh
cmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTsKIH0KIAogYm9vbCBWOFRlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCkBAIC04MSwx
MCArNzcsOCBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQCiAgICAg
ICAgIHRvVjgoc3RyQXJnKQogICAgIH07CiAKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9m
cmFtZSk7Ci0KICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1
cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFs
dWUpOworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMiwgYXJndiwgY2Fs
bGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2Fs
bGJhY2suaAkocmV2aXNpb24gNTk3MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCArMzAsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFtZTsKLQogY2xhc3MgVjhUZXN0Q2Fs
bGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxWOFRlc3RDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBG
cmFtZSogZnJhbWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0
ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1
ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJh
Y2sodmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVjhUZXN0Q2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICB2aXJ0
dWFsIH5WOFRlc3RDYWxsYmFjaygpOwpAQCAtNDksMTAgKzQ3LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczUq
IGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJpdmF0ZToKLSAgICBWOFRl
c3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisgICAgVjhUZXN0Q2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+KTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwogICAgIFdvcmxk
Q29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAko
cmV2aXNpb24gNTk3MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQg
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmUKICAgICBSZWZQdHI8RnJhbWU+IHBy
b3RlY3RvcihtX2ZyYW1lKTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNl
OwotICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJu
VmFsdWUpOworICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNr
UmV0dXJuVmFsdWUsIG1fZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9u
RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1OTcxNCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFY4Q3VzdG9tUG9zaXRp
b25FcnJvckNhbGxiYWNrOjpoYW5kCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFt
ZSk7CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBpbnZva2VD
YWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKKyAgICBp
bnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBt
X2ZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1OTcxNCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAKIAogI2luY2x1ZGUgIlY4U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTUUxFcnJvci5oIgogI2luY2x1
ZGUgIlY4U1FMVHJhbnNhY3Rpb24uaCIKIApAQCAtNTcsMTUgKzU3LDE1IEBAIGJvb2wgVjhTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKICAgICAgICAgdG9WOChlcnJvcikKICAgICB9
OwogCi0gICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMu
Ci0gICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAgLy8gUHJvdGVjdCB0
aGUgY29udGV4dCB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KKyAgICBSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gcHJvdGVjdG9yKGNvbnRleHQpOwogCiAgICAgYm9vbCBjYWxsYmFj
a1JldHVyblZhbHVlID0gZmFsc2U7CiAgICAgLy8gU3RlcCA2OiBJZiB0aGUgZXJyb3IgY2FsbGJh
Y2sgcmV0dXJucyBmYWxzZSwgdGhlbiBtb3ZlIG9uIHRvIHRoZSBuZXh0CiAgICAgLy8gc3RhdGVt
ZW50LCBpZiBhbnksIG9yIG9udG8gdGhlIG5leHQgb3ZlcmFsbCBzdGVwIG90aGVyd2lzZS4gT3Ro
ZXJ3aXNlLAogICAgIC8vIHRoZSBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSwg
b3IgdGhlcmUgd2FzIG5vIGVycm9yIGNhbGxiYWNrLgogICAgIC8vIEp1bXAgdG8gdGhlIGxhc3Qg
c3RlcCBpbiB0aGUgb3ZlcmFsbCBzdGVwcy4KLSAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2sobV9j
YWxsYmFjaywgMiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSkgfHwgY2FsbGJhY2tSZXR1cm5W
YWx1ZTsKKyAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMiwgYXJndiwgY2Fs
bGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTk3MTQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDE0ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCiAKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhDdXN0b21Wb2lk
Q2FsbGJhY2s6OlY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxs
YmFjaywgRnJhbWUqIGZyYW1lKQorVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9tVm9pZENh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCAqY29udGV4dCkKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhjYWxsYmFjaykpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KGNvbnRleHQpCiB7CiB9CiAKQEAgLTUxLDIwICs1MiwxNyBAQCB2b2lk
IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiB7CiAgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9
IFY4UHJveHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0
eSgpKQorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgV29ybGRDb250ZXh0SGFuZGxlKFVzZUN1
cnJlbnRXb3JsZCkpOworICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Ci0KLSAgICAvLyBQ
cm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KLSAgICBSZWZQdHI8
RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUo
djhDb250ZXh0KTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAg
IGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDAsIDAsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOwor
ICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDAsIDAsIGNhbGxiYWNrUmV0dXJuVmFsdWUs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7CiB9CiAKLWJvb2wgaW52b2tlQ2FsbGJh
Y2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gY2FsbGJhY2ssIGludCBhcmdjLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJndltdLCBib29sJiBjYWxsYmFja1JldHVyblZhbHVlKQorYm9vbCBp
bnZva2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgaW50IGFy
Z2MsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10sIGJvb2wmIGNhbGxiYWNrUmV0dXJuVmFs
dWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAg
ICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAKQEAgLTgzLDE1ICs4MSwxMiBAQCBi
b29sIGludm9rZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPCiAKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHRoaXNPYmplY3QgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9i
YWwoKTsKIAotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoKTsKLSAgICBB
U1NFUlQocHJveHkpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5
LT5jYWxsRnVuY3Rpb24oY2FsbGJhY2tGdW5jdGlvbiwgdGhpc09iamVjdCwgYXJnYywgYXJndik7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGNhbGxiYWNrRnVuY3Rpb24tPkNh
bGwodGhpc09iamVjdCwgYXJnYywgYXJndik7CiAgICAgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9ICFy
ZXN1bHQuSXNFbXB0eSgpICYmIHJlc3VsdC0+Qm9vbGVhblZhbHVlKCk7CiAKICAgICBpZiAoZXhj
ZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkgewogICAgICAgICB2ODo6TG9jYWw8djg6Ok1lc3Nh
Z2U+IG1lc3NhZ2UgPSBleGNlcHRpb25DYXRjaGVyLk1lc3NhZ2UoKTsKLSAgICAgICAgcHJveHkt
PmZyYW1lKCktPmRvY3VtZW50KCktPnJlcG9ydEV4Y2VwdGlvbih0b1dlYkNvcmVTdHJpbmcobWVz
c2FnZS0+R2V0KCkpLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCksIHRvV2ViQ29yZVN0cmluZyht
ZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKSkpOworICAgICAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24odG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UtPkdldCgp
KSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCB0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0
U2NyaXB0UmVzb3VyY2VOYW1lKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxi
YWNrLmgJKHJldmlzaW9uIDU5NzE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21Wb2lkQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjggKzM4LDI4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7CitjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCiBjbGFzcyBWOEN1c3RvbVZvaWRDYWxsYmFjayA6IHB1YmxpYyBWb2lkQ2Fs
bGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxi
YWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIEZyYW1lKiBmcmFtZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVZvaWRDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAg
IHsKICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBWOEN1c3RvbVZvaWRDYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgZnJhbWUp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOEN1c3RvbVZvaWRDYWxsYmFjayh2YWx1
ZS0+VG9PYmplY3QoKSwgY29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5WOEN1c3RvbVZv
aWRDYWxsYmFjaygpOwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KCk7CiAKIHByaXZh
dGU6Ci0gICAgVjhDdXN0b21Wb2lkQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBGcmFt
ZSopOworICAgIFY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCk7CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKKyAgICBSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogfTsK
IAogLy8gUmV0dXJucyBmYWxzZSBpZiBjYWxsYmFjayBmYWlsZWQgKG51bGwsIHdyb25nIHR5cGUs
IG9yIHRocmV3IGV4Y2VwdGlvbikuCi1ib29sIGludm9rZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFy
Z3ZbXSwgYm9vbCYgY2FsbGJhY2tSZXR1cm5WYWx1ZSk7Citib29sIGludm9rZUNhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSwgYm9vbCYgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTk3MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMSw3ICs4MDEs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6Om9wZW5ECiAgICAgICAgIGlm
ICghYXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFz
ZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgaW1wLT5mcmFtZSgpKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOwogICAgIH0K
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDU5NzE0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDggKzU1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNo
YW5nZQogCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhEYXRhYmFzZTo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yQ3VycmVudENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQorICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4g
Y2FsbGJhY2s7CkBAIC02NCw3ICs2NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFi
YXNlOjpjaGFuZ2UKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNhbGxi
YWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgZnJhbWUpOwor
ICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3Nb
Ml0pOwogICAgIH0KIAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjazsKQEAgLTcyLDcgKzcyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RGF0YWJhc2U6OmNoYW5nZQogICAgICAgICBpZiAoIWFyZ3NbM10tPklzT2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAg
ZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJn
c1szXSwgZnJhbWUpOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdKTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0
b21Wb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjazsKQEAgLTgwLDcgKzgwLDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNoYW5nZQogICAgICAgICBpZiAoIWFyZ3NbNF0t
PklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENI
X0VSUik7CiAKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzRdLCBmcmFtZSk7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3Vz
dG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAgICAgfQogCiAgICAgZGF0YWJhc2UtPmNoYW5nZVZlcnNpb24ob2xkVmVyc2lvbiwgbmV3VmVy
c2lvbiwgY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vz
c0NhbGxiYWNrLnJlbGVhc2UoKSk7CkBAIC05OCwxOCArOTgsMTcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjcmVhdGVUcmFucwogCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhE
YXRhYmFzZTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1l
KQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPFY4U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzBdLCBmcmFtZSk7CisgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBd
KTsKIAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFy
Z3NbMV0pKSB7CiAgICAgICAgIGlmICghYXJnc1sxXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBlcnJvckNh
bGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBm
cmFtZSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjazo6Y3JlYXRlKGFyZ3NbMV0pOwogICAgIH0KIAogICAgIFJlZlB0cjxWOEN1c3RvbVZvaWRD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrOwpAQCAtMTE3LDcgKzExNiw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09i
amVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIp
OwogCi0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVh
dGUoYXJnc1syXSwgZnJhbWUpOworICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZv
aWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
IH0KIAogICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCksIGVycm9y
Q2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCByZWFkT25seSk7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5
bmNDdXN0b20uY3BwCShyZXZpc2lvbiA1OTcxNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZVN5bmM6OmNoCiAgICAgICAgIGlm
ICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCAwKTsKKyAgICAgICAgY2FsbGJhY2sgPSBWOFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7CiAgICAgfQogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMKIAogICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UgPSBW
OERhdGFiYXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBSZWZQdHI8VjhT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgMCk7CisgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6
Y3JlYXRlKGFyZ3NbMF0pOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZGF0YWJh
c2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHksIGVjKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlv
bkNlbnRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU5NzE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbkNlbnQK
ICAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoIkNhbGxiYWNrIG11c3QgYmUgb2YgdmFsaWQgdHlwZS4iLCBWOFByb3h5OjpUeXBl
RXJyb3IpOwogIAotICAgICAgICBjYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVh
dGUoYXJnc1swXSwgVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCkpOwor
ICAgICAgICBjYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwg
Y29udGV4dCk7CiAgICAgfQogCiAgICAgbm90aWZpY2F0aW9uQ2VudGVyLT5yZXF1ZXN0UGVybWlz
c2lvbihjYWxsYmFjay5yZWxlYXNlKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU5NzE0
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDI0ICs4OSwyMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAKICAgICBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24g
PSBWOFNRTFRyYW5zYWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAotICAgIEZyYW1l
KiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBj
YWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZpbmVkT3JOdWxs
KGFyZ3NbMl0pKSB7CiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBpZiAo
ZnJhbWUpCi0gICAgICAgICAgICBjYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNy
ZWF0ZShhcmdzWzJdLCBmcmFtZSk7CisgICAgICAgIGNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRD
YWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOwogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MyAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1szXSkpIHsKICAgICAgICAgaWYgKCFhcmdzWzNd
LT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRD
SF9FUlIpOwotCi0gICAgICAgIGlmIChmcmFtZSkKLSAgICAgICAgICAgIGVycm9yQ2FsbGJhY2sg
PSBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdLCBmcmFtZSk7Cisg
ICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzNdKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTk3MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0LmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5j
bHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJWOERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVjhE
YXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhEYXRhYmFzZVN5bmMuaCIKQEAgLTE0Mywx
MiArMTQ0LDMzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdvcmtlckNvbnRleHQKIH0K
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNv
bnRleHQ6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIAot
eyAKLSAgICBJTkNfU1RBVFMoIkRPTS5Xb3JrZXJDb250ZXh0Lm9wZW5EYXRhYmFzZSgpIik7IAot
ICAgIC8vIEltcGxlbWVudGF0aW9uIGNvbWluZyBzb29uLgotICAgIHJldHVybiB0aHJvd0Vycm9y
KE5PVF9TVVBQT1JURURfRVJSKTsKLX0gCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJD
b250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIElOQ19TVEFUUygiRE9NLlY4V29ya2VyQ29udGV4dC5vcGVuRGF0YWJhc2UoKSIpOwor
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgNCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoU1lO
VEFYX0VSUik7CisKKyAgICBFWENFUFRJT05fQkxPQ0soU3RyaW5nLCBuYW1lLCB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSkpOworICAgIEVYQ0VQVElPTl9CTE9DSyhTdHJpbmcsIHZlcnNpb24sIHRv
V2ViQ29yZVN0cmluZyhhcmdzWzFdKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKFN0cmluZywgZGlz
cGxheU5hbWUsIHRvV2ViQ29yZVN0cmluZyhhcmdzWzJdKSk7CisgICAgRVhDRVBUSU9OX0JMT0NL
KHVuc2lnbmVkIGxvbmcsIGVzdGltYXRlZFNpemUsIGFyZ3NbM10tPlVpbnQzMlZhbHVlKCkpOwor
CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjazsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CisgICAgICAgIGlm
ICghYXJnc1s0XS0+SXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKKworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFz
ZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHRvVjgod29ya2VyQ29u
dGV4dC0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRT
aXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKTsKKworICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luY0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CkBAIC0xNjgsNyArMTkwLDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2Jq
ZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
CiAKLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbNF0sIDApOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxi
YWNrOjpjcmVhdGUoYXJnc1s0XSk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NzE0KQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA1LTE5ICBFcmlj
IFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHY4IGJpbmRpbmdzIGZvciBhc3luYyBEQiBBUEkg
aW4gd29ya2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzkxNDUKKyAgICAgICAgCisgICAgICAgICogc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICBXZSBzaG91bGQgY2hlY2sgdGhhdCB3ZSdyZSBvbiB0aGUgY29udGV4dCB0aHJlYWQg
bm93LCBub3QgdGhlIG1haW4KKyAgICAgICAgdGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VPYnNlcnZlcjo6ZGF0YWJhc2VNb2RpZmllZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZCk6CisKIDIwMTAtMDUtMTYgIE1pa2UgQmVsc2hlICA8
bWJlbHNoZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6
a292LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCShyZXZp
c2lvbiA1OTcxNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDE5ICs2NywxOSBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6
OmNhbkVzdGFibGlzaERhdGFiCiAKIHZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVu
ZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRo
cmVhZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VPcGVuZWQoV2Vi
RGF0YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAogdm9pZCBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFz
ZU1vZGlmaWVkKERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSk7CiAgICAgV2ViRGF0YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlTW9k
aWZpZWQoV2ViRGF0YWJhc2UoZGF0YWJhc2UpKTsKIH0KIAogdm9pZCBEYXRhYmFzZU9ic2VydmVy
OjpkYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRh
YmFzZUNsb3NlZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57258</attachid>
            <date>2010-05-27 10:54:26 -0700</date>
            <delta_ts>2010-05-27 16:22:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39145-20100527105424.patch</filename>
            <type>text/plain</type>
            <size>25770</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDMwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDUtMjcgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdjggYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiB3b3JrZXJzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0NQorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gIFRoaXMgc2hvdWxkIHNoYXJlIGxheW91dCB0ZXN0cyB3aXRoIEpTQy4KKworICAg
ICAgICBUd2VhayB0aGUgY2FsbGJhY2sgZ2VuZXJhdGlvbiB0byBzd2l0Y2ggbG90cyBvZiBGcmFt
ZSogdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGFuZCB1c2UgdGhlIGNvbnRleHQgcGFzc2Vk
IGluIHRvIGhhbmRsZUV2ZW50IHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorCisgICAgICAgIEFzIHdpdGggQ29kZUdlbmVyYXRv
clY4OyB0aGVzZSBhcmUgcHJldHR5IG11Y2ggYWxsIHRpbnkgdHdlYWtzLgorICAgICAgICBXZSBk
byBoYXZlIHRvIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRjaCBmb3IgY2FsbGJhY2sgaW52
b2NhdGlvbiBpbiBpbnZva2VDYWxsYmFjaywgYXMgVjhQcm94eTo6cmV0cmlldmUoKSBkb2Vzbid0
IHdvcmsgaW4gdGhlIHdvcmtlciBjb250ZXh0LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9t
Vm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tVm9pZENhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnZva2VDYWxsYmFjayk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNl
OjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxD
YWxsYmFjayk6CisKKyAgICAgICAgQWRkIG9wZW5EYXRhYmFzZUNhbGxiYWNrLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayk6CisgICAgICAg
IFJlbW92ZSBhbiBvYnNvbGV0ZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtl
ckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmNDYWxsYmFjayk6CisKIDIwMTAtMDUtMjcgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkocmV2aXNpb24gNjAzMDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTU0LDE1ICsyMTU0LDE0IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPlxuIik7CiAgICAgCiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiY2xhc3MgRnJhbWU7XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAk
Y2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOwogCiAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgPDxFTkQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7Y2xh
c3NOYW1lfT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8JHtjbGFzc05hbWV9PiBjcmVhdGUodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkp
OwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NOYW1lfSh2YWx1ZS0+VG9PYmpl
Y3QoKSwgZnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFtZX0o
dmFsdWUtPlRvT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH4ke2NsYXNzTmFtZX0o
KTsKQEAgLTIxOTIsMTAgKzIxOTEsOSBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8
PEVORCk7CiAKIHByaXZhdGU6Ci0gICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiwgRnJhbWUqKTsKKyAgICAke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+KTsKIAog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPEZy
YW1lPiBtX2ZyYW1lOwogICAgIFdvcmxkQ29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07
CiAKQEAgLTIyMTgsMTUgKzIyMTYsMTMgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRh
dGlvbgogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKICAgICBwdXNoKEBpbXBs
Rml4ZWRIZWFkZXIsIEdlbmVyYXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVyKCRkYXRhTm9k
ZSkpOwogICAgICAgICAgCi0gICAgJGltcGxJbmNsdWRlc3siRnJhbWUuaCJ9ID0gMTsKICAgICAk
aW1wbEluY2x1ZGVzeyJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgifSA9IDE7CiAgICAgJGltcGxJ
bmNsdWRlc3siVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCJ9ID0gMTsKIAogICAgIHB1c2goQGltcGxD
b250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOwotJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCiske2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2
ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2spCiAgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQotICAgICwgbV9mcmFtZShmcmFtZSkK
ICAgICAsIG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KQEAgLTIyNzQsOSAr
MjI3MCw4IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIixcbiIs
IEBhcmd2cykpOwogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIH07XG5c
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPEZyYW1lPiBw
cm90ZWN0KG1fZnJhbWUpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ss
ICIgLiBzY2FsYXIoQHBhcmFtcykuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxi
YWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBjYWxsYmFja1Jl
dHVyblZhbHVlLCBjb250ZXh0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG4iKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYwMzA4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAK
LSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJWOENsYXNzMS5oIgogI2luY2x1ZGUgIlY4Q2xhc3MyLmgiCkBAIC0zMiw5ICsz
MSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZyYW1lKQorVjhU
ZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFj
aykKICAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxs
YmFjaykpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3Vy
cmVudFdvcmxkKQogewogfQpAQCAtNjAsMTAgKzU4LDggQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAgICAgICB0b1Y4KGNsYXNzMVBhcmFtKQogICAgIH07CiAK
LSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7Ci0KICAgICBib29sIGNhbGxiYWNr
UmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUpOworICAgIHJldHVybiAhaW52b2tlQ2Fs
bGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7
CiB9CiAKIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0
cmluZyYgc3RyQXJnKQpAQCAtODEsMTAgKzc3LDggQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tXaXRoQ2xhc3MyUAogICAgICAgICB0b1Y4KHN0ckFyZykKICAgICB9OwogCi0gICAgUmVm
UHRyPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOwotCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZh
bHVlID0gZmFsc2U7Ci0gICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBh
cmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKKyAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1f
Y2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDYwMzA4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTQgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJh
bWU7Ci0KIGNsYXNzIFY4VGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgRnJhbWUqIGZyYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFY4VGVzdENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAg
ewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOwotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFY4VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBmcmFtZSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgp
KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VjhUZXN0Q2FsbGJhY2soKTsKQEAgLTQ5LDEwICs0
Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7
CiAKIHByaXZhdGU6Ci0gICAgVjhUZXN0Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBG
cmFtZSopOworICAgIFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CiAKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxGcmFt
ZT4gbV9mcmFtZTsKICAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9Owog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
UG9zaXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDYwMzA4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNyBAQCB2b2lkIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6aGFuZGxlRXZl
CiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAKICAgICBib29sIGNhbGxi
YWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAx
LCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlKTsKKyAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxi
YWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNw
cAkocmV2aXNpb24gNjAzMDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgdm9pZCBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6aGFuZAogICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVl
ID0gZmFsc2U7Ci0gICAgaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJh
Y2tSZXR1cm5WYWx1ZSk7CisgICAgaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkocmV2
aXNpb24gNjAzMDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBA
CiAKICNpbmNsdWRlICJWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKIAotI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUg
IlY4U1FMRXJyb3IuaCIKICNpbmNsdWRlICJWOFNRTFRyYW5zYWN0aW9uLmgiCiAKQEAgLTU3LDE1
ICs1NywxNSBAQCBib29sIFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlCiAgICAg
ICAgIHRvVjgoZXJyb3IpCiAgICAgfTsKIAotICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGls
IHRoZSBjYWxsYmFjayByZXR1cm5zLgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJh
bWUpOworICAgIC8vIFByb3RlY3QgdGhlIGNvbnRleHQgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVy
bnMuCisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3Rvcihjb250ZXh0
KTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIC8vIFN0ZXAg
NjogSWYgdGhlIGVycm9yIGNhbGxiYWNrIHJldHVybnMgZmFsc2UsIHRoZW4gbW92ZSBvbiB0byB0
aGUgbmV4dAogICAgIC8vIHN0YXRlbWVudCwgaWYgYW55LCBvciBvbnRvIHRoZSBuZXh0IG92ZXJh
bGwgc3RlcCBvdGhlcndpc2UuIE90aGVyd2lzZSwKICAgICAvLyB0aGUgZXJyb3IgY2FsbGJhY2sg
ZGlkIG5vdCByZXR1cm4gZmFsc2UsIG9yIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjay4KICAg
ICAvLyBKdW1wIHRvIHRoZSBsYXN0IHN0ZXAgaW4gdGhlIG92ZXJhbGwgc3RlcHMuCi0gICAgcmV0
dXJuIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFs
dWUpIHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7CisgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKG1f
Y2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpIHx8IGNhbGxi
YWNrUmV0dXJuVmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDYwMzA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21W
b2lkQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTUgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIgogCi0jaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVY4Q3VzdG9tVm9pZENhbGxiYWNrOjpWOEN1c3RvbVZvaWRDYWxsYmFjayh2ODo6
TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIEZyYW1lKiBmcmFtZSkKK1Y4Q3VzdG9tVm9pZENh
bGxiYWNrOjpWOEN1c3RvbVZvaWRDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKmNvbnRleHQpCiAgICAgOiBtX2NhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQotICAgICwgbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogewogfQogCkBA
IC01MSwyMCArNTIsMTcgQEAgdm9pZCBWOEN1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQo
KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KG1fZnJhbWUuZ2V0KCkpOwot
ICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2
OENvbnRleHQgPSB0b1Y4Q29udGV4dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIFdv
cmxkQ29udGV4dEhhbmRsZShVc2VDdXJyZW50V29ybGQpKTsKKyAgICBpZiAodjhDb250ZXh0Lklz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KGNvbnRleHQpOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNr
IHJldHVybnMuCi0gICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICBib29sIGNhbGxiYWNrUmV0
dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAwLCAwLCBj
YWxsYmFja1JldHVyblZhbHVlKTsKKyAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAwLCAw
LCBjYWxsYmFja1JldHVyblZhbHVlLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpOwog
fQogCi1ib29sIGludm9rZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGNhbGxi
YWNrLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSwgYm9vbCYgY2FsbGJh
Y2tSZXR1cm5WYWx1ZSkKK2Jvb2wgaW52b2tlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gY2FsbGJhY2ssIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdLCBi
b29sJiBjYWxsYmFja1JldHVyblZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogewogICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwog
CkBAIC04MywxNSArODEsMTIgQEAgYm9vbCBpbnZva2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2
ODo6TwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0aGlzT2JqZWN0ID0gdjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKCk7Ci0gICAgQVNTRVJUKHByb3h5KTsKLQotICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZXN1bHQgPSBwcm94eS0+Y2FsbEZ1bmN0aW9uKGNhbGxiYWNrRnVuY3Rpb24sIHRo
aXNPYmplY3QsIGFyZ2MsIGFyZ3YpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQg
PSBjYWxsYmFja0Z1bmN0aW9uLT5DYWxsKHRoaXNPYmplY3QsIGFyZ2MsIGFyZ3YpOwogICAgIGNh
bGxiYWNrUmV0dXJuVmFsdWUgPSAhcmVzdWx0LklzRW1wdHkoKSAmJiByZXN1bHQtPkJvb2xlYW5W
YWx1ZSgpOwogCiAgICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpIHsKICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpNZXNzYWdlPiBtZXNzYWdlID0gZXhjZXB0aW9uQ2F0Y2hlci5NZXNz
YWdlKCk7Ci0gICAgICAgIHByb3h5LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5yZXBvcnRFeGNlcHRp
b24odG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UtPkdldCgpKSwgbWVzc2FnZS0+R2V0TGluZU51bWJl
cigpLCB0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCkpKTsK
KyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKHRvV2ViQ29y
ZVN0cmluZyhtZXNzYWdlLT5HZXQoKSksIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSwgdG9XZWJD
b3JlU3RyaW5nKG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21Wb2lkQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5oCShyZXZpc2lvbiA2MDMwOCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDI4ICszOCwyOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYW1l
OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVjhDdXN0b21Wb2lkQ2Fs
bGJhY2sgOiBwdWJsaWMgVm9pZENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxWOEN1c3RvbVZvaWRDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBGcmFtZSogZnJhbWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhDdXN0b21Wb2lkQ2Fs
bGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3Qo
KSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Wb2lkQ2FsbGJhY2sodmFs
dWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhD
dXN0b21Wb2lkQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAg
ICAgdmlydHVhbCB+VjhDdXN0b21Wb2lkQ2FsbGJhY2soKTsKIAogICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudCgpOwogCiBwcml2YXRlOgotICAgIFY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKKyAgICBWOEN1c3RvbVZvaWRDYWxsYmFjayh2ODo6
TG9jYWw8djg6Ok9iamVjdD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpOwogCiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8RnJh
bWU+IG1fZnJhbWU7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKIH07CiAKIC8vIFJldHVybnMgZmFsc2UgaWYgY2FsbGJhY2sgZmFp
bGVkIChudWxsLCB3cm9uZyB0eXBlLCBvciB0aHJldyBleGNlcHRpb24pLgotYm9vbCBpbnZva2VD
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgaW50IGFyZ2MsIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10sIGJvb2wmIGNhbGxiYWNrUmV0dXJuVmFsdWUpOwor
Ym9vbCBpbnZva2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBjYWxsYmFjaywg
aW50IGFyZ2MsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10sIGJvb2wmIGNhbGxiYWNrUmV0
dXJuVmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzA4KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MDEsNyArODAxLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2lu
ZG93OjpvcGVuRAogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIGltcC0+ZnJh
bWUoKSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNy
ZWF0ZShhcmdzWzRdKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShy
ZXZpc2lvbiA2MDMwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOERhdGFiYXNlOjpjaGFuZ2UKIAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IFY4
RGF0YWJhc2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgRnJhbWUqIGZyYW1lID0g
VjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7Ci0gICAgaWYgKCFmcmFt
ZSkKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxWOFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrOwpAQCAtNjQsNyArNjQsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJnc1syXS0+
SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hf
RVJSKTsKIAotICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3Jl
YXRlKGFyZ3NbMl0sIGZyYW1lKTsKKyAgICAgICAgY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdKTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7CkBAIC03Miw3ICs3Miw3IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNlOjpjaGFuZ2UKICAgICAgICAgaWYgKCFhcmdz
WzNdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIpOwogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbM10sIGZyYW1lKTsKKyAgICAgICAgZXJyb3JDYWxsYmFj
ayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7CkBA
IC04MCw3ICs4MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNlOjpjaGFuZ2UK
ICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9
IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgZnJhbWUpOworICAgICAgICBz
dWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIGRhdGFiYXNlLT5jaGFuZ2VWZXJz
aW9uKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxs
YmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCkpOwpAQCAtOTgsMTggKzk4
LDE3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMKIAogICAgIERh
dGFiYXNlKiBkYXRhYmFzZSA9IFY4RGF0YWJhc2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwog
Ci0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250
ZXh0KCk7Ci0gICAgaWYgKCFmcmFtZSkKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlm
ICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZnJhbWUpOworICAgIFJlZlB0
cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrOjpjcmVhdGUoYXJnc1swXSk7CiAKICAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxICYm
ICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzFdKSkgewogICAgICAgICBpZiAoIWFyZ3NbMV0tPklz
T2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VS
Uik7CiAKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrOjpjcmVhdGUoYXJnc1sxXSwgZnJhbWUpOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsKICAgICB9CiAKICAg
ICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjazsKQEAgLTExNyw3
ICsxMTYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZVRyYW5zCiAgICAg
ICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBWOEN1
c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIGZyYW1lKTsKKyAgICAgICAgc3VjY2Vz
c0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2Fs
bGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNr
LnJlbGVhc2UoKSwgcmVhZE9ubHkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkocmV2aXNpb24gNjAzMDgpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJh
c2VTeW5jOjpjaAogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY2FsbGJh
Y2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgMCk7Cisg
ICAgICAgIGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMl0pOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNzgsNyArNzgs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZVRyYW5zCiAKICAgICBEYXRh
YmFzZVN5bmMqIGRhdGFiYXNlID0gVjhEYXRhYmFzZVN5bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIDApOworICAg
IFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCks
IHJlYWRPbmx5LCBlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlm
aWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCShyZXZpc2lvbiA2MDMwOCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhOb3RpZmljYXRpb25DZW50CiAgICAgICAgIGlmICghYXJnc1swXS0+SXNPYmplY3QoKSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDYWxsYmFjayBtdXN0IGJlIG9mIHZhbGlk
IHR5cGUuIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKICAKLSAgICAgICAgY2FsbGJhY2sgPSBWOEN1
c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIFY4UHJveHk6OnJldHJpZXZlRnJhbWVG
b3JDdXJyZW50Q29udGV4dCgpKTsKKyAgICAgICAgY2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxs
YmFjazo6Y3JlYXRlKGFyZ3NbMF0sIGNvbnRleHQpOwogICAgIH0KIAogICAgIG5vdGlmaWNhdGlv
bkNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oY2FsbGJhY2sucmVsZWFzZSgpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0
b20uY3BwCShyZXZpc2lvbiA2MDMwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyNCArODksMjIg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1FMVHJhbnNhY3Rpb246OgogCiAgICAgU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gVjhTUUxUcmFuc2FjdGlvbjo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9y
Q3VycmVudENvbnRleHQoKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25D
b250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghZXhlY3V0aW9u
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAy
ICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzJdKSkgewogICAgICAgICBpZiAoIWFyZ3NbMl0t
PklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENI
X0VSUik7Ci0KLSAgICAgICAgaWYgKGZyYW1lKQotICAgICAgICAgICAgY2FsbGJhY2sgPSBWOFNR
TFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgZnJhbWUpOworICAgICAgICBjYWxs
YmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdKTsKICAgICB9CiAK
ICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+IDMgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbM10pKSB7
CiAgICAgICAgIGlmICghYXJnc1szXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLQotICAgICAgICBpZiAoZnJhbWUpCi0gICAg
ICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVh
dGUoYXJnc1szXSwgZnJhbWUpOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNv
bnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwMzA4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVjhEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlY4RGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4RGF0
YWJhc2VTeW5jLmgiCkBAIC0xNDMsMTIgKzE0NCwzMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChXb3JrZXJDb250ZXh0CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKSAKLXsgCi0gICAgSU5DX1NUQVRTKCJET00uV29ya2VyQ29udGV4
dC5vcGVuRGF0YWJhc2UoKSIpOyAKLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBjb21pbmcgc29vbi4K
LSAgICByZXR1cm4gdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VSUik7Ci19IAordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5WOFdvcmtlckNvbnRl
eHQub3BlbkRhdGFiYXNlKCkiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDQpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFNZTlRBWF9FUlIpOworCisgICAgRVhDRVBUSU9OX0JMT0NLKFN0
cmluZywgbmFtZSwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKKyAgICBFWENFUFRJT05fQkxP
Q0soU3RyaW5nLCB2ZXJzaW9uLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSkpOworICAgIEVYQ0VQ
VElPTl9CTE9DSyhTdHJpbmcsIGRpc3BsYXlOYW1lLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1syXSkp
OworICAgIEVYQ0VQVElPTl9CTE9DSyh1bnNpZ25lZCBsb25nLCBlc3RpbWF0ZWRTaXplLCBhcmdz
WzNdLT5VaW50MzJWYWx1ZSgpKTsKKworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQg
PSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworCisgICAgUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPj0gNSkgeworICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CisKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgIH0K
KworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBy
ZXN1bHQgPSB0b1Y4KHdvcmtlckNvbnRleHQtPm9wZW5EYXRhYmFzZShuYW1lLCB2ZXJzaW9uLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVj
KSk7CisKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om9wZW5EYXRh
YmFzZVN5bmNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtMTY4LDcg
KzE5MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om8KICAgICAg
ICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERh
dGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCAwKTsKKyAgICAgICAgY3JlYXRpb25DYWxs
YmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOwogICAgIH0KIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDMwOCkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMC0wNS0yNyAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB2OCBiaW5k
aW5ncyBmb3IgYXN5bmMgREIgQVBJIGluIHdvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MTQ1CisgICAgICAgIAorICAgICAgICAqIHNyYy9E
YXRhYmFzZU9ic2VydmVyLmNwcDoKKyAgICAgICAgV2Ugc2hvdWxkIGNoZWNrIHRoYXQgd2UncmUg
b24gdGhlIGNvbnRleHQgdGhyZWFkIG5vdywgbm90IHRoZSBtYWluCisgICAgICAgIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQpOgorCiAyMDEw
LTA1LTI3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0Rh
dGFiYXNlT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvRGF0
YWJhc2VPYnNlcnZlci5jcHAJKHJldmlzaW9uIDYwMzA4KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EYXRhYmFzZU9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTkgKzY3LDE5IEBA
IGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWIKIAogdm9pZCBEYXRhYmFz
ZU9ic2VydmVyOjpkYXRhYmFzZU9wZW5lZChEYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZl
cigpLT5kYXRhYmFzZU9wZW5lZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOwogfQogCiB2b2lkIERh
dGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoRGF0YWJhc2UqIGRhdGFiYXNlKQogewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6
b2JzZXJ2ZXIoKS0+ZGF0YWJhc2VNb2RpZmllZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOwogfQog
CiB2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKiBkYXRhYmFz
ZSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgV2ViRGF0
YWJhc2U6Om9ic2VydmVyKCktPmRhdGFiYXNlQ2xvc2VkKFdlYkRhdGFiYXNlKGRhdGFiYXNlKSk7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57443</attachid>
            <date>2010-05-31 02:23:13 -0700</date>
            <delta_ts>2010-06-01 11:43:54 -0700</delta_ts>
            <desc>patch: fix the world context</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3741</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMzEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBFeGVjdXRlIHZvaWQgY2FsbGJhY2tzIGluIHRoZSBjb250ZXh0IHRoZXkgd2VyZSBjcmVhdGVk
IGluLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzkx
NDUKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVZvaWRDYWxsYmFjazo6VjhDdXN0b21Wb2lk
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suaDoKKwogMjAxMC0wNS0zMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmNwcAkocmV2aXNpb24gNjA0
MzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
VjhDdXN0b21Wb2lkQ2FsbGJhY2s6OlY4Q3VzdG9tVm9pZENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAqY29udGV4dCkKICAgICA6
IG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAg
ICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fd29ybGRDb250
ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KIApAQCAtNTIsNyArNTMsNyBAQCB2b2lkIFY4Q3Vz
dG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9W
OENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBXb3JsZENvbnRleHRIYW5k
bGUoVXNlQ3VycmVudFdvcmxkKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gdG9WOENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBtX3dvcmxk
Q29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Wb2lkQ2FsbGJhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRD
YWxsYmFjay5oCShyZXZpc2lvbiA2MDQzMykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tVm9pZENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNkZWZpbmUgVjhDdXN0b21Wb2lkQ2FsbGJhY2tfaAogCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNr
LmgiCisjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8djguaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU2
LDYgKzU3LDcgQEAgcHJpdmF0ZToKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1f
Y2FsbGJhY2s7CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKKyAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CiB9
OwogCiAvLyBSZXR1cm5zIGZhbHNlIGlmIGNhbGxiYWNrIGZhaWxlZCAobnVsbCwgd3JvbmcgdHlw
ZSwgb3IgdGhyZXcgZXhjZXB0aW9uKS4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNDMzKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAt
MDUtMzEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBzdG9yYWdlL3RyYW5zYWN0aW9u
LXN1Y2Nlc3MtY2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbCBpcyBiZWluZyBmaXhlZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MTQ1CisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTAt
MDUtMzEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZDogdXBkYXRlIENocm9taXVtIGV4cGVjdGF0aW9ucyBmb3IgaHRtbDVs
aWIvcnVubmVyLmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJldmlzaW9uIDYwNDMzKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yODY4LDcgKzI4NjgsMyBAQCBCVUdfV0szODY4NiBXSU4gTElOVVggOiBmYXN0L3JlcGFp
bnQvYmFjCiBCVUdfV0szODY4NiBXSU4gTElOVVggOiBzY3JvbGxiYXJzL2xpc3Rib3gtc2Nyb2xs
YmFyLWNvbWJpbmF0aW9ucy5odG1sID0gSU1BR0UKIEJVR19XSzM4Njg2IFdJTiBMSU5VWCA6IHNj
cm9sbGJhcnMvb3ZlcmZsb3ctc2Nyb2xsYmFyLWNvbWJpbmF0aW9ucy5odG1sID0gSU1BR0UKIEJV
R19XSzM4Njg2IFdJTiBMSU5VWCA6IHN2Zy9XM0MtU1ZHLTEuMS9jb29yZHMtdmlld2F0dHItMDIt
Yi5zdmcgPSBJTUFHRQotCi0vLyBOZXcgc3RvcmFnZSB0ZXN0IGFkZGVkIGluIFdLIHJldi4gNjAz
ODYgZmFpbHMgaW4gQ2hyb21pdW0gb24gYWxsIHBsYXRmb3JtcwotLy8gRmlsZWQgYXMgaHR0cDov
L2NyYnVnLmNvbS80NTQ2MgotQlVHNDU0NjIgOiBzdG9yYWdlL3RyYW5zYWN0aW9uLXN1Y2Nlc3Mt
Y2FsbGJhY2staXNvbGF0ZWQtd29ybGQuaHRtbCA9IEZBSUwK
</data>
<flag name="review"
          id="42023"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="42024"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>