<?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>40112</bug_id>
          
          <creation_ts>2010-06-03 04:38:15 -0700</creation_ts>
          <short_desc>Database callbacks are made using the ScriptExecutionContext of the frame that owns the Database object, rather than that of the caller</short_desc>
          <delta_ts>2011-12-06 13:18:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dumi</cc>
    
    <cc>ericu</cc>
    
    <cc>jorlow</cc>
    
    <cc>michaeln</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233699</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-03 04:38:15 -0700</bug_when>
    <thetext>Database callbacks are made using the ScriptExecutionContext of the frame that owns the Database object. Instead, callbacks should be made using the ScriptContext of the caller that supplied the callback function.

Also, it looks like the Database object holds a RefPtr is to it&apos;s owning frame&apos;s context, but I don&apos;t think that the Database object should prolong the lifetime of the ScriptExecution context. See https://bugs.webkit.org/show_bug.cgi?id=39388#c6 Instead, if the relevant context no longer exists, the callbacks should simply not be made.

I tried writing a LayoutTest to demonstrate this, but had difficulty as the Database object already prevents callbacks once the frame owning the ScriptExecutionContext has gone away, via its stop() method.

See Bug 39879 for related discussion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233701</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-03 04:46:36 -0700</bug_when>
    <thetext>Note that Andrei is currently working on a patch that&apos;ll make [CallWith=ScriptExecutionContext] work with normal function calls.  This should make it easy for non-custom code to get the ScriptExecutionContext so the callbacks/events/etc they create can be ActiveDOMObjects...which is what they should be.  (For example, they should also not fire when execution is currently suspended.  See IDBRequest for an example of an ActiveDOMObject which already handles this gracefully.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238247</commentid>
    <comment_count>2</comment_count>
      <attachid>58754</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 22:58:41 -0700</bug_when>
    <thetext>Created attachment 58754
patch

Andrei, Jeremy: please take a look at the patch and let me know if I completely misunderstood what this bug is about.

Adam: assuming I understood correctly what the problem is, can you please take a careful look at this patch? In particular, I&apos;m concerned about ASSERT(m_scriptExecutionContext) in handleEvent() in the JSC callbacks. It seems to me that it&apos;s possible for the context that created the callback to go away before we get a chance to call the callback. In that case, should the ASSERT be replaced with something like &quot;if (!m_scriptExecutionContext) return true;&quot;? Or just remove the ASSERT and move the check inside toJSDOMGlobalObject()? Same question for ASSERT(m_data).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238248</commentid>
    <comment_count>3</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 23:01:07 -0700</bug_when>
    <thetext>Btw, I don&apos;t have permission to see bug 39388, so if there&apos;s anything relevant in there that I should take a look at, you&apos;ll probably have to copy-paste that stuff in here (assuming that&apos;s allowed!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238258</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-14 23:44:47 -0700</bug_when>
    <thetext>Attachment 58754 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3337151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238280</commentid>
    <comment_count>5</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 01:06:54 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; so the callbacks/events/etc they create can be ActiveDOMObjects

This might be tough to do. For example, the DB callbacks can be destroyed on the DB thread. However, ~ActiveDOMObject() doesn&apos;t allow that, and refactoring the code so that all DB callbacks are destroyed on the main/context thread is quite tricky and in most cases leads to hacks, or at least code that&apos;s hard to follow (I tried).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238297</commentid>
    <comment_count>6</comment_count>
      <attachid>58764</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 01:36:55 -0700</bug_when>
    <thetext>Created attachment 58764
patch

Same patch, should compile on Chromium hopefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238308</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-15 02:17:45 -0700</bug_when>
    <thetext>Attachment 58764 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3306150</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238309</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-15 02:26:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #1)
&gt; &gt; so the callbacks/events/etc they create can be ActiveDOMObjects
&gt; 
&gt; This might be tough to do. For example, the DB callbacks can be destroyed on the DB thread. However, ~ActiveDOMObject() doesn&apos;t allow that, and refactoring the code so that all DB callbacks are destroyed on the main/context thread is quite tricky and in most cases leads to hacks, or at least code that&apos;s hard to follow (I tried).

I haven&apos;t looked at the code yet.  But DOMTimer is apparently another model that you might want to look at.

And/or you could split things into 2 objects: one that hangs out (mostly) on the main thread and one that hangs out (mostly) on the database thread.  One would own the other and make sure the other gets destroyed on the proper thread.  At least conceptually, such a split would probably make things a bit cleaner anyway.

...anyway, will look at the patch today and get back to you either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238313</commentid>
    <comment_count>9</comment_count>
      <attachid>58766</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-15 03:49:14 -0700</bug_when>
    <thetext>Created attachment 58766
patch

Same patch, this time tested in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239641</commentid>
    <comment_count>10</comment_count>
      <attachid>58766</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 16:53:46 -0700</bug_when>
    <thetext>Comment on attachment 58766
patch

Great!  Is there a way to test this change?

WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp: 
 +      args.append(toJS(exec, deprecatedGlobalObjectForPrototype(exec), error));
How did we get rid of deprecatedGlobalObjectForPrototype(exec) here?  can we get the right global object?

WebCore/bindings/scripts/CodeGeneratorV8.pm:2291
 +              @args = ();
We don&apos;t need a &quot;my&quot; here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239659</commentid>
    <comment_count>11</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-17 17:09:18 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 58766 [details])
&gt; Great!  Is there a way to test this change?

Maybe... How do I create 2 ScriptExecutionContexts, such that context_2 can see everything in context_1?

&gt; WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp: 
&gt;  +      args.append(toJS(exec, deprecatedGlobalObjectForPrototype(exec), error));
&gt; How did we get rid of deprecatedGlobalObjectForPrototype(exec) here?  can we get the right global object?

That&apos;s the global object we get in the generated callbacks. Also, JSDOMBinding.h says:
  // FIXME: Callers to this function should be using the global object
  // from which the object is being created, instead of assuming the lexical one.
  // e.g. subframe.document.body should use the subframe&apos;s global object, not the lexical one.

And other than JSDOMBinding.{h|cpp}, there are only 4 calls to this function, all in custom callbacks.


&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:2291
&gt;  +              @args = ();
&gt; We don&apos;t need a &quot;my&quot; here?

It&apos;s declared before that with a &quot;my&quot;, I just want to clear it here and reuse it. If I add &quot;my&quot; again, wouldn&apos;t that count as re-declaring the same variable? Is there a better way to clear the array?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239666</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 17:20:33 -0700</bug_when>
    <thetext>ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239668</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 17:21:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 58766 [details] [details])
&gt; &gt; Great!  Is there a way to test this change?
&gt; 
&gt; Maybe... How do I create 2 ScriptExecutionContexts, such that context_2 can see everything in context_1?

Just use two frames in the same origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240058</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-18 11:30:44 -0700</bug_when>
    <thetext>I took a look and this seems like a good start, but I believe it still doesn&apos;t handle the case that you start something that has a callback and then you navigate the page away.  I believe the callback will still fire...possibly on an invalid script execution context.  Is there anything that would prevent this?

Also, if execution is paused because of the inspector&apos;s debugger has paused things, it&apos;s in the page cache, or other cases like this, I believe the callback will still fire erroneously.  Using ActiveDOMObject would also give you information about this happening.

Once again, IDBRequest and/or DOMTimer should be good things to look at to see how others handle this stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240645</commentid>
    <comment_count>15</comment_count>
      <attachid>59238</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 03:18:49 -0700</bug_when>
    <thetext>Created attachment 59238
patch

It looks like all DB callbacks are currently called in the correct context; the test I added in this patch passes in an unmodified client. I&apos;m not 100% sure how this happens (I would&apos;ve thought that they get executed in the context in which the DB handle is created), but I guess keeping track of the &quot;world&quot; in which the callbacks are created takes care of this problem.

In any case, I think it&apos;s worth turning callbacks into ActiveDOMObjects.

It might be hard to figure out what changes have been made to WebCoreCommon.vsprops: I only added WebCore/bindings/generic/ to the list of include dirs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240646</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 03:21:49 -0700</bug_when>
    <thetext>Attachment 59238 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/generic/ActiveDOMCallback.h:56:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/bindings/generic/ActiveDOMCallback.cpp:94:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/bindings/generic/ActiveDOMCallback.cpp:96:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 3 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240648</commentid>
    <comment_count>17</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 03:24:10 -0700</bug_when>
    <thetext>&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebCore/bindings/generic/ActiveDOMCallback.h:56:  Use 0 instead of NULL.  [readability/null] [4]
&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:94:  Use 0 instead of NULL.  [readability/null] [4]
&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:96:  Use 0 instead of NULL.  [readability/null] [4]
&gt; Total errors found: 3 in 42 files

All 3 NULLs are in comments. check-webkit-style should probably be able to detect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240650</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 04:11:52 -0700</bug_when>
    <thetext>Attachment 59238 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3291533</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240732</commentid>
    <comment_count>19</comment_count>
      <attachid>59238</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-21 08:45:08 -0700</bug_when>
    <thetext>Comment on attachment 59238
patch

WebCore/bindings/generic/ActiveDOMCallback.cpp:14
 +   *     * Neither the name of Google Inc. nor the names of its
I believe we prefer new files to be the 2 clause BSD license found here: http://webkit.org/coding/bsd-license.html  (Changing Apple to Google is not necessary except in the copyright at the top, as far as I understand it.)

WebCore/bindings/generic/ActiveDOMCallback.h:14
 +   *     * Neither the name of Google Inc. nor the names of its
Ditto

WebCore/bindings/generic/ActiveDOMCallback.h:58
 +      WTF::Mutex* m_implMutex;
This should be an OwnPtr&lt;Mutex&gt;

WebCore/bindings/generic/ActiveDOMCallback.h:63
 +      ActiveDOMObjectCallbackImpl* m_impl;
Ditto.  You can .release() them when you pass them to the destroyOnContextThread function.

WebCore/bindings/generic/ActiveDOMCallback.cpp:40
 +  static void destroyOnContextThread(ActiveDOMObjectCallbackImpl*, Mutex*, bool);
Would it be better to put all of this stuff in an anonymous name space?  (I can&apos;t remember if this is a standard thing to do in WebKit or not.)

LayoutTests/storage/resources/database-common.js:36
 +  function setupAndRunFramesTest()
This function seems pretty specific to the way that you&apos;ve set up this particular test.  I think it should probably just go in the test itself.

WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp:46
 +      if (!m_data || !canInvokeCallback())
Shouldn&apos;t we queue this up to run whenever we can invoke the callback?

LayoutTests/storage/resources/callbacks-are-called-in-correct-context-test-frame.html:15
 +      db.transaction(top.frames[2].failingTransactionCallback, top.frames[2].errorTransactionCallback);
God...this is all so confusing....but isn&apos;t the callback supposed to bound to _this_ scriptExecutioncontext (and not the other frame&apos;s) and thus we expect the above logCallback to be called rather than the one in the other file?

Dr Barth, thoughts?

WebCore/bindings/generic/ActiveDOMCallback.h:45
 +  class ActiveDOMCallback {
Should this be threadsafe refcounted?  Or will there always be clear ownership?

WebCore/bindings/generic/ActiveDOMCallback.cpp:91
 +  static void destroyOnContextThread(ActiveDOMObjectCallbackImpl* impl, Mutex* implMutex, bool deleteMutex)
This should take passOwnPtrs...that makes it easier to make sure no case leaks.

WebCore/bindings/generic/ActiveDOMCallback.cpp:94
 +          // implMutex is NULL if and only if ActiveDOMCallback&apos;s destructor was already called and impl
But are we _guaranteed_ that tasks scheduled on a thread are run in order?  If not, then it&apos;s possible the destruction task (which deletes the mutex) could run first.  I think in practice they run in order, but I&apos;m not sure we have a guarantee of it.

WebCore/bindings/generic/ActiveDOMCallback.cpp:78
 +      virtual void contextDestroyed() { destroyOnContextThread(this, m_mutex, false); }
I believe this will _always_ be called before the destructor.  Using this fact might help you clean up the logic a bit.

One idea: the mutex is owned by this class (and just destroys it normally).  The destroyOnContextThread task holds a reference to this object (which is made threadsafe ref counted).  It releases its reference once it&apos;s deleted the impl on the context thread.  That way the mutex can&apos;t go away before the task uses it but you don&apos;t need the deleteMutex flag and you don&apos;t have the second task for every instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241194</commentid>
    <comment_count>20</comment_count>
      <attachid>59355</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-22 02:00:14 -0700</bug_when>
    <thetext>Created attachment 59355
patch

&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:14
&gt;  +   *     * Neither the name of Google Inc. nor the names of its
&gt; I believe we prefer new files to be the 2 clause BSD license found here: http://webkit.org/coding/bsd-license.html  (Changing Apple to Google is not necessary except in the copyright at the top, as far as I understand it.)

All classes in WebCore/bindings/generic/ have this copyright. There&apos;s another change too: in the last paragraph, &quot;APPLE&quot; is changed to &quot;THE COPYRIGHT HOLDERS&quot;. I vaguely remember a discussion about this and I think the verdict was that it&apos;s OK to use this copyright for new code introduced by Google, but I might be wrong.

&gt; WebCore/bindings/generic/ActiveDOMCallback.h:58
&gt;  +      WTF::Mutex* m_implMutex;
&gt; This should be an OwnPtr&lt;Mutex&gt;

Made some changes, the code should look a lot simpler now.

&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:40
&gt;  +  static void destroyOnContextThread(ActiveDOMObjectCallbackImpl*, Mutex*, bool);
&gt; Would it be better to put all of this stuff in an anonymous name space?  (I can&apos;t remember if this is a standard thing to do in WebKit or not.)

I don&apos;t see the guide saying anything about static functions. Normally, I&apos;d prefer an anonymous namespace too, but in this case it&apos;s only one simple function, so I don&apos;t think it&apos;s worth it (plus I&apos;d have to prefix all classes with WebCore:: too).

&gt; LayoutTests/storage/resources/database-common.js:36
&gt;  +  function setupAndRunFramesTest()
&gt; This function seems pretty specific to the way that you&apos;ve set up this particular test.  I think it should probably just go in the test itself.

Done. The setup itself could probably be reused, but I don&apos;t know if we&apos;re gonna have any more DB tests that use frames.

&gt; WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp:46
&gt;  +      if (!m_data || !canInvokeCallback())
&gt; Shouldn&apos;t we queue this up to run whenever we can invoke the callback?

You mean invoke the callback one more time when we can? What if the code that needs to run next depends on the result of this callback? For example, we cannot move on to the next sync transaction until the success/error callback of the current one returns. Unless ScriptExecutionContext::suspendActiveDOMObjects() suspends the context thread too, it seems to me that there&apos;s not much we can do.

&gt; LayoutTests/storage/resources/callbacks-are-called-in-correct-context-test-frame.html:15
&gt;  +      db.transaction(top.frames[2].failingTransactionCallback, top.frames[2].errorTransactionCallback);
&gt; God...this is all so confusing....but isn&apos;t the callback supposed to bound to _this_ scriptExecutioncontext (and not the other frame&apos;s) and thus we expect the above logCallback to be called rather than the one in the other file?
&gt; 
&gt; Dr Barth, thoughts?

Hmm, not sure about the test. It looks like the callbacks are executed in the context where they&apos;re declared. I had the same expectations as you, but both the JS and V8 bindings behave this way (and they get the context in different ways), and I can&apos;t find anything obviously wrong with them... Adam, can you please take a look at the test and clarify what the expectations are?

&gt; WebCore/bindings/generic/ActiveDOMCallback.h:45
&gt;  +  class ActiveDOMCallback {
&gt; Should this be threadsafe refcounted?  Or will there always be clear ownership?

I don&apos;t think ActiveDOMCallback should be (threadsafe) refcounted, because it is extended by all callback implementations, and some callbacks just don&apos;t need to be refcounted. Instead, every callback implementation extends an abstract class used by the non-bindings code to refer to that callback; I think the refcounted flavor (if any) should go into the declaration of that abstract class.

&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:94
&gt;  +          // implMutex is NULL if and only if ActiveDOMCallback&apos;s destructor was already called and impl
&gt; But are we _guaranteed_ that tasks scheduled on a thread are run in order?  If not, then it&apos;s possible the destruction task (which deletes the mutex) could run first.  I think in practice they run in order, but I&apos;m not sure we have a guarantee of it.

This shouldn&apos;t be an issue anymore.

&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:78
&gt;  +      virtual void contextDestroyed() { destroyOnContextThread(this, m_mutex, false); }
&gt; I believe this will _always_ be called before the destructor.  Using this fact might help you clean up the logic a bit.

Technically, the destructor of a callback can be called on a different thread before contextDestroyed() is called (on the context thread). However, I don&apos;t see how contextDestroyed() can be called after destroyOnContextThread() is called by the callback destructor and executed on the context thread. That helped simply the implementation a lot. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241200</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 02:54:43 -0700</bug_when>
    <thetext>Attachment 59355 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3292609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241202</commentid>
    <comment_count>22</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-22 03:01:19 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Attachment 59355 [details] did not build on chromium:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/3292609

I&apos;m told that at least one step in the build process is skipped on the Chromium bots. The patch build just fine in my local Chromium client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241207</commentid>
    <comment_count>23</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-22 03:11:45 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=59355) [details]
&gt; patch
&gt; 
&gt; &gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:14
&gt; &gt;  +   *     * Neither the name of Google Inc. nor the names of its
&gt; &gt; I believe we prefer new files to be the 2 clause BSD license found here: http://webkit.org/coding/bsd-license.html  (Changing Apple to Google is not necessary except in the copyright at the top, as far as I understand it.)
&gt; 
&gt; All classes in WebCore/bindings/generic/ have this copyright. There&apos;s another change too: in the last paragraph, &quot;APPLE&quot; is changed to &quot;THE COPYRIGHT HOLDERS&quot;. I vaguely remember a discussion about this and I think the verdict was that it&apos;s OK to use this copyright for new code introduced by Google, but I might be wrong.

It probably doesn&apos;t matter much either way.

&gt; &gt; LayoutTests/storage/resources/database-common.js:36
&gt; &gt;  +  function setupAndRunFramesTest()
&gt; &gt; This function seems pretty specific to the way that you&apos;ve set up this particular test.  I think it should probably just go in the test itself.
&gt; 
&gt; Done. The setup itself could probably be reused, but I don&apos;t know if we&apos;re gonna have any more DB tests that use frames.

Well, it was pretty specific to that way of setting up frames and was only a couple lines.

&gt; &gt; WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp:46
&gt; &gt;  +      if (!m_data || !canInvokeCallback())
&gt; &gt; Shouldn&apos;t we queue this up to run whenever we can invoke the callback?
&gt; 
&gt; You mean invoke the callback one more time when we can? What if the code that needs to run next depends on the result of this callback? For example, we cannot move on to the next sync transaction until the success/error callback of the current one returns. Unless ScriptExecutionContext::suspendActiveDOMObjects() suspends the context thread too, it seems to me that there&apos;s not much we can do.

Well, it depends on why it&apos;s suspended.  If it&apos;s because we&apos;re debugging, then we probably shouldn&apos;t do anything special.  If it&apos;s because it&apos;s in the page cache, you&apos;re right.  Is there any way to distinguish between the two?

Also, an onsuccess call when the page is in the page cache should probably cancel the transaction and result in an error call being made instead.  But an onerror call should be queued up no matter what.
 
&gt; &gt; LayoutTests/storage/resources/callbacks-are-called-in-correct-context-test-frame.html:15
&gt; &gt;  +      db.transaction(top.frames[2].failingTransactionCallback, top.frames[2].errorTransactionCallback);
&gt; &gt; God...this is all so confusing....but isn&apos;t the callback supposed to bound to _this_ scriptExecutioncontext (and not the other frame&apos;s) and thus we expect the above logCallback to be called rather than the one in the other file?
&gt; &gt; 
&gt; &gt; Dr Barth, thoughts?
&gt; 
&gt; Hmm, not sure about the test. It looks like the callbacks are executed in the context where they&apos;re declared. I had the same expectations as you, but both the JS and V8 bindings behave this way (and they get the context in different ways), and I can&apos;t find anything obviously wrong with them... Adam, can you please take a look at the test and clarify what the expectations are?

We just talked about this a bunch and Steve Block thinks your right, but we&apos;re not 100% sure.  We really need an expert on this to explain what the expected behavior is.  i.e. what do we do in the following situation: 3 frames in the same origin named A, B, C.  Frame B has function X in it.  Frame A calls frame C&apos;s windows&apos; openDatabase method and passes in function X from frame B.

If the answer is B then I guess I&apos;ll need to change the indexedDB code.
 
&gt; &gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:78
&gt; &gt;  +      virtual void contextDestroyed() { destroyOnContextThread(this, m_mutex, false); }
&gt; &gt; I believe this will _always_ be called before the destructor.  Using this fact might help you clean up the logic a bit.
&gt; 
&gt; Technically, the destructor of a callback can be called on a different thread before contextDestroyed() is called (on the context thread). However, I don&apos;t see how contextDestroyed() can be called after destroyOnContextThread() is called by the callback destructor and executed on the context thread. That helped simply the implementation a lot. :)

For the record, I still think it&apos;s a mistake (because it&apos;s messy) to ever allow callback objects to be destroyed on a background thread.  I don&apos;t know this code very well, but it seems like you could have wrapped the callback object the bindings gives you in a threadsafe object that knows how to destroy the callback safely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241263</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-22 08:31:31 -0700</bug_when>
    <thetext>&gt; Normally, I&apos;d prefer an anonymous namespace too

We don&apos;t normally use anonymous namespaces in WebKit. An explanation I saw was that it&apos;s hard to refer to symbols defined in such in a debugger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241420</commentid>
    <comment_count>25</comment_count>
      <attachid>58766</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-22 13:24:26 -0700</bug_when>
    <thetext>Comment on attachment 58766
patch

Cleared Adam Barth&apos;s review+ from obsolete attachment 58766 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242500</commentid>
    <comment_count>26</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-24 07:18:16 -0700</bug_when>
    <thetext>(In reply to comment #23)

Ping...  (Was hoping for a response to my comments.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242688</commentid>
    <comment_count>27</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-24 15:20:50 -0700</bug_when>
    <thetext>&gt; &gt; You mean invoke the callback one more time when we can? What if the code that needs to run next depends on the result of this callback? For example, we cannot move on to the next sync transaction until the success/error callback of the current one returns. Unless ScriptExecutionContext::suspendActiveDOMObjects() suspends the context thread too, it seems to me that there&apos;s not much we can do.
&gt; 
&gt; Well, it depends on why it&apos;s suspended.  If it&apos;s because we&apos;re debugging, then we probably shouldn&apos;t do anything special.  If it&apos;s because it&apos;s in the page cache, you&apos;re right.  Is there any way to distinguish between the two?

I see your point about debugging, and I agree that in that case we should go ahead and execute the callback (is that what you were suggesting?). However, I&apos;m not sure how to figure out if we&apos;re in debug mode or not, I&apos;ll ask around.

&gt; Also, an onsuccess call when the page is in the page cache should probably cancel the transaction and result in an error call being made instead.  But an onerror call should be queued up no matter what.

This is not possible. According to the spec, the success callback is supposed to be called only after the transaction has been successfully committed. At that point there&apos;s no way to revert it.

Also, we cannot just queue up an error callback. The return value of a statement error callback determines if we should execute the other statements in the transaction, or if we should immediately fail the transaction. So in a sync transaction, we cannot do anything until that error callback has executed, which means that we need to either block until the context is resumed and we can execute the callback, or we need to fail the callback (basically, assume that it threw an exception), and move on.

&gt; We just talked about this a bunch and Steve Block thinks your right, but we&apos;re not 100% sure.  We really need an expert on this to explain what the expected behavior is.  i.e. what do we do in the following situation: 3 frames in the same origin named A, B, C.  Frame B has function X in it.  Frame A calls frame C&apos;s windows&apos; openDatabase method and passes in function X from frame B.

I&apos;ll try to catch Adam online tonight and bug him about this.

&gt; For the record, I still think it&apos;s a mistake (because it&apos;s messy) to ever allow callback objects to be destroyed on a background thread.  I don&apos;t know this code very well, but it seems like you could have wrapped the callback object the bindings gives you in a threadsafe object that knows how to destroy the callback safely.

All async callbacks _are_ ThreadSafeShared (take a look at SQLTransactionCallback.h, DatabaseCallback.h, and so on). Other callbacks might not need to be ThreadSafeShared, though. For example, the entire sync DB implementation is going to live only on the context thread, so the JSC and V8 implementations of SQLTransactionSyncCallback.h don&apos;t need to be ThreadSafeShared.

So I think we shouldn&apos;t make ActiveDOMCallback ThreadSafeShared, and thus force all callback objects to be ThreadSafeShared. Instead, we should leave it up to &quot;interface&quot; declarations like SQLTransactionCallback and SQLTransactionSyncCallback to decide if the implementations of those callback objects need to be ThreadSafeShared or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242916</commentid>
    <comment_count>28</comment_count>
      <attachid>59751</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-25 03:03:00 -0700</bug_when>
    <thetext>Created attachment 59751
patch

I talked to Adam about what should run where, and I updated the test expectations accordingly (assuming I understood him correctly). However, I can&apos;t get the test to pass. So I&apos;m uploading the patch to have something to point Adam to, and hopefully he can tell me what I&apos;m doing wrong. :)

I believe Adam&apos;s answer was that the callback objects should be created in the context in which the callbacks are invoked. However, the functions/variables/etc. that the callbacks &quot;see&quot; while they run should be the ones in the context in which they were declared. So basically, if you have frames A, B, and C, and each one of them has a log() method, and the DB handle is opened in A, and the transaction callbacks are declared in B (and they call log()), then when you run db.transaction(callback) in frame C, the callback objects should be created in frame C, but the log() method in frame B should be called.

When I run the test, it does always call log() in the frame in which the callbacks are declared. However, it seems like the callback objects are always created in that frame too -- that&apos;s the part that&apos;s failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242920</commentid>
    <comment_count>29</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-25 03:08:01 -0700</bug_when>
    <thetext>AP: Are you watching this?  Would love, at very least, for you to sanity check our thinking on this...

(In reply to comment #27)
&gt; &gt; &gt; You mean invoke the callback one more time when we can? What if the code that needs to run next depends on the result of this callback? For example, we cannot move on to the next sync transaction until the success/error callback of the current one returns. Unless ScriptExecutionContext::suspendActiveDOMObjects() suspends the context thread too, it seems to me that there&apos;s not much we can do.
&gt; &gt; 
&gt; &gt; Well, it depends on why it&apos;s suspended.  If it&apos;s because we&apos;re debugging, then we probably shouldn&apos;t do anything special.  If it&apos;s because it&apos;s in the page cache, you&apos;re right.  Is there any way to distinguish between the two?
&gt; 
&gt; I see your point about debugging, and I agree that in that case we should go ahead and execute the callback (is that what you were suggesting?). However, I&apos;m not sure how to figure out if we&apos;re in debug mode or not, I&apos;ll ask around.
&gt; 
&gt; &gt; Also, an onsuccess call when the page is in the page cache should probably cancel the transaction and result in an error call being made instead.  But an onerror call should be queued up no matter what.
&gt; 
&gt; This is not possible. According to the spec, the success callback is supposed to be called only after the transaction has been successfully committed. At that point there&apos;s no way to revert it.
&gt; 
&gt; Also, we cannot just queue up an error callback. The return value of a statement error callback determines if we should execute the other statements in the transaction, or if we should immediately fail the transaction. So in a sync transaction, we cannot do anything until that error callback has executed, which means that we need to either block until the context is resumed and we can execute the callback, or we need to fail the callback (basically, assume that it threw an exception), and move on.

Then I guess pages that use databases will just never be able to go into the page cache.  (You should probably add a comment explaining all of this in wherever we keep it from happening so people know what they&apos;re up against if they want to remove the block.)  In that case, the problem of seeing if the reason your suspended is because of being in the page cache or something like debugging seems to be solved for you.  :-)
 
&gt; &gt; We just talked about this a bunch and Steve Block thinks your right, but we&apos;re not 100% sure.  We really need an expert on this to explain what the expected behavior is.  i.e. what do we do in the following situation: 3 frames in the same origin named A, B, C.  Frame B has function X in it.  Frame A calls frame C&apos;s windows&apos; openDatabase method and passes in function X from frame B.
&gt; 
&gt; I&apos;ll try to catch Adam online tonight and bug him about this.
&gt; 
&gt; &gt; For the record, I still think it&apos;s a mistake (because it&apos;s messy) to ever allow callback objects to be destroyed on a background thread.  I don&apos;t know this code very well, but it seems like you could have wrapped the callback object the bindings gives you in a threadsafe object that knows how to destroy the callback safely.
&gt; 
&gt; All async callbacks _are_ ThreadSafeShared (take a look at SQLTransactionCallback.h, DatabaseCallback.h, and so on). Other callbacks might not need to be ThreadSafeShared, though. For example, the entire sync DB implementation is going to live only on the context thread, so the JSC and V8 implementations of SQLTransactionSyncCallback.h don&apos;t need to be ThreadSafeShared.
&gt; 
&gt; So I think we shouldn&apos;t make ActiveDOMCallback ThreadSafeShared, and thus force all callback objects to be ThreadSafeShared. Instead, we should leave it up to &quot;interface&quot; declarations like SQLTransactionCallback and SQLTransactionSyncCallback to decide if the implementations of those callback objects need to be ThreadSafeShared or not.

That&apos;s not what I was saying.  I think it&apos;s bad that _any_ callback needs to be threadsafe.  I think it should be _owned_ by a threadsafe object that ensures it&apos;s deleted on the right thread.  But this thought wasn&apos;t directed at this patch, it was more general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242922</commentid>
    <comment_count>30</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-25 03:09:03 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=59751) [details]
&gt; patch
&gt; 
&gt; I talked to Adam about what should run where, and I updated the test expectations accordingly (assuming I understood him correctly). However, I can&apos;t get the test to pass. So I&apos;m uploading the patch to have something to point Adam to, and hopefully he can tell me what I&apos;m doing wrong. :)
&gt; 
&gt; I believe Adam&apos;s answer was that the callback objects should be created in the context in which the callbacks are invoked. However, the functions/variables/etc. that the callbacks &quot;see&quot; while they run should be the ones in the context in which they were declared. So basically, if you have frames A, B, and C, and each one of them has a log() method, and the DB handle is opened in A, and the transaction callbacks are declared in B (and they call log()), then when you run db.transaction(callback) in frame C, the callback objects should be created in frame C, but the log() method in frame B should be called.
&gt; 
&gt; When I run the test, it does always call log() in the frame in which the callbacks are declared. However, it seems like the callback objects are always created in that frame too -- that&apos;s the part that&apos;s failing.

That&apos;s insane....guess we have some work to do in these other APIs as well.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242957</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 04:48:15 -0700</bug_when>
    <thetext>Attachment 59751 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3267700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243012</commentid>
    <comment_count>32</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-25 08:04:04 -0700</bug_when>
    <thetext>&gt; I believe Adam&apos;s answer was that the callback objects should be created in the
&gt; context in which the callbacks are invoked.
You mean the context in which the DB method was called? If I understand your latest patch, that&apos;s what you&apos;re doing here. And you check that the context is still around before you make the callback, right? I think there should be a test to check that we don&apos;t crash in this case.

This is what Geolocation does and it has a test for attempting to call back to a deleted context that you might want to take a look at.

&gt; When I run the test, it does always call log() in the frame in which the
&gt; callbacks are declared. However, it seems like the callback objects are always
&gt; created in that frame too -- that&apos;s the part that&apos;s failing.
How are you attempting to test (from JS) the context in which the callback is created? When I was making similar changes to Geolocation I didn&apos;t find a way to do this. As soon as the callback function is invoked, the context is switched to that of the callback function, as it should be. So in your example, by the time the callback function is invoked, the global object is that of frame B.

On a related note, why do you need to use a CGI script and test the referrer to determine the context. Isn&apos;t the referrer simply determined by the global object? So I think we can test any property of the global object, like window.location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243027</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 08:36:03 -0700</bug_when>
    <thetext>&gt; Then I guess pages that use databases will just never be able to go into the page cache.

That&apos;s how it works now, but I think that pages should be able to go to page cache when there are no outstanding transactions.

A general comment: it&apos;s hard for me to think of a callback as ActiveDOMObject. It&apos;s not much of an object! A transaction object might be a better candidate for housekeeping like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243028</commentid>
    <comment_count>34</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-25 08:40:02 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; &gt; Then I guess pages that use databases will just never be able to go into the page cache.
&gt; 
&gt; That&apos;s how it works now, but I think that pages should be able to go to page cache when there are no outstanding transactions.
&gt; 
&gt; A general comment: it&apos;s hard for me to think of a callback as ActiveDOMObject. It&apos;s not much of an object! A transaction object might be a better candidate for housekeeping like that.

We could always rename ActiveDOMObject as well.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243029</commentid>
    <comment_count>35</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 08:42:03 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure how to figure out if we&apos;re in debug mode or not, I&apos;ll ask around.

The fact that ActiveDOMObjects are suspended in identical manner for debugging, for page cache, and for displaying a modal dialog is an oversimplification. We&apos;ve been able to get away with it for now, but it&apos;s quite possible that we need different behaviors in those cases. I don&apos;t have a specific suggestion here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243058</commentid>
    <comment_count>36</comment_count>
      <attachid>59751</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-25 09:57:59 -0700</bug_when>
    <thetext>Comment on attachment 59751
patch

Dumi, does this patch reflect your current understanding?  If so, I&apos;m happy to look at it in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243080</commentid>
    <comment_count>37</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-25 11:03:10 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 59751 [details])
&gt; Dumi, does this patch reflect your current understanding?  If so, I&apos;m happy to look at it in detail.

Yes, please do when you have some time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252921</commentid>
    <comment_count>38</comment_count>
      <attachid>59751</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-17 16:25:48 -0700</bug_when>
    <thetext>Comment on attachment 59751
patch

WebCore/bindings/generic/ActiveDOMCallback.cpp:47
 +          return new DestroyOnContextThreadTask(impl);
I think we&apos;re supposed to say adoptPtr nowadays.

WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:55
 +      if (!m_data || !m_data-&gt;globalObject() || !canInvokeCallback())
I don&apos;t understand how !m_data or !m_data-&gt;globalObject() can be true here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252923</commentid>
    <comment_count>39</comment_count>
      <attachid>59751</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-17 16:40:55 -0700</bug_when>
    <thetext>Comment on attachment 59751
patch

This patch is definitely an improvement.  It might take a little tweaking to get perfect, but that&apos;s fine.  Thanks for sticking with it.  Please think about my comments before landing.

WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp: 
 +      RefPtr&lt;ScriptExecutionContext&gt; protector(context);
Why don&apos;t we need this anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252940</commentid>
    <comment_count>40</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-17 19:25:23 -0700</bug_when>
    <thetext>to answer the question you asked on IRC: when i run the test, i always get &quot;Referrer: http://127.0.0.1:8000/storage/resources/callbacks-are-called-in-correct-context-second-frame.html&quot;, no matter where in which frame i run db.transaction().

(In reply to comment #38)
&gt; (From update of attachment 59751 [details])
&gt; WebCore/bindings/generic/ActiveDOMCallback.cpp:47
&gt;  +          return new DestroyOnContextThreadTask(impl);
&gt; I think we&apos;re supposed to say adoptPtr nowadays.

changed.

&gt; WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:55
&gt;  +      if (!m_data || !m_data-&gt;globalObject() || !canInvokeCallback())
&gt; I don&apos;t understand how !m_data or !m_data-&gt;globalObject() can be true here.

removed. i don&apos;t think they can, but i wasn&apos;t sure. if globalObject is null though (is it even possible?), then we&apos;ll crash in the constructor.

(In reply to comment #39)
&gt; (From update of attachment 59751 [details])
&gt; This patch is definitely an improvement.  It might take a little tweaking to get perfect, but that&apos;s fine.  Thanks for sticking with it.  Please think about my comments before landing.
&gt; 
&gt; WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp: 
&gt;  +      RefPtr&lt;ScriptExecutionContext&gt; protector(context);
&gt; Why don&apos;t we need this anymore?

the &apos;context&apos; argument is no longer passed to the callback, we get it from ActiveDOMCallback. also, the callback is always called on the context thread, and ScriptExecutionContext isn&apos;t thread-safe, so i&apos;m assuming it can only be destroyed on the context thread. therefore, there can&apos;t be a race between handleEvent() (that uses ScriptExecutionContext*) and ActiveDOMObject::contextDestroyed() (that sets it to NULL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258511</commentid>
    <comment_count>41</comment_count>
      <attachid>63135</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-30 18:43:12 -0700</bug_when>
    <thetext>Created attachment 63135
patch

Same patch, with all conflicts resolved, and the expectations for the new test updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258783</commentid>
    <comment_count>42</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-02 04:36:01 -0700</bug_when>
    <thetext>You already have an r+.  If you didn&apos;t change anything of substance, you probably can just land as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258994</commentid>
    <comment_count>43</comment_count>
      <attachid>63135</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-02 11:14:32 -0700</bug_when>
    <thetext>Comment on attachment 63135
patch

(Yeah, I said the same thing to dumi on IRC.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259319</commentid>
    <comment_count>44</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-08-03 02:06:00 -0700</bug_when>
    <thetext>landed: r64537.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276876</commentid>
    <comment_count>45</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-09 17:41:31 -0700</bug_when>
    <thetext>+// Instances of this class are accessed only on the context thread, so we don&apos;t need to use locks.

I don&apos;t understand this comment in ActiveDOMCallback.cpp. Most functions in this class lock m_mutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276894</commentid>
    <comment_count>46</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-09-09 18:01:41 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; +// Instances of this class are accessed only on the context thread, so we don&apos;t need to use locks.
&gt; 
&gt; I don&apos;t understand this comment in ActiveDOMCallback.cpp. Most functions in this class lock m_mutex.

This comment is obsolete. In the first version of this patch, ActiveDOMObjectCallbackImpl instances were used only on the context thread, and I forgot to delete the comment when that changed. I&apos;ll upload a patch to remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276934</commentid>
    <comment_count>47</comment_count>
      <attachid>67136</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-09-09 18:52:43 -0700</bug_when>
    <thetext>Created attachment 67136
remove obsolete comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276963</commentid>
    <comment_count>48</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-09-09 20:00:30 -0700</bug_when>
    <thetext>the patch that removes the comment landed in r67153.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307993</commentid>
    <comment_count>49</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-11-11 10:52:03 -0800</bug_when>
    <thetext>95 bool canInvokeCallback()
 96 {
 97 MutexLocker locker(m_mutex);
 98 return (!m_suspended &amp;&amp; !m_stopped);
 99 } 

So when the ActiveDOMObject is suspended, the callback is not allowed to run. How do we resume the callback when ActiveDOMObject is resumed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307999</commentid>
    <comment_count>50</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-11-11 11:01:30 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; 95 bool canInvokeCallback()
&gt;  96 {
&gt;  97 MutexLocker locker(m_mutex);
&gt;  98 return (!m_suspended &amp;&amp; !m_stopped);
&gt;  99 } 
&gt; 
&gt; So when the ActiveDOMObject is suspended, the callback is not allowed to run. How do we resume the callback when ActiveDOMObject is resumed?

We don&apos;t (at the moment). To preserve the order in which things should run, we need to add a special &quot;higher priority&quot; task queue to the main thread, and post tasks to re-invoke the callbacks there. I&apos;m looking into that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308041</commentid>
    <comment_count>51</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-11 11:57:01 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; 95 bool canInvokeCallback()
&gt; &gt;  96 {
&gt; &gt;  97 MutexLocker locker(m_mutex);
&gt; &gt;  98 return (!m_suspended &amp;&amp; !m_stopped);
&gt; &gt;  99 } 
&gt; &gt; 
&gt; &gt; So when the ActiveDOMObject is suspended, the callback is not allowed to run. How do we resume the callback when ActiveDOMObject is resumed?
&gt; 
&gt; We don&apos;t (at the moment). To preserve the order in which things should run, we need to add a special &quot;higher priority&quot; task queue to the main thread, and post tasks to re-invoke the callbacks there. I&apos;m looking into that now.

Dear god, no.  Priorities are almost never the right answer when there needs to be a strict ordering of things.

Just keep your own queue somewhere and have the task run through items in the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308060</commentid>
    <comment_count>52</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-11-11 12:36:29 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (In reply to comment #50)
&gt; &gt; (In reply to comment #49)
&gt; &gt; &gt; 95 bool canInvokeCallback()
&gt; &gt; &gt;  96 {
&gt; &gt; &gt;  97 MutexLocker locker(m_mutex);
&gt; &gt; &gt;  98 return (!m_suspended &amp;&amp; !m_stopped);
&gt; &gt; &gt;  99 } 
&gt; &gt; &gt; 
&gt; &gt; &gt; So when the ActiveDOMObject is suspended, the callback is not allowed to run. How do we resume the callback when ActiveDOMObject is resumed?
&gt; &gt; 
&gt; &gt; We don&apos;t (at the moment). To preserve the order in which things should run, we need to add a special &quot;higher priority&quot; task queue to the main thread, and post tasks to re-invoke the callbacks there. I&apos;m looking into that now.
&gt; Dear god, no.  Priorities are almost never the right answer when there needs to be a strict ordering of things.
&gt; Just keep your own queue somewhere and have the task run through items in the queue.

I&apos;m working on a patch to use a task queue in Document class. When page loading is deferred, I push the tasks into queue. Will create a bug for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308070</commentid>
    <comment_count>53</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-11-11 12:43:00 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; (In reply to comment #50)
&gt; &gt; &gt; (In reply to comment #49)
&gt; &gt; &gt; &gt; 95 bool canInvokeCallback()
&gt; &gt; &gt; &gt;  96 {
&gt; &gt; &gt; &gt;  97 MutexLocker locker(m_mutex);
&gt; &gt; &gt; &gt;  98 return (!m_suspended &amp;&amp; !m_stopped);
&gt; &gt; &gt; &gt;  99 } 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; So when the ActiveDOMObject is suspended, the callback is not allowed to run. How do we resume the callback when ActiveDOMObject is resumed?
&gt; &gt; &gt; 
&gt; &gt; &gt; We don&apos;t (at the moment). To preserve the order in which things should run, we need to add a special &quot;higher priority&quot; task queue to the main thread, and post tasks to re-invoke the callbacks there. I&apos;m looking into that now.
&gt; &gt; Dear god, no.  Priorities are almost never the right answer when there needs to be a strict ordering of things.
&gt; &gt; Just keep your own queue somewhere and have the task run through items in the queue.
&gt; I&apos;m working on a patch to use a task queue in Document class. When page loading is deferred, I push the tasks into queue. Will create a bug for it.

Bug 49401 fired for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516189</commentid>
    <comment_count>54</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2011-12-06 13:18:43 -0800</bug_when>
    <thetext>When a database transaction succeeds, JSCustomVoidCallback is called. Shouldn&apos;t we also make it ActiveDOMCallback?

Bug 73945 opened for this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58754</attachid>
            <date>2010-06-14 22:58:41 -0700</date>
            <delta_ts>2010-06-15 01:36:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32738</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDYtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSdW4gY2FsbGJhY2tzIGluIHRoZSBjb250ZXh0cyB0aGV5IGFyZSBjcmVhdGVkIGluLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2
ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0
YWJhc2VTeW5jQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0
YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxs
YmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suaDoKKwogMjAxMC0wNi0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDIyICs0MSwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLWJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IFNRTEVycm9yKiBlcnJvcikKK2Jvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5k
bGVFdmVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikKIHsK
ICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKICAgICBSZWZQdHI8SlNTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisKKyAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CiAgICAgaWYg
KCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBpZiB3ZSBjYW5ub3QgaW52
b2tlIHRoZSBjYWxsYmFjaywgcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9K
UyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCB0cmFuc2Fj
dGlvbikpOwotICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVj
dEZvclByb3RvdHlwZShleGVjKSwgZXJyb3IpKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMs
IHRyYW5zYWN0aW9uKSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBlcnJvcikpOwogCiAg
ICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBmYWxzZTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
ZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlvbik7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNhbGxiYWNrID0gSlNTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3Jl
YXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudENhbGxi
YWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCgpKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2s7CkBAIC0xMDYsNyArMTA2LDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5z
YWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gSlNTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpOworICAgICAgICBlcnJvckNhbGxiYWNrID0g
SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSk7CiAgICAgfQogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjEwMSwxMCArMjEwMSwxMyBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogICAgICAgICAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAiIC4gR2V0TmF0
aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCoiKTsKKyAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAiIC4gR2V0TmF0aXZlVHlwZSgkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZSAuICIoIik7CisKKyAgICAgICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3Jl
YWNoIG15ICRwYXJhbSAoQHBhcmFtcykgewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIsICIgLiBHZXROYXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0t
Pm5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGUoJHBhcmFt
LT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7CiAKICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAgIH0KQEAgLTIxNzUsMjEgKzIx
NzgsMjIgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVU
eXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlw
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKIAorICAgICAgICAgICAgbXkgQGFyZ3MgPSAo
KTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAg
ICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRwYXJhbS0+dHlwZSwgMSk7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIsICIgLiBHZXROYXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkg
LiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5h
dGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwogCiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUKG1fZGF0YSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEFTU0VSVChjb250ZXh0KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTtcblxuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJvdGVj
dCh0aGlzKTtcblxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
bV9pc29sYXRlZFdvcmxkLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCFnbG9iYWxPYmplY3QpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTtcbiIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxNzEsMTQgKzIxNzEsMTYgQEAgc3Vi
IEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+XG4iKTsKICAgICAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0O1xuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsKIAog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpKSk7CisgICAgICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFtZX0odmFsdWUt
PlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH4ke2NsYXNzTmFt
ZX0oKTsKQEAgLTIxOTYsMTEgKzIxOTgsMTMgQEAgRU5ECiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAi
IC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkg
LiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCoiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAi
IC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkg
LiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CisKKyAgICAgICAgICAg
IG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykg
ewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIgLiBHZXROYXRpdmVU
eXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAg
ICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJHBhcmFt
LT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjA4
LDkgKzIyMTIsMTAgQEAgRU5ECiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwogCiBw
cml2YXRlOgotICAgICR7Y2xhc3NOYW1lfSh2ODo6TG9jYWw8djg6Ok9iamVjdD4pOworICAgICR7
Y2xhc3NOYW1lfSh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIFdvcmxk
Q29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKIH07CiAKQEAgLTIyNDAsOCArMjI0NSw5IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPlxuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKLSR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBjYWxsYmFjaykKKyR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6IG1f
Y2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCisgICAg
LCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fd29ybGRDb250ZXh0
KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KQEAgLTIyNjUsMjIgKzIyNzEsMjQgQEAgRU5ECiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdl
dE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAk
e2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50
eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAi
KCIpOwogCisgICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBt
eSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUo
JHBhcmFtLT50eXBlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAu
IEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+
bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxi
YWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7CiAKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlO1xuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhD
b250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9W
OENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX3dvcmxkQ29udGV4dCk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh2OENvbnRleHQuSXNFbXB0
eSgpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7XG5cbiIpOwogCi0gICAgICAgICAgICBteSBA
YXJndnMgPSAoKTsKKyAgICAgICAgICAgIEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAk
cGFyYW0tPm5hbWU7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+ICR7cGFyYW1OYW1lfUhhbmRsZSA9IHRvVjgoJHtwYXJhbU5hbWV9
KTtcbiIpOwpAQCAtMjI4OCwxNCArMjI5NiwxNCBAQCBFTkQKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgQ1JBU0goKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGFyZ3ZzLCAiICAgICAgICAke3BhcmFtTmFtZX1IYW5kbGUiKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBhcmdzLCAiICAgICAgICAke3BhcmFtTmFtZX1IYW5kbGUiKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gYXJndltdID0ge1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9p
bigiLFxuIiwgQGFyZ3ZzKSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigi
LFxuIiwgQGFyZ3MpKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgfTtc
blxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBib29sIGNhbGxiYWNr
UmV0dXJuVmFsdWUgPSBmYWxzZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJh
bXMpIC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9j
YWxsYmFjaywgIiAuIHNjYWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFs
dWUsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuIik7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lv
biA2MTE3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTYgKzUxLDE2IEBAIEpTVGVzdENhbGxiYWNr
Ojp+SlNUZXN0Q2FsbGJhY2soKQogCiAvLyBGdW5jdGlvbnMKIAotYm9vbCBKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgQ2xhc3MxKiBjbGFzczFQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFyYW0pCiB7CiAgICAgQVNTRVJUKG1fZGF0YSk7
Ci0gICAgQVNTRVJUKGNvbnRleHQpOworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0
ZWRXb3JsZC5nZXQoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRv
SlNET01HbG9iYWxPYmplY3QobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX2lzb2xhdGVkV29y
bGQuZ2V0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtNzMsMTYgKzczLDE2IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMVAKICAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCitib29sIEpT
VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFt
LCBjb25zdCBTdHJpbmcmIHN0ckFyZykKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKICAg
ICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdl
dCgpKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgJ
KHJldmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5KU1Rlc3RDYWxsYmFjaygpOwogCiAgICAgLy8gRnVuY3Rpb25zCi0gICAg
dmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBDbGFzczEqIGNsYXNzMVBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRo
Q2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMiogY2xhc3MyUGFyYW0s
IGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKLSAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmly
dHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIENsYXNzMyogY2xhc3MzUGFyYW0pOwotICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxi
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYq
IGNsYXNzNlBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0o
Q2xhc3MxKiBjbGFzczFQYXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNz
MlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICBD
T01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmlydHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJl
dHVyblR5cGUoQ2xhc3MzKiBjbGFzczNQYXJhbSk7CisgICAgdmlydHVhbCBpbnQgY3VzdG9tQ2Fs
bGJhY2soQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7CiAKIHByaXZh
dGU6CiAgICAgSlNUZXN0Q2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOCArMzQsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4VGVzdENhbGxiYWNr
OjpWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2spCitWOFRlc3RD
YWxsYmFjazo6VjhUZXN0Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogbV9jYWxsYmFjayh2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKKyAgICAsIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxk
KQogewogfQpAQCAtNDcsMTEgKzQ4LDExIEBAIFY4VGVzdENhbGxiYWNrOjp+VjhUZXN0Q2FsbGJh
Y2soKQogCiAvLyBGdW5jdGlvbnMKIAotYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRo
Q2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MxKiBjbGFz
czFQYXJhbSkKK2Jvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENs
YXNzMSogY2xhc3MxUGFyYW0pCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29u
dGV4dCwgbV93b3JsZENvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHRvVjhDb250ZXh0KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV93b3JsZENvbnRl
eHQpOwogICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtNjgsMTQgKzY5LDE0IEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMVAKICAgICB9OwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1Jl
dHVyblZhbHVlLCBjb250ZXh0KTsKKyAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CiB9CiAKLWJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0
IFN0cmluZyYgc3RyQXJnKQorYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCiB7CiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOworICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgbV93b3JsZENvbnRleHQpOwogICAgIGlmICh2OENvbnRleHQuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtOTgsNyArOTksNyBAQCBib29sIFY4
VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQCiAgICAgfTsKIAogICAgIGJvb2wgY2Fs
bGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9j
YWxsYmFjaywgMiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7CisgICAgcmV0
dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBjYWxsYmFja1JldHVyblZh
bHVlLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dENhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjYgKzMwLDMw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKKwogY2xhc3MgVjhUZXN0Q2FsbGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFRlc3RDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNr
PiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOwot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVj
dCgpKSk7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBWOFRlc3RDYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgY29udGV4dCkpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgflY4VGVzdENhbGxiYWNrKCk7CiAKICAgICAvLyBGdW5jdGlvbnMKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIENsYXNzMSogY2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dp
dGhDbGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJh
bSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2
aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQ2xhc3MzKiBjbGFzczNQYXJhbSk7Ci0gICAgdmlydHVhbCBpbnQgY3VzdG9tQ2Fs
bGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNz
NiogY2xhc3M2UGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJh
bShDbGFzczEqIGNsYXNzMVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xh
c3MyUGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAg
IENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29s
UmV0dXJuVHlwZShDbGFzczMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21D
YWxsYmFjayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJp
dmF0ZToKLSAgICBWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4pOworICAgIFY4
VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgV29y
bGRDb250ZXh0SGFuZGxlIG1fd29ybGRDb250ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDExICs0MywxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
VjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBl
cnJvcikKK2Jvb2wgVjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikKIHsKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENv
bnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODA0LDEyICs4MDQsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93
OjpvcGVuRAogICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4Qmlu
ZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID49IDUpIHsKICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9u
Q2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAg
Y3JlYXRpb25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
YXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxNCArMTAxLDE0IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVHJhbnMKICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLSAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBj
YWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAg
IFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAK
ICAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAxICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzFd
KSkgewogICAgICAgICBpZiAoIWFyZ3NbMV0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgZXJyb3JDYWxsYmFj
ayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSk7CisgICAg
ICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbMV0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxW
OEN1c3RvbVZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDIyICs4OSwyMiBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAKICAgICBTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24gPSBWOFNRTFRyYW5zYWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQorICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENh
bGxiYWNrPiBjYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZp
bmVkT3JOdWxsKGFyZ3NbMl0pKSB7CiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAg
ICAgY2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7Cisg
ICAgICAgIGNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0s
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MyAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1szXSkpIHsKICAgICAgICAgaWYgKCFhcmdzWzNd
LT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRD
SF9FUlIpOwotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrOjpjcmVhdGUoYXJnc1szXSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2
aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTIgKzE1NywxMyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvCiAKICAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
IGNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gNSkgewogICAgICAg
ICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0
YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNr
ID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xODUsMTIgKzE4
NiwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvCiAKICAgICBX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
Pj0gNSkgewogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRpb25D
YWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgICAgICBj
cmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYxMTczKQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcxLDcgKzc3MSw3IEBAIFZlY3Rv
cjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGUKIAogdm9pZCBEYXRhYmFzZTo6cGVy
Zm9ybUNyZWF0aW9uQ2FsbGJhY2soKQogewotICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxl
RXZlbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsKKyAgICBtX2NyZWF0
aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOwogfQogCiBTUUxUcmFuc2FjdGlvbkNsaWVu
dCogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlU3luYzsKLWNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZUNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+RGF0YWJhc2VDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2UqKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVN5bmMq
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KERhdGFiYXNlKikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChEYXRhYmFzZVN5bmMqKSA9IDA7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDkgKzE3MCw5
IEBAIGJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHIKICAgICAvLyBiZWNh
dXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFj
ay4KICAgICBpZiAobV9lcnJvcikgewogICAgICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNh
bGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFj
ay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAgICAgICBjYWxsYmFja0Vy
cm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
bV9lcnJvci5nZXQoKSk7CiAgICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENhbGxiYWNrKQotICAg
ICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRy
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0
aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0
ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgp
KTsKIAogICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5j
ZSBjeWNsZXMuCiAgICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0
LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMUmVzdWx0U2V0OwogCiBjbGFz
cyBTUUxTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRl
bWVudENhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FMU3RhdGVtZW50Q2FsbGJh
Y2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCopID0gMDsKIH07
CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
aAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJh
bnNhY3Rpb247CiBjbGFzcyBTUUxFcnJvcjsKIAogY2xhc3MgU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBT
UUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVF
dmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA2MTE3MykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBA
QCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiAKICAgICBpZiAobV9j
YWxsYmFjaykgewogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAg
c2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQobV9k
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsKKyAgICAgICAgc2hvdWxk
RGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CiAg
ICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAg
c2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSB0cnVlOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFz
dAogICAgIC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAg
ICBpZiAobV9lcnJvckNhbGxiYWNrKQotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbkVy
cm9yLmdldCgpKTsKKyAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5z
YWN0aW9uRXJyb3IuZ2V0KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRy
YW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xh
c3MgU1FMVHJhbnNhY3Rpb247CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25DYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKikgPSAwOwog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFz
cyBTUUxFcnJvcjsKIAogY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGlj
IFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7CiB9Owog
CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aAkocmV2aXNpb24gNjExNzMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE2IEBACiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKIAogLy8gSW5zdGFuY2VzIG9m
IHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2Vy
J3MgY29udGV4dCB0aHJlYWQuCiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayA6IHB1
YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9u
U3luYyopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb25T
eW5jKikgPSAwOwogfTsKIAogfQo=
</data>
<flag name="commit-queue"
          id="45193"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58764</attachid>
            <date>2010-06-15 01:36:55 -0700</date>
            <delta_ts>2010-06-15 03:49:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33513</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDYtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSdW4gY2FsbGJhY2tzIGluIHRoZSBjb250ZXh0cyB0aGV5IGFyZSBjcmVhdGVkIGluLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2
ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0
YWJhc2VTeW5jQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0
YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxs
YmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suaDoKKwogMjAxMC0wNi0xNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjIgKzQx
LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9v
bCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3Iq
IGVycm9yKQorYm9vbCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIEFTU0VS
VChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKIAogICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBpZiAoIWdsb2JhbE9i
amVjdCkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIHdlIGNhbm5vdCBpbnZva2UgdGhlIGNh
bGxiYWNrLCByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRl
cHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIHRyYW5zYWN0aW9uKSk7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGV4ZWMpLCBlcnJvcikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgdHJhbnNhY3Rp
b24pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGVycm9yKSk7CiAKICAgICBib29sIHJh
aXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0
ZVNxbChFeGUKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUob2JqZWN0
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICBjYWxsYmFjayA9IEpTU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0
ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkp
KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjazsKQEAgLTEwNiw3ICsxMDYsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4
ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAxLDEwICsyMTAxLDEzIEBAIHN1YiBHZW5l
cmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOworICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsK
KworICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiwg
IiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7Cisg
ICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQpAQCAtMjE3NSwyMSArMjE3OCwyMiBAQCBz
dWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUgLiAiKCIpOwogCisgICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAg
ICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJ
bmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRw
YXJhbS0+bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgk
cGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiKVxuIik7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlQobV9kYXRhKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNT
RVJUKGNvbnRleHQpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpO1xuXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkY2xhc3NOYW1lPiBwcm90ZWN0KHRoaXMpO1xu
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxP
YmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHRvSlNET01HbG9iYWxPYmplY3QobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX2lzb2xhdGVk
V29ybGQuZ2V0KCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIWdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpO1xuIik7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJl
dmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjE3MSwxNCArMjE3MSwxNiBAQCBzdWIgR2VuZXJhdGVD
YWxsYmFja0hlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD5cbiIpOwogICAgIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFj
ZSBXZWJDb3JlIHtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFz
cyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOwogCiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgPDxFTkQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7
Y2xhc3NOYW1lfT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPCR7Y2xhc3NOYW1lfT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgQVNT
RVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2Ns
YXNzTmFtZX0odmFsdWUtPlRvT2JqZWN0KCkpKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NOYW1lfSh2YWx1ZS0+VG9PYmplY3Qo
KSwgY29udGV4dCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfiR7Y2xhc3NOYW1lfSgpOwpAQCAt
MjE5NiwxMSArMjE5OCwxMyBAQCBFTkQKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKKworICAgICAgICAgICAgbXkgQGFyZ3Mg
PSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxs
YmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAg
ICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgam9pbigiLCAiLCBAYXJncykpOwogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMDgsOSArMjIxMiwx
MCBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKIHByaXZhdGU6Ci0g
ICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgJHtjbGFzc05hbWV9
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKKyAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgV29ybGRDb250ZXh0SGFu
ZGxlIG1fd29ybGRDb250ZXh0OwogfTsKIApAQCAtMjI0MCw4ICsyMjQ1LDkgQEAgc3ViIEdlbmVy
YXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwot
JHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNr
KQorJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxi
YWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogbV9jYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKKyAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVu
dFdvcmxkKQogewogfQpAQCAtMjI2NSwyMiArMjI3MSwyNCBAQCBFTkQKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50
eXBlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlw
ZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1l
fTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdl
dE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAk
e2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CiAKKyAg
ICAgICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAo
QHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5
cGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAiIC4gR2V0TmF0aXZl
VHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJh
bS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29u
dGV4dCwgbV93b3JsZENvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fd29ybGRDb250ZXh0KTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpXG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUodjhDb250ZXh0KTtcblxuIik7CiAKLSAgICAgICAgICAgIG15IEBhcmd2cyA9ICgp
OworICAgICAgICAgICAgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFt
ZTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gJHtwYXJhbU5hbWV9SGFuZGxlID0gdG9WOCgke3BhcmFtTmFtZX0pO1xuIik7CkBA
IC0yMjg4LDE0ICsyMjk2LDE0IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBDUkFTSCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJndnMsICIg
ICAgICAgICR7cGFyYW1OYW1lfUhhbmRsZSIpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Ms
ICIgICAgICAgICR7cGFyYW1OYW1lfUhhbmRsZSIpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2
W10gPSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBA
YXJndnMpKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBAYXJn
cykpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICB9O1xuXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1
ZSA9IGZhbHNlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBh
cmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAi
IC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG4iKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RD
YWxsYmFjaygpCiAKIC8vIEZ1bmN0aW9ucwogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFj
a1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEq
IGNsYXNzMVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFy
YW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKICAg
ICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdl
dCgpKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC03Mywx
NiArNzMsMTYgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAg
IHJldHVybiAhcmFpc2VkRXhjZXB0aW9uOwogfQogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhDbGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFz
czIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKK2Jvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0
cmluZyYgc3RyQXJnKQogewogICAgIEFTU0VSVChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgIFJlZlB0cjxK
U1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpOworICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24g
NjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkpTVGVzdENhbGxiYWNrKCk7CiAKICAgICAvLyBGdW5jdGlvbnMKLSAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNz
MSogY2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3Ry
aW5nJiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBj
YWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xh
c3MzKiBjbGFzczNQYXJhbSk7Ci0gICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFy
YW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNs
YXNzMVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xh
c3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAgIENPTVBJTEVfQVNT
RVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShD
bGFzczMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFz
czUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJpdmF0ZToKICAgICBK
U1Rlc3RDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3Qq
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaykKK1Y4VGVzdENhbGxiYWNrOjpW
OFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CkBA
IC00NywxMSArNDgsMTEgQEAgVjhUZXN0Q2FsbGJhY2s6On5WOFRlc3RDYWxsYmFjaygpCiAKIC8v
IEZ1bmN0aW9ucwogCi1ib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQor
Ym9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFz
czFQYXJhbSkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dv
cmxkQ29udGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9W
OENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CiAgICAg
aWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02OCwx
NCArNjksMTQgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAg
IH07CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4g
IWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUs
IGNvbnRleHQpOworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJn
diwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAot
Ym9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBz
dHJBcmcpCitib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFz
czIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKIHsKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC05OCw3ICs5OSw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKICAgICB9OwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVy
blZhbHVlID0gZmFsc2U7Ci0gICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAy
LCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTsKKyAgICByZXR1cm4gIWludm9r
ZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2su
aAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNiArMzAsMzAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCiBjbGFz
cyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCkpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVz
dENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+VjhUZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xh
c3MxKiBjbGFzczFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBT
dHJpbmcmIHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50
IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBD
bGFzczMqIGNsYXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQ
YXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSog
Y2xhc3MxUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShD
bGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09NUElMRV9B
U1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KENsYXNzMyogY2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKENs
YXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRlOgotICAg
IFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgVjhUZXN0Q2FsbGJh
Y2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBXb3JsZENvbnRleHRI
YW5kbGUgbV93b3JsZENvbnRleHQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTEgKzQzLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBWOFNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQorYm9v
bCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRv
VjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IG1fd29ybGRDb250ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY1LDE1ICs2NSwxMiBAQCBib29sIFY4U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjazo6aGFuZGxlCiAgICAgICAgIGVycm9ySGFuZGxlCiAgICAgfTsKIAotICAgIC8v
IFByb3RlY3QgdGhlIGNvbnRleHQgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3Rvcihjb250ZXh0KTsKLQogICAgIGJv
b2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIC8vIFN0ZXAgNjogSWYgdGhlIGVy
cm9yIGNhbGxiYWNrIHJldHVybnMgZmFsc2UsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dAogICAg
IC8vIHN0YXRlbWVudCwgaWYgYW55LCBvciBvbnRvIHRoZSBuZXh0IG92ZXJhbGwgc3RlcCBvdGhl
cndpc2UuIE90aGVyd2lzZSwKICAgICAvLyB0aGUgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1
cm4gZmFsc2UsIG9yIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjay4KICAgICAvLyBKdW1wIHRv
IHRoZSBsYXN0IHN0ZXAgaW4gdGhlIG92ZXJhbGwgc3RlcHMuCi0gICAgcmV0dXJuIGludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQp
IHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7CisgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNCwxMiArODA0LDEzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkQKICAgICBpZiAoIVY4Qmlu
ZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRp
b25DYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CiAgICAgICAgIGlmICgh
YXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNh
bGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERh
dGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVRyYW5zCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
UmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMSAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkpIHsKICAgICAgICAgaWYgKCFhcmdz
WzFdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIpOwogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJh
bnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSwyMiArODksMjIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1FMVHJh
bnNhY3Rpb246OgogCiAgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gVjhTUUxUcmFu
c2FjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwot
ICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2s7CiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzJdKSkgewog
ICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIGNhbGxiYWNrID0gVjhTUUxTdGF0
ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAgICBjYWxsYmFjayA9IFY4U1FM
U3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMgJiYgIWlzVW5kZWZpbmVkT3JOdWxs
KGFyZ3NbM10pKSB7CiAgICAgICAgIGlmICghYXJnc1szXS0+SXNPYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgZXJyb3JD
YWxsYmFjayA9IFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbM10pOwor
ICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVh
dGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtl
ckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDEyICsxNTcsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2Vy
Q29udGV4dDo6bwogCiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2Vy
Q29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwogICAg
IGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsKICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVj
dCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwog
Ci0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShh
cmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6
Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTg1LDEyICsxODYsMTMgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsKICAgICAgICAgaWYgKCFh
cmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9N
SVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2Fs
bGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0
YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3MSw3ICs3NzEsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVy
Zm9ybUdldFRhYmxlCiAKIHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkK
IHsKLSAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5nZXQoKSwgdGhpcyk7CisgICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVu
dCh0aGlzKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25DbGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlv
bkNsaWVudCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlz
aW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTMgKzM5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVN5bmM7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
RGF0YWJhc2VDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQ2FsbGJh
Y2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIERhdGFiYXNlKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VTeW5jKikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChEYXRhYmFzZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZl
bnQoRGF0YWJhc2VTeW5jKikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw5ICsxNzAsOSBAQCBib29sIFNRTFN0YXRlbWVudDo6
cGVyZm9ybUNhbGxiYWNrKFNRTFRyCiAgICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVt
cCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCiAgICAgaWYgKG1fZXJyb3IpIHsK
ICAgICAgICAgQVNTRVJUKG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxi
YWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBt
X2Vycm9yLmdldCgpKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwogICAgIH0g
ZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9ICFt
X3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkp
OworICAgICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2
ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFz
ZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fc3RhdGVt
ZW50Q2FsbGJhY2sgPSAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNr
LmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxUcmFuc2Fj
dGlvbjsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIAogY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gewogcHVibGlj
OgogICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudENhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbios
IFNRTFJlc3VsdFNldCopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJh
bnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTQgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMRXJy
b3I7CiAKIGNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJv
ciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBT
UUxFcnJvciopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNw
cAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclRyYW5zYWN0aW9uQwogCiAgICAgaWYgKG1fY2FsbGJhY2spIHsKICAgICAgICAgbV9l
eGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxi
YWNrID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgdGhpcyk7CisgICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0g
IW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOwogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxv
d2VkID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxi
YWNrID0gdHJ1ZTsKQEAgLTU0OSw3ICs1NDksNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxp
dmVyVHJhbnNhY3Rpb25FCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIElmIGV4aXN0cywg
aW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKICAgICAvLyBlcnJvciB0byBoYXZl
IG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykK
LSAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CisgICAgICAgIG1f
ZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKIAog
ICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9u
IDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogCiBj
bGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMRXJyb3I7CiAKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGhhbmRsZUV2ZW50KFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDE4ICszMiwxNiBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxU
cmFuc2FjdGlvblN5bmM7CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBj
cmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgogY2xh
c3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvblN5bmMqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uU3luYyopID0gMDsKIH07CiAKIH0K
</data>
<flag name="commit-queue"
          id="45208"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58766</attachid>
            <date>2010-06-15 03:49:14 -0700</date>
            <delta_ts>2010-06-22 13:24:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35640</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDYtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSdW4gY2FsbGJhY2tzIGluIHRoZSBjb250ZXh0cyB0aGV5IGFyZSBjcmVhdGVkIGluLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2
ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0
YWJhc2VTeW5jQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0
YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxs
YmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suaDoKKwogMjAxMC0wNi0xNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjIgKzQx
LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9v
bCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3Iq
IGVycm9yKQorYm9vbCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIEFTU0VS
VChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKIAogICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKKworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBpZiAoIWdsb2JhbE9i
amVjdCkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIHdlIGNhbm5vdCBpbnZva2UgdGhlIGNh
bGxiYWNrLCByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRl
cHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIHRyYW5zYWN0aW9uKSk7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGV4ZWMpLCBlcnJvcikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgdHJhbnNhY3Rp
b24pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGVycm9yKSk7CiAKICAgICBib29sIHJh
aXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0
ZVNxbChFeGUKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUob2JqZWN0
LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICBjYWxsYmFjayA9IEpTU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0
ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkp
KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjazsKQEAgLTEwNiw3ICsxMDYsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4
ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAxLDEwICsyMTAxLDEzIEBAIHN1YiBHZW5l
cmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOworICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsK
KworICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiwg
IiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7Cisg
ICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQpAQCAtMjE3NSwyMSArMjE3OCwyMiBAQCBz
dWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUgLiAiKCIpOwogCisgICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAg
ICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJ
bmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRw
YXJhbS0+bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgk
cGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiKVxuIik7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlQobV9kYXRhKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNT
RVJUKGNvbnRleHQpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpO1xuXG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkY2xhc3NOYW1lPiBwcm90ZWN0KHRoaXMpO1xu
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxP
YmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHRvSlNET01HbG9iYWxPYmplY3QobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX2lzb2xhdGVk
V29ybGQuZ2V0KCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIWdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpO1xuIik7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJl
dmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjE3MSwxNCArMjE3MSwxNiBAQCBzdWIgR2VuZXJhdGVD
YWxsYmFja0hlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD5cbiIpOwogICAgIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFj
ZSBXZWJDb3JlIHtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFz
cyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOwogCiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgPDxFTkQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPCR7
Y2xhc3NOYW1lfT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPCR7Y2xhc3NOYW1lfT4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgQVNT
RVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2Ns
YXNzTmFtZX0odmFsdWUtPlRvT2JqZWN0KCkpKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NOYW1lfSh2YWx1ZS0+VG9PYmplY3Qo
KSwgY29udGV4dCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfiR7Y2xhc3NOYW1lfSgpOwpAQCAt
MjE5NiwxMSArMjE5OCwxMyBAQCBFTkQKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKKworICAgICAgICAgICAgbXkgQGFyZ3Mg
PSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxs
YmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAg
ICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgam9pbigiLCAiLCBAYXJncykpOwogICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMDgsOSArMjIxMiwx
MCBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKIHByaXZhdGU6Ci0g
ICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgJHtjbGFzc05hbWV9
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKKyAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgV29ybGRDb250ZXh0SGFu
ZGxlIG1fd29ybGRDb250ZXh0OwogfTsKIApAQCAtMjI0MCw4ICsyMjQ1LDkgQEAgc3ViIEdlbmVy
YXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwot
JHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNr
KQorJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxi
YWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogbV9jYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKKyAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV93b3JsZENvbnRleHQoVXNlQ3VycmVu
dFdvcmxkKQogewogfQpAQCAtMjI2NSwyMiArMjI3MSwyNCBAQCBFTkQKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50
eXBlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlw
ZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1l
fTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdl
dE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAk
e2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CiAKKyAg
ICAgICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAo
QHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5
cGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAiIC4gR2V0TmF0aXZl
VHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJh
bS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29u
dGV4dCwgbV93b3JsZENvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fd29ybGRDb250ZXh0KTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpXG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUodjhDb250ZXh0KTtcblxuIik7CiAKLSAgICAgICAgICAgIG15IEBhcmd2cyA9ICgp
OworICAgICAgICAgICAgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFt
ZTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gJHtwYXJhbU5hbWV9SGFuZGxlID0gdG9WOCgke3BhcmFtTmFtZX0pO1xuIik7CkBA
IC0yMjg4LDE0ICsyMjk2LDE0IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBDUkFTSCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJndnMsICIg
ICAgICAgICR7cGFyYW1OYW1lfUhhbmRsZSIpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Ms
ICIgICAgICAgICR7cGFyYW1OYW1lfUhhbmRsZSIpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2
W10gPSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBA
YXJndnMpKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBAYXJn
cykpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICB9O1xuXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1
ZSA9IGZhbHNlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBh
cmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAi
IC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG4iKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RD
YWxsYmFjaygpCiAKIC8vIEZ1bmN0aW9ucwogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFj
a1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEq
IGNsYXNzMVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFy
YW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKICAg
ICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdl
dCgpKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC03Mywx
NiArNzMsMTYgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAg
IHJldHVybiAhcmFpc2VkRXhjZXB0aW9uOwogfQogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhDbGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFz
czIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKK2Jvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0
cmluZyYgc3RyQXJnKQogewogICAgIEFTU0VSVChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgIFJlZlB0cjxK
U1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkpOworICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKICAgICBpZiAo
IWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24g
NjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfkpTVGVzdENhbGxiYWNrKCk7CiAKICAgICAvLyBGdW5jdGlvbnMKLSAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNz
MSogY2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3Ry
aW5nJiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBj
YWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xh
c3MzKiBjbGFzczNQYXJhbSk7Ci0gICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFy
YW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNs
YXNzMVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xh
c3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAgIENPTVBJTEVfQVNT
RVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShD
bGFzczMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFz
czUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJpdmF0ZToKICAgICBK
U1Rlc3RDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3Qq
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENh
bGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaykKK1Y4VGVzdENhbGxiYWNrOjpW
OFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CkBA
IC00NywxMSArNDgsMTEgQEAgVjhUZXN0Q2FsbGJhY2s6On5WOFRlc3RDYWxsYmFjaygpCiAKIC8v
IEZ1bmN0aW9ucwogCi1ib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJh
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQor
Ym9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFz
czFQYXJhbSkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dv
cmxkQ29udGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9W
OENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CiAgICAg
aWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02OCwx
NCArNjksMTQgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAg
IH07CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4g
IWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUs
IGNvbnRleHQpOworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJn
diwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAot
Ym9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBz
dHJBcmcpCitib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFz
czIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKIHsKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC05OCw3ICs5OSw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKICAgICB9OwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVy
blZhbHVlID0gZmFsc2U7Ci0gICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAy
LCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTsKKyAgICByZXR1cm4gIWludm9r
ZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2su
aAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNiArMzAsMzAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCiBjbGFz
cyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCkpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVz
dENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+VjhUZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xh
c3MxKiBjbGFzczFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBT
dHJpbmcmIHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50
IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBD
bGFzczMqIGNsYXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQ
YXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSog
Y2xhc3MxUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShD
bGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09NUElMRV9B
U1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KENsYXNzMyogY2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKENs
YXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRlOgotICAg
IFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgVjhUZXN0Q2FsbGJh
Y2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBXb3JsZENvbnRleHRI
YW5kbGUgbV93b3JsZENvbnRleHQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTEgKzQzLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBWOFNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQorYm9v
bCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRv
VjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IG1fd29ybGRDb250ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY1LDE1ICs2NSwxMiBAQCBib29sIFY4U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjazo6aGFuZGxlCiAgICAgICAgIGVycm9ySGFuZGxlCiAgICAgfTsKIAotICAgIC8v
IFByb3RlY3QgdGhlIGNvbnRleHQgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3Rvcihjb250ZXh0KTsKLQogICAgIGJv
b2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIC8vIFN0ZXAgNjogSWYgdGhlIGVy
cm9yIGNhbGxiYWNrIHJldHVybnMgZmFsc2UsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dAogICAg
IC8vIHN0YXRlbWVudCwgaWYgYW55LCBvciBvbnRvIHRoZSBuZXh0IG92ZXJhbGwgc3RlcCBvdGhl
cndpc2UuIE90aGVyd2lzZSwKICAgICAvLyB0aGUgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1
cm4gZmFsc2UsIG9yIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjay4KICAgICAvLyBKdW1wIHRv
IHRoZSBsYXN0IHN0ZXAgaW4gdGhlIG92ZXJhbGwgc3RlcHMuCi0gICAgcmV0dXJuIGludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQp
IHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7CisgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNCwxMiArODA0LDEzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkQKICAgICBpZiAoIVY4Qmlu
ZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRp
b25DYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CiAgICAgICAgIGlmICgh
YXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNh
bGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERh
dGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFi
YXNlOjpjaGFuZ2UKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNhbGxi
YWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7CisgICAgICAg
IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwpAQCAtNzIsNyArNzIsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJnc1szXS0+
SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hf
RVJSKTsKIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s6OmNyZWF0ZShhcmdzWzNdKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2s7CkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVRyYW5zCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
UmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMSAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkpIHsKICAgICAgICAgaWYgKCFhcmdz
WzFdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIpOwogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VTeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MywxMiArNTMsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2VTeW5j
OjpjaAogCiAgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSA9IFY4RGF0YWJhc2VTeW5jOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVm
UHRyPFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrOwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMikgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAg
Y2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7
CisgICAgICAgIGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNzgsNyArNzksOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVRyYW5zCiAKICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlID0gVjhEYXRhYmFz
ZVN5bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
azo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgUmVmUHRy
PFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNh
bGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHksIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biA2MTE3OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyMiArODksMjIgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4U1FMVHJhbnNhY3Rpb246OgogCiAgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uID0gVjhTUUxUcmFuc2FjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5lZE9y
TnVsbChhcmdzWzJdKSkgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIGNh
bGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAg
ICBjYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMgJiYg
IWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbM10pKSB7CiAgICAgICAgIGlmICghYXJnc1szXS0+SXNP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJS
KTsKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6
Y3JlYXRlKGFyZ3NbM10pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAg
ICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9u
IDYxMTc4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDEyICsxNTcsMTMgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsKICAgICAgICAgaWYg
KCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQ
RV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNl
Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4
RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTg1LDEyICsxODYsMTMg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUp
IHsKICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJh
Y2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTE3OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MSw3ICs3NzEsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiAKIHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGlvbkNhbGxiYWNrKCkKIHsKLSAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7CisgICAgbV9jcmVhdGlvbkNh
bGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25DbGllbnQqIERh
dGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZUNhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVN5bmM7Ci1jbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrIDogcHVibGlj
IFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1
YWwgfkRhdGFiYXNlQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNlKikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2VTeW5jKikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChEYXRhYmFzZSopID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRXZlbnQoRGF0YWJhc2VTeW5jKikgPSAwOwogfTsKIAogfQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw5ICsxNzAsOSBAQCBi
b29sIFNRTFN0YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyCiAgICAgLy8gYmVjYXVzZSB0
aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCiAg
ICAgaWYgKG1fZXJyb3IpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGVtZW50RXJyb3JDYWxsYmFj
ayk7Ci0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJy
b3IuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAg
Y2FsbGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwg
bV9yZXN1bHRTZXQuZ2V0KCkpOworICAgICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CiAK
ICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3lj
bGVzLgogICAgIG1fc3RhdGVtZW50Q2FsbGJhY2sgPSAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIAogY2xhc3MgU1FM
U3RhdGVtZW50Q2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0ZW1lbnRD
YWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudENhbGxiYWNrKCkg
eyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqKSA9IDA7CiB9OwogCiB9
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJl
dmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0
aW9uOwogY2xhc3MgU1FMRXJyb3I7CiAKIGNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIHsgfQotICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJh
bnNhY3Rpb24qLCBTUUxFcnJvciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQo
U1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNjExNzgpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQwogCiAgICAgaWYgKG1fY2FsbGJh
Y2spIHsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3Vs
ZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJh
c2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcyk7CisgICAgICAgIHNob3VsZERlbGl2
ZXJFcnJvckNhbGxiYWNrID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOwogICAgICAg
ICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHNob3Vs
ZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gdHJ1ZTsKQEAgLTU0OSw3ICs1NDksNyBAQCB2b2lkIFNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FCiAgICAgLy8gVHJhbnNhY3Rpb24gU3Rl
cCAxMiAtIElmIGV4aXN0cywgaW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKICAg
ICAvLyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgaWYg
KG1fZXJyb3JDYWxsYmFjaykKLSAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCht
X2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fdHJhbnNhY3Rpb25FcnJvci5n
ZXQoKSk7CisgICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlv
bkVycm9yLmdldCgpKTsKIAogICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFu
dXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgdGhpcyk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uOwogCiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIDogcHVibGljIFRo
cmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNRTFRyYW5zYWN0aW9uQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiopID0gMDsKIH07CiAK
IH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
LmgJKHJldmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FM
RXJyb3I7CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJl
YWRTYWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAg
IHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgJKHJl
dmlzaW9uIDYxMTc4KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxNiBAQAogI2lmIEVOQUJMRShEQVRB
QkFTRSkKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlz
IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNv
bnRleHQgdGhyZWFkLgogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZp
cnR1YWwgflNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29s
IGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvblN5bmMq
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uU3luYyop
ID0gMDsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59238</attachid>
            <date>2010-06-21 03:18:49 -0700</date>
            <delta_ts>2010-06-22 02:00:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>75327</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMTAtMDYtMjEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIGFsbCBjYWxsYmFja3MgaW50byBBY3RpdmVET01PYmplY3RzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICBUZXN0
OiBzdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5odG1sCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHM6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJp
bmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVzdHJveU9uQ29udGV4dFRocmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpEZXN0cm95T25Db250ZXh0VGhy
ZWFkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6
OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3RDYWxsYmFja0ltcGw6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6c3VzcGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnJlc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpjYW5JbnZva2VDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpkZXN0cm95T25Db250ZXh0VGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjdGl2ZURPTUNhbGxiYWNrOjpBY3RpdmVET01DYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBY3RpdmVET01DYWxsYmFjazo6fkFjdGl2ZURPTUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjpjYW5JbnZva2VDYWxsYmFjayk6CisgICAgICAgICog
YmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6
OkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsYmFjay5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxsYmFjazo6
VjhUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNhbGxi
YWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpj
YWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdENhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxsYmFjazo6
Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6b3Bl
bkRhdGFiYXNlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFi
YXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RGF0YWJhc2U6OmNoYW5nZVZlcnNp
b25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luY0NhbGxiYWNrKToKKyAgICAgICAgKiBk
b20vQWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVj
dDo6QWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdDo6
fkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3Rh
dGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6cGVyZm9ybUNhbGxi
YWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmg6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oOgorCiAyMDEwLTA2LTIxICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4u
cG91bGFpbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4uCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYxNTM1KQorKysgV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIFNFVChXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0iCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L2FjY2Vzc2liaWxpdHkiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dlbmVyaWMi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2pzIgogICAgICIke1dFQkNPUkVfRElSfS9i
cmlkZ2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9jIgpAQCAtNjgsNiArNjksNyBAQCBT
RVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiApCiAKIFNFVChXZWJDb3JlX0lETF9JTkNM
VURFUworICAgIGJpbmRpbmdzL2dlbmVyaWMKICAgICBiaW5kaW5ncy9qcwogICAgIGNzcwogICAg
IGRvbQpAQCAtNTQ2LDYgKzU0OCw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGJpbmRp
bmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAogCisgICAgYmluZGluZ3MvZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5jcHAKKwogICAgIGJpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1h
cC5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCiAgICAgYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcApJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNjE1MzUp
CisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKSBcCisgICAgJChXZWJDb3JlKS9i
aW5kaW5ncy9nZW5lcmljIFwKICAgICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwKICAgICAkKFdl
YkNvcmUpL2JpbmRpbmdzL29iamMgXAogICAgICQoV2ViQ29yZSkvY3NzIFwKSW5kZXg6IFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNCw2ICsxNCw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYyBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9iaW5kaW5ncy9qcyBcCiAJLUkkKHNyY2Rpcikv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2JyaWRnZSBc
CkBAIC0zODMsNiArMzg0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmggXAogCVdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIFwKIAlXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmggXAorCVdlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9B
Y3RpdmVET01DYWxsYmFjay5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNv
dXJjZVByb3ZpZGVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxl
TWFwLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtNDgzLDYgKzQ4Myw4IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS93
aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdpbi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmgnLAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvd3gvQWNjZXNzaWJpbGl0eU9iamVjdFd4LmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dl
bmVyaWMvQmluZGluZ0VsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9C
aW5kaW5nU2VjdXJpdHkuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYxNTM1KQorKysgV2ViQ29yZS9XZWJD
b3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw3IEBAIGluY2x1ZGUoV2ViQ29y
ZS5wcmkpCiBJTkNMVURFUEFUSCA9IFwKICAgICAkJFBXRCBcCiAgICAgJCRQV0QvYWNjZXNzaWJp
bGl0eSBcCisgICAgJCRQV0QvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJCRQV0QvYmluZGluZ3Mv
anMgXAogICAgICQkUFdEL2JyaWRnZSBcCiAgICAgJCRQV0QvYnJpZGdlL2MgXApAQCAtMjY2LDYg
KzI2Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlSGVhZGVyQ29udGFpbmVyLmNwcCBcICAgIAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlUm93LmNwcCBcICAgIAogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAgXAorICAgIGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ET01PYmplY3RI
YXNoVGFibGVNYXAuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIFwK
QEAgLTEwNDMsNiArMTA0NSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmggXAogICAgIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmggXAogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
IFwKKyAgICBiaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmggXAogICAgIGJpbmRp
bmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggXAogICAgIGJpbmRpbmdzL2pzL0dD
Q29udHJvbGxlci5oIFwKICAgICBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYxNTM1
KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzc3MzIsNiArMzc3MzIsMTggQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdz
XFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCisgCQkJPEZp
bHRlcg0KKwkJCQlOYW1lPSJnZW5lcmljIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGdlbmVyaWNcQWN0aXZlRE9NQ2FsbGJhY2suaCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xnZW5lcmljXEFjdGl2ZURPTUNhbGxiYWNrLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCTwvRmlsdGVyPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0ianMiDQogCQkJCT4NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwkocmV2
aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNw
cm9wcwkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7
JChQcm9qZWN0RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3NpYmlsaXR5
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3NpYmlsaXR5XHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYnJpZGdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlk
Z2VcYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGpzYyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cY3NzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxlZGl0aW5nJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHJlbmRlcmluZ1xzdHlsZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGlu
Z3NcanMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbSZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cZG9tXGRlZmF1bHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGhpc3Rvcnkm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGh0bWxcY2FudmFzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cbG9hZGVyXGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJj
aGl2ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxpY29uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxub3RpZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxhbmltYXRpb24mcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG1vY2smcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XHBsYXRmb3JtXHNxbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cd2luJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdy
YXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0
ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlw
ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcdHJhbnNmb3Jt
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cdGV4dCZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5ccGxhdGZvcm1cdGV4dFx0cmFuc2NvZGVyJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHhtbCZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcb2JqXFdlYkNvcmVcRGVyaXZl
ZFNvdXJjZXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsdWdpbnMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsdWdpbnNcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxz
dmdcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3MmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdtbCZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3RvcmFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cd2Vic29ja2V0cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd29ya2VycyZxdW90Ozsm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndh
cmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1
b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90Ozsm
cXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxzcWxpdGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDsiCisJCUFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikuLiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZSZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGNzcyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cmVuZGVyaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGdlbmVyaWMmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxkb20m
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5caW5zcGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXImcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cbG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRl
clxhcmNoaXZlXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcaWNvbiZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24m
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cYW5p
bWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxtb2NrJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxzcWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0
d29yayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0d29ya1x3aW4mcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVxncmFwaGljcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2Rl
ciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3Nc
ZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlx3bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN0b3JhZ2UmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHdvcmtlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJh
cmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVk
ZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZh
dGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1
ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcc3Fs
aXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRD
b3JlJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVf
M0RfUkVOREVSSU5HO1dFQkNPUkVfQ09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFk
ZXI9IjIiCiAJCVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYx
NTM1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQyNTMsNiArNDI1Myw4IEBACiAJCUI1QjVEQzZBMTE5QkIzRDUwMDJBODc5
MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI1
QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjM5MTAy
QjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKIAkJ
QjVDMTEyM0MxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjNBMTAy
QjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IH07CisJCUI1
RDMxREZBMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQzMURGODExQ0Y2MTBCMDA5
RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovOyB9OworCQlCNUQzMURGQjExQ0Y2MTBC
MDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVE
T01DYWxsYmFjay5oICovOyB9OwogCQlCNUQzNjAxQTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJh
c2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLzsgfTsK
IAkJQjYyN0ZCMkQxMUFENzQzNTAwRTk3QjcyIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBBRDJBOTExQUMxNjMx
MDA4Q0YyRkIgLyogSURCRGF0YWJhc2VJbXBsLmNwcCAqLzsgfTsKIAkJQjY2OTNFRUMxMUFENjNF
NjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNjY5M0VFODExQUQ2M0U2MDAzRjI3NzAgLyogSURCT2JqZWN0
U3RvcmUuaCAqLzsgfTsKQEAgLTk3NTMsNiArOTc1NSw4IEBACiAJCUI1QjVEQzY4MTE5QkIzRDUw
MDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFic3RyYWN0RGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjVDMTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QzExMjNBMTAyQjZD
NDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURP
TUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFjdGl2
ZURPTUNhbGxiYWNrLmNwcDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyog
QWN0aXZlRE9NQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWN0
aXZlRE9NQ2FsbGJhY2suaDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERh
dGFiYXNlQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJh
c2VDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjY5M0VFODExQUQ2
M0U2MDAzRjI3NzAgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjY2OTNFRTkxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZVJlcXVlc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzMjcsNiArMTUzMzEsMTUgQEAK
IAkJCW5hbWUgPSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUI1RDMx
REY3MTFDRjYwRTUwMDlGMjJCNCAvKiBnZW5lcmljICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZl
RE9NQ2FsbGJhY2suY3BwICovLAorCQkJCUI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3Rp
dmVET01DYWxsYmFjay5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBnZW5lcmljOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQjczNEIxN0YxMTlCOThEQjAwNjU4N0JEIC8qIHRy
YW5zY29kZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MTUzMzksNiArMTUzNTIsNyBAQAogCQlCQzFBMzc5MDA5N0M2Rjk3MDAxOUYzRDggLyogYmluZGlu
Z3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUI1RDMx
REY3MTFDRjYwRTUwMDlGMjJCNCAvKiBnZW5lcmljICovLAogCQkJCUJDMUEzNzkzMDk3QzZGQjEw
MDE5RjNEOCAvKiBqcyAqLywKIAkJCQlCQzFBMzc5NDA5N0M2RkM0MDAxOUYzRDggLyogb2JqYyAq
LywKIAkJCQk5M0Y4QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLywK
QEAgLTE5NDcwLDYgKzE5NDg0LDcgQEAKIAkJCQkxQUE4Nzk5MDExQ0JFODQ2MDAzQzY2NEYgLyog
UGx1Z2luU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1NkVCQTg1MTFDOUZGODEwMEIw
NDQ3NyAvKiBTUUxFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MjVBOTY1MTFDQTIz
NDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjVEMzFE
RkIxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTIxNzgyLDYgKzIxNzk3LDcgQEAKIAkJCQkyMDBCMTkwOTExQzI3N0Q5MDBEQ0NEM0EgLyog
U2NyaXB0QnJlYWtwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQ4RjgxQzExQ0FCOUU5
MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1
MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCNUQzMURGQTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9N
Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5oIgorCisjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZGVzdHJveU9uQ29udGV4dFRocmVhZChBY3RpdmVET01P
YmplY3RDYWxsYmFja0ltcGwqLCBNdXRleCosIGJvb2wpOworCitjbGFzcyBEZXN0cm95T25Db250
ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzaz4g
Y3JlYXRlKEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbCogaW1wbCwgTXV0ZXgqIGltcGxNdXRl
eCwgYm9vbCBkZWxldGVNdXRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRGVzdHJveU9u
Q29udGV4dFRocmVhZFRhc2soaW1wbCwgaW1wbE11dGV4LCBkZWxldGVNdXRleCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQor
ICAgIHsKKyAgICAgICAgZGVzdHJveU9uQ29udGV4dFRocmVhZChtX2ltcGwsIG1faW1wbE11dGV4
LCBtX2RlbGV0ZU11dGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVzdHJveU9uQ29udGV4
dFRocmVhZFRhc2soQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsKiBpbXBsLCBNdXRleCogaW1w
bE11dGV4LCBib29sIGRlbGV0ZU11dGV4KQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAg
ICAsIG1faW1wbE11dGV4KGltcGxNdXRleCkKKyAgICAgICAgLCBtX2RlbGV0ZU11dGV4KGRlbGV0
ZU11dGV4KQorICAgIHsKKyAgICB9CisKKyAgICBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwq
IG1faW1wbDsKKyAgICBNdXRleCogbV9pbXBsTXV0ZXg7CisgICAgYm9vbCBtX2RlbGV0ZU11dGV4
OworfTsKKworLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGFjY2Vzc2VkIG9ubHkgb24g
dGhlIGNvbnRleHQgdGhyZWFkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVzZSBsb2Nrcy4KK2NsYXNz
IEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3Qgewor
cHVibGljOgorICAgIEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBNdXRleCogbXV0ZXgpCisgICAgICAgIDogQWN0aXZlRE9NT2JqZWN0
KGNvbnRleHQsIHRoaXMpCisgICAgICAgICwgbV9tdXRleChtdXRleCkKKyAgICAgICAgLCBtX3N1
c3BlbmRlZChmYWxzZSkKKyAgICAgICAgLCBtX3N0b3BwZWQoZmFsc2UpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgeyBkZXN0cm95T25Db250ZXh0
VGhyZWFkKHRoaXMsIG1fbXV0ZXgsIGZhbHNlKTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNw
ZW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgp
IHsgbV9zdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpIHsgbV9z
dXNwZW5kZWQgPSBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyBtX3N0b3BwZWQg
PSB0cnVlOyB9CisgICAgYm9vbCBjYW5JbnZva2VDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuICgh
bV9zdXNwZW5kZWQgJiYgIW1fc3RvcHBlZCk7IH0KKworcHJpdmF0ZToKKyAgICBNdXRleCogbV9t
dXRleDsKKyAgICBib29sIG1fc3VzcGVuZGVkOworICAgIGJvb2wgbV9zdG9wcGVkOworfTsKKwor
c3RhdGljIHZvaWQgZGVzdHJveU9uQ29udGV4dFRocmVhZChBY3RpdmVET01PYmplY3RDYWxsYmFj
a0ltcGwqIGltcGwsIE11dGV4KiBpbXBsTXV0ZXgsIGJvb2wgZGVsZXRlTXV0ZXgpCit7CisgICAg
eworICAgICAgICAvLyBpbXBsTXV0ZXggaXMgTlVMTCBpZiBhbmQgb25seSBpZiBBY3RpdmVET01D
YWxsYmFjaydzIGRlc3RydWN0b3Igd2FzIGFscmVhZHkgY2FsbGVkIGFuZCBpbXBsCisgICAgICAg
IC8vIHdhcyBhbHJlYWR5IGRlbGV0ZWQuIE9uY2UgdGhlc2UgdHdvIHRoaW5ncyBoYXBwZW4gdGhv
dWdoLCBkZXN0cm95T25Db250ZXh0VGhyZWFkKCkgaXMgbm90CisgICAgICAgIC8vIGNhbGxlZCBm
cm9tIGFueXdoZXJlLiBTbyBpZiB3ZSBnb3QgaGVyZSwgdGhlbiB3ZSBjYW4gYmUgc3VyZSB0aGF0
IGltcGxNdXRleCAhPSBOVUxMLgorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoKmltcGxNdXRl
eCk7CisgICAgICAgIGlmIChpbXBsKSB7CisgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gaW1wbC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnBvc3RUYXNrKERlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpjcmVhdGUoaW1wbCwg
aW1wbE11dGV4LCBkZWxldGVNdXRleCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIGltcGw7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoZGVsZXRlTXV0ZXgpCisgICAgICAgIGRlbGV0ZSBpbXBsTXV0ZXg7Cit9CisKK0Fj
dGl2ZURPTUNhbGxiYWNrOjpBY3RpdmVET01DYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorICAgIDogbV9pbXBsTXV0ZXgobmV3IE11dGV4KCkpCisgICAgLCBtX2ltcGwo
bmV3IEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbChjb250ZXh0LCBtX2ltcGxNdXRleCkpCit7
CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKK30KKworQWN0aXZlRE9N
Q2FsbGJhY2s6On5BY3RpdmVET01DYWxsYmFjaygpCit7CisgICAgZGVzdHJveU9uQ29udGV4dFRo
cmVhZChtX2ltcGwsIG1faW1wbE11dGV4LCB0cnVlKTsKK30KKworYm9vbCBBY3RpdmVET01DYWxs
YmFjazo6Y2FuSW52b2tlQ2FsbGJhY2soKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcigqbV9p
bXBsTXV0ZXgpOworICAgIHJldHVybiAobV9pbXBsICYmIG1faW1wbC0+Y2FuSW52b2tlQ2FsbGJh
Y2soKSk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFjdGl2ZURPTUNhbGxiYWNrOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
Km1faW1wbE11dGV4KTsKKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURP
TUNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0
aXZlRE9NQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWN0
aXZlRE9NQ2FsbGJhY2tfaAorI2RlZmluZSBBY3RpdmVET01DYWxsYmFja19oCisKK25hbWVzcGFj
ZSBXVEYgeworY2xhc3MgTXV0ZXg7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKKworLy8gQSBjbGFzcyB0aGF0IGFsbG93cyBjYWxsYmFja3MgdG8gYmVoYXZlIGxpa2UgQWN0
aXZlRE9NT2JqZWN0cywgYW5kIGFsc28KKy8vIGJlIGRlc3Ryb3llZCBvbiB0aGUgY29udGV4dCB0
aHJlYWQgb3IgYW55IG90aGVyIHRocmVhZC4KK2NsYXNzIEFjdGl2ZURPTUNhbGxiYWNrIHsKK3B1
YmxpYzoKKyAgICBBY3RpdmVET01DYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KTsKKyAgICB+QWN0aXZlRE9NQ2FsbGJhY2soKTsKKworICAgIGJvb2wgY2FuSW52b2tlQ2Fs
bGJhY2soKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gQSBtdXRleCB1c2VkIHRvIGNvb3JkaW5h
dGUgYWNjZXNzIHRvIG1faW1wbC4gVGhpcyBtdXRleCBpcyBkZXN0cm95ZWQgb25seSB3aGVuL2Fm
dGVyIHRoZQorICAgIC8vIEFjdGl2ZURPTUNhbGxiYWNrIGluc3RhbmNlIGlzIGRlc3Ryb3llZC4g
U28gdGhlIG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBjYW4gYXNzdW1lIHRoYXQgaXQKKyAgICAvLyBp
cyBub3QgTlVMTCwgYW5kIGNhbiB1c2UgaXQgdG8gYWNxdWlyZSBsb2NrczsgdW5sZXNzIHNvbWVi
b2R5IGNhbGxzIGEgbWV0aG9kIG9mIHRoaXMKKyAgICAvLyBjbGFzcyBvbiBhbiBpbnN0YW5jZSB0
aGF0IGhhcyBiZWVuIGRlc3Ryb3llZCwgaW4gd2hpY2ggY2FzZSB0aGF0IGNvZGUgbmVlZHMgdG8g
YmUgZml4ZWQuCisgICAgV1RGOjpNdXRleCogbV9pbXBsTXV0ZXg7CisKKyAgICAvLyBUaGUgQWN0
aXZlRE9NT2JqZWN0IHBhcnQgb2YgdGhlIGNhbGxiYWNrLiBXZSB1c2UgYSByYXcgcG9pbnRlciBo
ZXJlLAorICAgIC8vIGJlY2F1c2UgdGhlIGRlc3RydWN0b3IgY2FuIGJlIGNhbGxlZCBvbiBhbnkg
dGhyZWFkLCBhbmQgd2UgbmVlZCB0bworICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoaXMgb2JqZWN0
IGdldHMgZGVzdHJveWVkIG9ubHkgb24gdGhlIGNvbnRleHQgdGhyZWFkLgorICAgIEFjdGl2ZURP
TU9iamVjdENhbGxiYWNrSW1wbCogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQWN0aXZlRE9NQ2FsbGJhY2tfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIyICs0MSwyMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJv
cikKK2Jvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikKIHsKLSAgICBBU1NFUlQobV9k
YXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFtX2RhdGEgfHwgIWNhbkludm9r
ZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmUHRyPEpTU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTQzo6SlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQuZ2V0
KCkpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkp
OwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gaWYgd2Ug
Y2Fubm90IGludm9rZSB0aGUgY2FsbGJhY2ssIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3Mu
YXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVj
KSwgdHJhbnNhY3Rpb24pKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRH
bG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIGVycm9yKSk7CisgICAgYXJncy5hcHBlbmQo
dG9KUyhleGVjLCB0cmFuc2FjdGlvbikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZXJy
b3IpKTsKIAogICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU1NR
TFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYWxsYmFjayA9IEpTU1FMU3RhdGVtZW50Q2Fs
bGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGNhbGxiYWNrID0gSlNTUUxTdGF0
ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwpAQCAtMTA2LDcgKzEwNiw3IEBAIEpTVmFsdWUg
SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IEpTU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgZXJyb3JD
YWxsYmFjayA9IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIwNTUsMTIg
KzIwNTUsMTMgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICAjIC0gQWRkIGRlZmF1
bHQgaGVhZGVyIHRlbXBsYXRlIGFuZCBoZWFkZXIgcHJvdGVjdGlvbgogICAgIHB1c2goQGhlYWRl
ckNvbnRlbnRIZWFkZXIsIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpKTsK
IAorICAgICRoZWFkZXJJbmNsdWRlc3siQWN0aXZlRE9NQ2FsbGJhY2suaCJ9ID0gMTsKICAgICAk
aGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CiAgICAgJGhlYWRlckluY2x1
ZGVzeyJKU0NhbGxiYWNrRGF0YS5oIn0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi9G
b3J3YXJkLmg+In0gPSAxOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNl
IFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNz
TmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSwgcHVibGljIEFj
dGl2ZURPTUNhbGxiYWNrIHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6
XG4iKTsKIAogICAgICMgVGhlIHN0YXRpYyBjcmVhdGUoKSBtZXRob2QuCkBAIC0yMDgzLDEwICsy
MDg0LDEzIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIg
LiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOworICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVU
eXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lIC4gIigiKTsKKworICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAg
ICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAu
ICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlw
ZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQpAQCAtMjEw
MCw3ICsyMTA0LDYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICAjIFByaXZhdGUg
bWVtYmVycwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDYWxsYmFja0RhdGEqIG1f
ZGF0YTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7XG4i
KTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKQEAgLTIxMzAsMTYgKzIx
MzMsMTYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogCiAgICAgIyBDb25z
dHJ1Y3RvcgogICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFt
ZX0oSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tE
YXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9kYXRhKG5ldyBK
U0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSlcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+d29ybGQoKSlc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKVxuIik7CiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CiAKICAgICAjIERlc3RydWN0b3IKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1l
fTo6fiR7Y2xhc3NOYW1lfSgpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwot
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFz
ayhEZWxldGVDYWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7XG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiNpZm5kZWYgTkRFQlVHXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBtX2RhdGEgPSAwO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZc
biIpOwpAQCAtMjE1NywyMSArMjE2MCwyMiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAk
e2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtj
bGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOwogCisgICAg
ICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50eXBl
LCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAuIEdldE5hdGl2
ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAg
ICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFt
LT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiKVxu
Iik7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQobV9kYXRhKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGNvbnRleHQpO1xuXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghbV9kYXRhIHx8ICFjYW5JbnZva2VD
YWxsYmFjaygpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
UmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTtc
blxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xh
dGVkV29ybGQuZ2V0KCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZ2xvYmFsT2JqZWN0KVxuIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5c
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7XG4iKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTI2LDI1ICsyMTI2LDI1IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgIyAt
IEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdl
bmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpKTsKIAotICAgIGlmICgiJGludGVy
ZmFjZU5hbWUuaCIgbHQgIldvcmxkQ29udGV4dEhhbmRsZS5oIikgewotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5oXCJcbiIpOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwi
XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1
ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5hbWUuaFwiXG4iKTsKLSAgICB9Ci0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2OC5oPlxuIik7Ci0gICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPlxuIik7CisgICAgbXkgQHVuc29ydGVk
SW5jbHVkZXMgPSAoKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVzLCAiI2luY2x1ZGUgXCJB
Y3RpdmVET01DYWxsYmFjay5oXCIiKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVzLCAiI2lu
Y2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5oXCIiKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVz
LCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiIik7CisgICAgcHVzaChAdW5zb3J0
ZWRJbmNsdWRlcywgIiNpbmNsdWRlIDx2OC5oPiIpOworICAgIHB1c2goQHVuc29ydGVkSW5jbHVk
ZXMsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCBqb2luKCJcbiIsIHNvcnQgQHVuc29ydGVkSW5jbHVkZXMpKTsKICAgICAKLSAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwotICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtc
biIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcblxubmFtZXNwYWNlIFdlYkNvcmUge1xu
XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUg
OiBwdWJsaWMgJGludGVyZmFjZU5hbWUsIHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7XG4iKTsK
IAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpKSk7CisgICAgICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFtZX0odmFs
dWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH4ke2NsYXNz
TmFtZX0oKTsKQEAgLTIxNjIsMTEgKzIxNjIsMTMgQEAgRU5ECiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVh
bCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlw
ZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCoiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVh
bCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlw
ZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CisKKyAgICAgICAg
ICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFt
cykgewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJHBh
cmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9Ci0KKyAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MTc0LDcgKzIxNzYsNyBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAK
IHByaXZhdGU6Ci0gICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAg
JHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKICAgICBX
b3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CkBAIC0yMjA2LDggKzIyMDgsOSBAQCBz
dWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD5cblxuIik7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7Ci0ke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2ODo6TG9jYWw8djg6Ok9iamVjdD4g
Y2FsbGJhY2spCi0gICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcoY2FsbGJhY2spKQorJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDog
QWN0aXZlRE9NQ2FsbGJhY2soY29udGV4dCkKKyAgICAsIG1fY2FsbGJhY2sodjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX3dvcmxkQ29udGV4dChVc2VD
dXJyZW50V29ybGQpCiB7CiB9CkBAIC0yMjMxLDIyICsyMjM0LDI2IEBAIEVORAogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPnR5cGUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFz
c05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
IC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkg
LiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsK
IAorICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRwYXJh
bS0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIsICIgLiBHZXRO
YXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUp
OworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3Mo
JHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigiLCAiLCBAYXJncykpOwogCiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
Y2FuSW52b2tlQ2FsbGJhY2soKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTtcblxuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENvbnRl
eHQpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodjhDb250
ZXh0LklzRW1wdHkoKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpO1xuXG4iKTsKIAotICAgICAg
ICAgICAgbXkgQGFyZ3ZzID0gKCk7CisgICAgICAgICAgICBAYXJncyA9ICgpOwogICAgICAgICAg
ICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBteSAkcGFy
YW1OYW1lID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke3BhcmFtTmFtZX1IYW5kbGUgPSB0b1Y4KCR7
cGFyYW1OYW1lfSk7XG4iKTsKQEAgLTIyNTQsMTQgKzIyNjEsMTQgQEAgRU5ECiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIENSQVNIKCk7XG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBhcmd2cywgIiAgICAgICAgJHtwYXJhbU5hbWV9SGFuZGxlIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAYXJncywgIiAgICAgICAgJHtwYXJhbU5hbWV9SGFuZGxlIik7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIGpvaW4oIixcbiIsIEBhcmd2cykpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIGpvaW4oIixcbiIsIEBhcmdzKSk7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuICAgIH07XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYm9v
bCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgIiAuIHNj
YWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBjYWxsYmFj
a1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNw
cAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU1Rlc3RDYWxsYmFjazo6
SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xv
YmFsT2JqZWN0KSkKKyAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxs
YmFjaywgZ2xvYmFsT2JqZWN0KSkKICAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3Qt
PndvcmxkKCkpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiB7CiB9CiAKIEpTVGVzdENhbGxiYWNrOjp+SlNUZXN0
Q2FsbGJhY2soKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGVs
ZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOworICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0
YSkpOwogI2lmbmRlZiBOREVCVUcKICAgICBtX2RhdGEgPSAwOwogI2VuZGlmCkBAIC01MSwxNiAr
NTEsMTYgQEAgSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiAKIC8vIEZ1bmN0aW9u
cwogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQorYm9vbCBKU1Rl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkK
IHsKLSAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFt
X2RhdGEgfHwgIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5n
ZXQoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lzb2xhdGVkV29ybGQuZ2V0KCkp
OwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzMs
MTYgKzczLDE2IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKICAg
ICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQ2xh
c3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCitib29sIEpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBT
dHJpbmcmIHN0ckFyZykKIHsKLSAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgaWYgKCFtX2RhdGEgfHwgIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwog
CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1f
aXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlNET01HbG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lzb2xh
dGVkV29ybGQuZ2V0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5oCShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsy
MywxNCBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgogI2luY2x1ZGUgIlRlc3RDYWxs
YmFjay5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgSlNUZXN0Q2FsbGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsKK2NsYXNzIEpT
VGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjaywgcHVibGljIEFjdGl2ZURPTUNhbGxi
YWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gY3Jl
YXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgIHsKQEAgLTM5LDE3ICs0MCwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SlNU
ZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwgYm9vbCBjYWxs
YmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MxKiBjbGFz
czFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0
ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNr
V2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczMqIGNs
YXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7Cisg
ICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFy
YW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNs
YXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09NUElMRV9BU1NFUlQoZmFs
c2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKENsYXNzMyog
Y2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKENsYXNzNSogY2xh
c3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRlOgogICAgIEpTVGVzdENh
bGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwogCiAg
ICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBt
X2lzb2xhdGVkV29ybGQ7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAko
cmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1WOFRlc3RDYWxsYmFjazo6VjhUZXN0Q2FsbGJhY2sodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGNhbGxiYWNrKQotICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKK1Y4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxsYmFj
ayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCisgICAgOiBBY3RpdmVET01DYWxsYmFjayhjb250ZXh0KQorICAgICwgbV9jYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKICAgICAsIG1f
d29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KQEAgLTQ3LDExICs0OCwxNCBAQCBW
OFRlc3RDYWxsYmFjazo6flY4VGVzdENhbGxiYWNrKCkKIAogLy8gRnVuY3Rpb25zCiAKLWJvb2wg
VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIENsYXNzMSogY2xhc3MxUGFyYW0pCitib29sIFY4VGVzdENhbGxiYWNr
OjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNsYXNzMVBhcmFtKQogeworICAgIGlm
ICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2
OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02OCwxNCArNzIsMTcgQEAgYm9vbCBWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAgIH07CiAKICAgICBib29sIGNhbGxi
YWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpOworICAgIHJldHVy
biAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1
ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAotYm9vbCBWOFRlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Q2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCitib29sIFY4VGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25z
dCBTdHJpbmcmIHN0ckFyZykKIHsKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0g
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4
dCwgbV93b3JsZENvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4
dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENvbnRleHQp
OwogICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApA
QCAtOTgsNyArMTA1LDcgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UAogICAgIH07CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBy
ZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJu
VmFsdWUsIGNvbnRleHQpOworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywg
MiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oCShyZXZpc2lvbiA2MTUzNSkKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZm5kZWYgVjhUZXN0Q2FsbGJhY2tfaAogI2Rl
ZmluZSBWOFRlc3RDYWxsYmFja19oCiAKKyNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5oIgog
I2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5o
IgogI2luY2x1ZGUgPHY4Lmg+CkBAIC0zMCwyNCArMzEsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgeworY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgVjhUZXN0Q2FsbGJhY2sgOiBwdWJs
aWMgVGVzdENhbGxiYWNrLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0
ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCkpKTsK
KyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4
VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogCiAgICAg
dmlydHVhbCB+VjhUZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1
YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Q2xhc3MxKiBjbGFzczFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNz
MlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25z
dCBTdHJpbmcmIHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwg
aW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBDbGFzczMqIGNsYXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFz
czZQYXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNz
MSogY2xhc3MxUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJh
bShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09NUElM
RV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5U
eXBlKENsYXNzMyogY2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNr
KENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRlOgot
ICAgIFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgVjhUZXN0Q2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAK
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFdvcmxkQ29u
dGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmNwcAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMSArNDMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFY4U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCitib29s
IFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiB7CisgICAgaWYgKCFjYW5JbnZva2VDYWxs
YmFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhD
b250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1f
d29ybGRDb250ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKQEAgLTY1LDE1ICs2OCwxMiBAQCBib29sIFY4U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjazo6aGFuZGxlCiAgICAgICAgIGVycm9ySGFuZGxlCiAgICAgfTsKIAotICAgIC8vIFBy
b3RlY3QgdGhlIGNvbnRleHQgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3Rvcihjb250ZXh0KTsKLQogICAgIGJvb2wg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIC8vIFN0ZXAgNjogSWYgdGhlIGVycm9y
IGNhbGxiYWNrIHJldHVybnMgZmFsc2UsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dAogICAgIC8v
IHN0YXRlbWVudCwgaWYgYW55LCBvciBvbnRvIHRoZSBuZXh0IG92ZXJhbGwgc3RlcCBvdGhlcndp
c2UuIE90aGVyd2lzZSwKICAgICAvLyB0aGUgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1cm4g
ZmFsc2UsIG9yIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjay4KICAgICAvLyBKdW1wIHRvIHRo
ZSBsYXN0IHN0ZXAgaW4gdGhlIG92ZXJhbGwgc3RlcHMuCi0gICAgcmV0dXJuIGludm9rZUNhbGxi
YWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpIHx8
IGNhbGxiYWNrUmV0dXJuVmFsdWU7CisgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERP
TVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNCwxMiArODA0LDEzIEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkQKICAgICBpZiAoIVY4QmluZGlu
Z1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZy
YW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25D
YWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CiAgICAgICAgIGlmICghYXJn
c1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlT
TUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxi
YWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFi
YXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAg
ICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA2MTUzNSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNl
OjpjaGFuZ2UKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNhbGxiYWNr
ID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7CisgICAgICAgIGNh
bGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwpAQCAtNzIsNyArNzIsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJnc1szXS0+SXNP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJS
KTsKIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6OmNyZWF0ZShhcmdzWzNdKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2s7CkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNyZWF0ZVRyYW5zCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgUmVm
UHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3Nb
MF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MSAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkpIHsKICAgICAgICAgaWYgKCFhcmdzWzFd
LT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRD
SF9FUlIpOwogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VT
eW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDYxNTM1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMiArNTMsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2VTeW5jOjpj
aAogCiAgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSA9IFY4RGF0YWJhc2VTeW5jOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRy
PFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxl
bmd0aCgpID4gMikgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY2Fs
bGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7Cisg
ICAgICAgIGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwpAQCAtNzgsNyArNzksOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNyZWF0ZVRyYW5zCiAKICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlID0gVjhEYXRhYmFzZVN5
bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6
Y3JlYXRlKGFyZ3NbMF0pOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgUmVmUHRyPFY4
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxi
YWNrLnJlbGVhc2UoKSwgcmVhZE9ubHksIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA2
MTUzNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyMiArODksMjIgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4U1FMVHJhbnNhY3Rpb246OgogCiAgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uID0gVjhTUUxUcmFuc2FjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
Y2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5lZE9yTnVs
bChhcmdzWzJdKSkgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIGNhbGxi
YWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAgICBj
YWxsYmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMgJiYgIWlz
VW5kZWZpbmVkT3JOdWxsKGFyZ3NbM10pKSB7CiAgICAgICAgIGlmICghYXJnc1szXS0+SXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsK
LSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3Jl
YXRlKGFyZ3NbM10pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAg
fQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDYx
NTM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDEyICsxNTcsMTMgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsKICAgICAgICAgaWYgKCFh
cmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9N
SVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2Fs
bGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0
YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTg1LDEyICsxODYsMTMgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsK
ICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sg
PSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25D
YWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDog
V2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIyICszNywxNCBAQCBBY3Rp
dmVET01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdChTY3JpcHRFCiAgICAgOiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fcGVuZGluZ0FjdGl2
aXR5Q291bnQoMCkKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBBU1NFUlQoKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFpblRocmVhZCgpKQotICAgICAg
ICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAmJiBjdXJy
ZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCktPnRocmVhZCgpLT50aHJlYWRJRCgpKSk7Ci0jZW5kaWYKLQorICAgIEFTU0VS
VChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRBY3RpdmVET01PYmplY3QodGhpcywgdXBjYXN0
UG9pbnRlcik7CiB9CiAKIEFjdGl2ZURPTU9iamVjdDo6fkFjdGl2ZURPTU9iamVjdCgpCiB7CiAg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewotI2lmIEVOQUJMRShXT1JLRVJTKQot
ICAgICAgICBBU1NFUlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYm
IGlzTWFpblRocmVhZCgpKQotICAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT50aHJlYWQoKS0+dGhyZWFk
SUQoKSkpOwotI2VuZGlmCi0KKyAgICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdCh0aGlzKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAJKHJldmlzaW9uIDYxNTM1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDcgKzc1OSw3IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGUKIAogdm9pZCBEYXRhYmFzZTo6cGVyZm9ybUNyZWF0aW9uQ2Fs
bGJhY2soKQogewotICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsKKyAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KHRoaXMpOwogfQogCiBTUUxUcmFuc2FjdGlvbkNsaWVudCogRGF0YWJhc2U6OnRy
YW5zYWN0aW9uQ2xpZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2su
aAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlU3luYzsKLWNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxEYXRhYmFzZUNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJh
c2VDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRGF0YWJhc2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVN5bmMqKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KERhdGFiYXNlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVFdmVudChEYXRhYmFzZVN5bmMqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
U3RhdGVtZW50LmNwcAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3Rh
dGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDkgKzE3MCw5IEBAIGJvb2wgU1FMU3Rh
dGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHIKICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVl
ZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KICAgICBpZiAobV9l
cnJvcikgewogICAgICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAg
ICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQo
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNh
Y3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7
CiAgICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENhbGxiYWNrKQotICAgICAgICBjYWxsYmFja0Vy
cm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNl
dC5nZXQoKSk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0ZW1lbnRDYWxsYmFjay0+
aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIC8vIE5v
dyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAg
bV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaAkocmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDEzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMUmVzdWx0U2V0OwogCiBjbGFzcyBTUUxTdGF0ZW1lbnRD
YWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudENhbGxiYWNrPiB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5z
YWN0aW9uKiwgU1FMUmVzdWx0U2V0KikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gNjE1
MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFz
cyBTUUxFcnJvcjsKIAogY2xhc3MgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBU
aHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbios
IFNRTEVycm9yKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2Fj
dGlvbiosIFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCShyZXZpc2lvbiA2MTUzNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiAKICAgICBpZiAobV9jYWxsYmFjaykgewogICAg
ICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgc2hvdWxkRGVsaXZlckVy
cm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2Fs
bGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1fZXhlY3V0
ZVNxbEFsbG93ZWQgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgc2hvdWxkRGVsaXZlckVy
cm9yQ2FsbGJhY2sgPSB0cnVlOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYg
ZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdAogICAgIC8vIGVycm9y
IHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICBpZiAobV9lcnJvckNh
bGxiYWNrKQotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKKyAg
ICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0
KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBj
bGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4i
LCB0aGlzKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAko
cmV2aXNpb24gNjE1MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rp
b247CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNo
YXJlZDxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKikgPSAwOwogfTsKIAogfQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2aXNp
b24gNjE1MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxFcnJvcjsKIAog
Y2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFy
ZWQ8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRs
ZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciopID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gNjE1
MzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE2IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hv
dWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJl
YWQuCiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVk
PFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uU3luYyopID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb25TeW5jKikgPSAwOwogfTsK
IAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE1MzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNi0yMSAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSBEQiBjYWxsYmFja3MgYXJlIGV4ZWN1dGVkIGlu
IHRoZSBjb250ZXh0IHRoZXkncmUgY3JlYXRlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTEyCisKKyAgICAgICAgKiBzdG9yYWdlL2NhbGxiYWNr
cy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2Fs
bGVkLWluLWNvcnJlY3QtY29udGV4dC1oZWxwZXItZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250
ZXh0LXRlc3QtZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZXNvdXJjZXMv
Y29tbW9uLW91dHB1dC1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3Jlc291
cmNlcy9kYXRhYmFzZS1jb21tb24uanM6CisgICAgICAgIChsb2cpOgorICAgICAgICAobG9nVG9P
dXRwdXRGcmFtZSk6CisgICAgICAgIChzZXR1cEFuZFJ1blRlc3QpOgorICAgICAgICAoc2V0dXBB
bmRSdW5GcmFtZXNUZXN0KToKKwogMjAxMC0wNi0yMSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeGluZyBleHBlY3RhdGlvbnMu
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJl
Y3QtY29udGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1p
bi1jb3JyZWN0LWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
IEBACisKKworLS0tLS0tLS0KK0ZyYW1lOiAnb3V0cHV0RnJhbWUnCistLS0tLS0tLQorVGhpcyB0
ZXN0IHRlc3RzIHRoYXQgYWxsIERCIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZSBjb250ZXh0
IHRoZXkgd2VyZSBjcmVhdGVkLCByYXRoZXIgdGhhbiB0aGUgY29udGV4dCB3aGVyZSB0aGUgREIg
aGFuZGxlIHdhcyBjcmVhdGVkLgorUEFTUzogVGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBj
YWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1BBU1M6IFRoZSBzdGF0ZW1lbnQgc3VjY2Vz
cyBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitQQVNTOiBUaGUg
c3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4
dC4KK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRo
ZSBjb3JyZWN0IGNvbnRleHQuCitQQVNTOiBUaGUgdHJhbnNhY3Rpb24gc3VjY2VzcyBjYWxsYmFj
ayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitQQVNTOiBUaGUgdHJhbnNhY3Rp
b24gY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUEFTUzogVGhl
IHN0YXRlbWVudCBzdWNjZXNzIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29u
dGV4dC4KK1BBU1M6IFRoZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0
aGUgY29ycmVjdCBjb250ZXh0LgorUEFTUzogVGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNr
IHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1BBU1M6IFRoZSB0cmFuc2FjdGlv
biBzdWNjZXNzIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KKwor
CistLS0tLS0tLQorRnJhbWU6ICd0ZXN0RnJhbWUnCistLS0tLS0tLQorCisKKy0tLS0tLS0tCitG
cmFtZTogJ2hlbHBlckZyYW1lJworLS0tLS0tLS0KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3Qt
Y29udGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jYWxsYmFj
a3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YWJh
c2UtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxmcmFtZXNldCBvbmxvYWQ9InNldHVw
QW5kUnVuRnJhbWVzVGVzdCgpIj4KKzxmcmFtZSBuYW1lPSJvdXRwdXRGcmFtZSIgc3JjPSJyZXNv
dXJjZXMvY29tbW9uLW91dHB1dC1mcmFtZS5odG1sIj4KKzxmcmFtZSBuYW1lPSJ0ZXN0RnJhbWUi
IHNyYz0icmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC10
ZXN0LWZyYW1lLmh0bWwiPgorPGZyYW1lIG5hbWU9ImhlbHBlckZyYW1lIiBzcmM9InJlc291cmNl
cy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtaGVscGVyLWZyYW1lLmh0
bWwiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVz
b3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1oZWxwZXItZnJh
bWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxs
YmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtaGVscGVyLWZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJl
LWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtaGVscGVyLWZyYW1lLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iZGF0YWJhc2Ut
Y29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgZG9uZSA9IGZhbHNlOworCitmdW5j
dGlvbiBsb2dDYWxsYmFjayhjYWxsYmFja1R5cGUpCit7CisgICAgbG9nVG9PdXRwdXRGcmFtZSgi
UEFTUzogVGhlICIgKyBjYWxsYmFja1R5cGUgKyAiIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhl
IGNvcnJlY3QgY29udGV4dC4iKTsKK30KKworZnVuY3Rpb24gZmFpbGluZ1RyYW5zYWN0aW9uQ2Fs
bGJhY2sodHgpCit7CisgICAgbG9nQ2FsbGJhY2soInRyYW5zYWN0aW9uIik7CisgICAgdHguZXhl
Y3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiLCBbXSwg
c3VjY2Vzc1N0YXRlbWVudENhbGxiYWNrLCBudWxsKTsKKyAgICB0eC5leGVjdXRlU3FsKCJCQUQg
U1FMIFNUQVRFTUVOVCIsIFtdLCBudWxsLCBlcnJvclN0YXRlbWVudENhbGxiYWNrKTsKK30KKwor
ZnVuY3Rpb24gZXJyb3JTdGF0ZW1lbnRDYWxsYmFjayh0eCwgZXJyb3IpCit7CisgICAgbG9nQ2Fs
bGJhY2soInN0YXRlbWVudCBlcnJvciIpOworICAgIHJldHVybiB0cnVlOyAvLyBmYWlsIHRoZSB0
cmFuc2FjdGlvbgorfQorCitmdW5jdGlvbiBzdWNjZXNzU3RhdGVtZW50Q2FsbGJhY2sodHgsIGRh
dGEpCit7CisgICAgbG9nQ2FsbGJhY2soInN0YXRlbWVudCBzdWNjZXNzIik7Cit9CisKK2Z1bmN0
aW9uIGVycm9yVHJhbnNhY3Rpb25DYWxsYmFjayhlcnJvcikKK3sKKyAgICBsb2dDYWxsYmFjaygi
dHJhbnNhY3Rpb24gZXJyb3IiKTsKK30KKworZnVuY3Rpb24gc3VjY2Vzc1RyYW5zYWN0aW9uQ2Fs
bGJhY2soKQoreworICAgIGxvZ0NhbGxiYWNrKCJ0cmFuc2FjdGlvbiBzdWNjZXNzIik7CisgICAg
aWYgKCFkb25lKQorICAgICAgICB0ZXN0U3RhcnRUcmFuc2FjdGlvbnNJblRoaXNDb250ZXh0KCk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0U3RhcnRUcmFuc2FjdGlvbnNJblRoaXNDb250ZXh0KCkKK3sKKyAgICBk
b25lID0gdHJ1ZTsKKworICAgIC8vIHRlc3QgdGhhdCBhbGwgY2FsbGJhY2tzIGFyZSBleGVjdXRl
ZCBpbiB0aGlzIGNvbnRleHQsIGV2ZW4gdGhvdWdoICdkYicgaXMgZGVmaW5lZCBpbiBhbm90aGVy
IGNvbnRleHQKKyAgICB0b3AuZnJhbWVzWzFdLmRiLnRyYW5zYWN0aW9uKGZhaWxpbmdUcmFuc2Fj
dGlvbkNhbGxiYWNrLCBlcnJvclRyYW5zYWN0aW9uQ2FsbGJhY2spOworICAgIHRvcC5mcmFtZXNb
MV0uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSwgbnVsbCwgc3VjY2Vzc1RyYW5zYWN0
aW9uQ2FsbGJhY2spOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUt
Y2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC10ZXN0LWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29y
cmVjdC1jb250ZXh0LXRlc3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4
dC10ZXN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iZGF0YWJhc2UtY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgZGIgPSBvcGVuRGF0YWJhc2VXaXRoU3VmZml4KCJDYWxsYmFja3NBcmVDYWxsZWRJ
bkNvcnJlY3RDb250ZXh0VGVzdCIsICIxLjAiLCAiIiwgMSk7CisKK2Z1bmN0aW9uIGxvZ0NhbGxi
YWNrKGNhbGxiYWNrVHlwZSkKK3sKKyAgICBsb2dUb091dHB1dEZyYW1lKCJGQUlMOiBUaGUgIiAr
IGNhbGxiYWNrVHlwZSArICIgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgd3JvbmcgY29udGV4
dC4iKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgLy8gdGVzdCB0aGF0IHRyYW5z
YWN0aW9uIGNhbGxiYWNrcyBkZWZpbmVkIGluIGFub3RoZXIgZnJhbWUgYXJlIGV4ZWN1dGVkIGlu
IHRoZSBjb250ZXh0IG9mIHRoYXQgZnJhbWUKKyAgICBkYi50cmFuc2FjdGlvbih0b3AuZnJhbWVz
WzJdLmZhaWxpbmdUcmFuc2FjdGlvbkNhbGxiYWNrLCB0b3AuZnJhbWVzWzJdLmVycm9yVHJhbnNh
Y3Rpb25DYWxsYmFjayk7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSwgbnVs
bCwgdG9wLmZyYW1lc1syXS5zdWNjZXNzVHJhbnNhY3Rpb25DYWxsYmFjayk7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9yZXNvdXJjZXMvY29tbW9uLW91dHB1dC1mcmFtZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NvbW1vbi1vdXRwdXQtZnJhbWUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NvbW1vbi1vdXRw
dXQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgYWxsIERCIGNhbGxiYWNr
cyBhcmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IHRoZXkgd2VyZSBjcmVhdGVkLCByYXRoZXIgdGhh
biB0aGUgY29udGV4dCB3aGVyZSB0aGUgREIgaGFuZGxlIHdhcyBjcmVhdGVkLgorPHByZSBpZD0i
Y29uc29sZSI+CitGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCis8L3ByZT4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLWNvbW1v
bi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9kYXRhYmFz
ZS1jb21tb24uanMJKHJldmlzaW9uIDYxNTM1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNv
dXJjZXMvZGF0YWJhc2UtY29tbW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw3ICsxMSwxMiBA
QCBmdW5jdGlvbiBvcGVuRGF0YWJhc2VXaXRoU3VmZml4KG5hbWUsIHZlCiAKIGZ1bmN0aW9uIGxv
ZyhtZXNzYWdlKQogewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5u
ZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworICAgIHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKK30KKworZnVuY3Rp
b24gbG9nVG9PdXRwdXRGcmFtZShtZXNzYWdlKQoreworICAgIHRvcC5mcmFtZXNbMF0uZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7
CiB9CiAKIGZ1bmN0aW9uIHNldExvY2F0aW9uSGFzaChoYXNoKSB7CkBAIC0yNCw2ICsyOSwxNyBA
QCBmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKICAgICB9Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5l
clRleHQgPSAiIjsKKyAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KS5pbm5lclRleHQgPSAiIjsKICAgICBydW5UZXN0KCk7CiB9CisKK2Z1bmN0aW9uIHNldHVwQW5k
UnVuRnJhbWVzVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIHRvcC5mcmFtZXNb
MF0uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiIjsKKyAg
ICB0b3AuZnJhbWVzWzFdLnJ1blRlc3QoKTsKK30K
</data>
<flag name="review"
          id="45968"
          type_id="1"
          status="-"
          setter="jorlow"
    />
    <flag name="commit-queue"
          id="45969"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59355</attachid>
            <date>2010-06-22 02:00:14 -0700</date>
            <delta_ts>2010-06-25 03:03:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>73639</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTYxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMTAtMDYtMjIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIGFsbCBjYWxsYmFja3MgaW50byBBY3RpdmVET01PYmplY3RzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICBUZXN0
OiBzdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5odG1sCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHM6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJp
bmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVzdHJveU9uQ29udGV4dFRocmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpEZXN0cm95T25Db250ZXh0VGhy
ZWFkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6
OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVE
T01PYmplY3RDYWxsYmFja0ltcGw6OmNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6c3VzcGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnJlc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpjYW5JbnZva2VDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJ
bXBsOjptdXRleCk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95T25Db250ZXh0VGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjpBY3RpdmVET01DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01DYWxsYmFjazo6fkFjdGl2ZURPTUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjpjYW5JbnZva2VDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01DYWxsYmFjazo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5o
OiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q2FsbGJhY2s6OkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4VGVzdENhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV2luZG93OjpvcGVuRGF0YWJhc2VDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhEYXRh
YmFzZTo6Y2hhbmdlVmVyc2lvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmND
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNp
b25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbENhbGxiYWNrKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VTeW5jQ2FsbGJh
Y2spOgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWN0aXZlRE9NT2JqZWN0OjpBY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRpb25D
YWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDoK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg6CisgICAgICAgICog
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg6CisKIDIwMTAtMDYtMjAgIE1PUklUQSBIYWpp
bWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11
cmEuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYxNjA5KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIFNFVChXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vz
c2liaWxpdHkiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dlbmVyaWMiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2pzIgogICAgICIke1dFQkNPUkVfRElSfS9icmlkZ2UiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9jIgpAQCAtNjgsNiArNjksNyBAQCBTRVQoV2ViQ29y
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCiApCiAKIFNFVChXZWJDb3JlX0lETF9JTkNMVURFUworICAg
IGJpbmRpbmdzL2dlbmVyaWMKICAgICBiaW5kaW5ncy9qcwogICAgIGNzcwogICAgIGRvbQpAQCAt
NTQ2LDYgKzU0OCw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGJpbmRpbmdzL1Njcmlw
dENvbnRyb2xsZXJCYXNlLmNwcAogCisgICAgYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxs
YmFjay5jcHAKKwogICAgIGJpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAKICAg
ICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcApJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKSBcCisgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9n
ZW5lcmljIFwKICAgICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwKICAgICAkKFdlYkNvcmUpL2Jp
bmRpbmdzL29iamMgXAogICAgICQoV2ViQ29yZSkvY3NzIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
NjE2MDkpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2
ICsxNCw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYyBcCiAJ
LUkkKHNyY2RpcikvV2ViQ29yZS9iaW5kaW5ncy9qcyBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2JyaWRnZSBcCkBAIC0zODMs
NiArMzg0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmggXAogCVdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwIFwKIAlXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlUm93LmggXAorCVdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3Rp
dmVET01DYWxsYmFjay5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01D
YWxsYmFjay5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3Zp
ZGVyLmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNDgzLDYgKzQ4Myw4IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNz
aWJpbGl0eU9iamVjdFdpbi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyV2luLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvd3gvQWNjZXNzaWJpbGl0eU9iamVjdFd4LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
Z2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2dl
bmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJp
Yy9CaW5kaW5nRE9NV2luZG93LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQmlu
ZGluZ0VsZW1lbnQuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2Vj
dXJpdHkuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYxNjA5KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSw3IEBAIGluY2x1ZGUoV2ViQ29yZS5wcmkpCiBJ
TkNMVURFUEFUSCA9IFwKICAgICAkJFBXRCBcCiAgICAgJCRQV0QvYWNjZXNzaWJpbGl0eSBcCisg
ICAgJCRQV0QvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJCRQV0QvYmluZGluZ3MvanMgXAogICAg
ICQkUFdEL2JyaWRnZSBcCiAgICAgJCRQV0QvYnJpZGdlL2MgXApAQCAtMjY2LDYgKzI2Nyw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVy
Q29udGFpbmVyLmNwcCBcICAgIAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
Um93LmNwcCBcICAgIAogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgXAorICAg
IGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwIFwKICAgICBiaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVN
YXAuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIFwKQEAgLTEwNDYs
NiArMTA0OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlSGVhZGVyQ29udGFpbmVyLmggXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlUm93LmggXAogICAgIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIFwKKyAgICBi
aW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmggXAogICAgIGJpbmRpbmdzL2pzL0Nh
Y2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggXAogICAgIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5oIFwKICAgICBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuaCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYxNjA5KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzc3
NjAsNiArMzc3NjAsMTggQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXFNjcmlwdENv
bnRyb2xsZXJCYXNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCisgCQkJPEZpbHRlcg0KKwkJ
CQlOYW1lPSJnZW5lcmljIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGJpbmRpbmdzXGdlbmVyaWNcQWN0aXZlRE9NQ2FsbGJhY2suaCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xnZW5l
cmljXEFjdGl2ZURPTUNhbGxiYWNrLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwv
RmlsdGVyPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0ianMiDQogCQkJCT4NCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwkocmV2aXNpb24gNjE2
MDkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVDb21tb24udnNwcm9wcwkod29y
a2luZyBjb3B5KQpAQCAtNyw3ICs3LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChQcm9qZWN0
RGlyKS4uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3NpYmlsaXR5JnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxhY2Nlc3NpYmlsaXR5XHdpbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cYnJpZGdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcYyZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGpzYyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5cY3NzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxlZGl0aW5nJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJl
bmRlcmluZ1xzdHlsZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYmluZGluZ3NcanMmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
ZG9tXGRlZmF1bHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGhpc3RvcnkmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGh0bWxc
Y2FudmFzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxpbnNwZWN0b3ImcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGxvYWRlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVy
XGFwcGNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZSZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmVcY2YmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGxvYWRlclxpY29uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxub3Rp
ZmljYXRpb25zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwYWdlJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxwYWdlXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXG1vY2smcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3Jt
XHNxbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cd2luJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxuZXR3b3JrJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxwbGF0Zm9ybVxuZXR3b3JrXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxh
dGZvcm1cY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcdHJhbnNmb3JtcyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cdGV4dCZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cdGV4dFx0cmFuc2NvZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwbGF0Zm9ybVxncmFwaGljc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHhtbCZx
dW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXMm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsdWdpbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsdWdpbnNcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcYW5pbWF0
aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3MmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljc1xmaWx0ZXJzJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxzdmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdtbCZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cc3RvcmFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd2Vic29j
a2V0cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd29ya2VycyZxdW90OzsmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXEphdmFT
Y3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVc
SmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXEZvcndhcmRpbmdIZWFk
ZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVv
dDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxzcWxpdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJy
YXJpZXNEaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDsiCisJCUFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikuLiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYWNjZXNz
aWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJy
aWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGNzcyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccmVuZGVyaW5n
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGdlbmVyaWMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXGJpbmRpbmdzXGpzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxkb20mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caW5z
cGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXImcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
bG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZl
XGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcaWNvbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFnZVxhbmltYXRpb24mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cYW5pbWF0aW9uJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxtb2NrJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxwbGF0Zm9ybVxzcWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRm
b3JtXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0d29yayZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0d29ya1x3aW4mcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxncmFwaGljcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNz
XHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHQmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRleHRcdHJhbnNjb2RlciZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXG9ialxXZWJD
b3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdpbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGdy
YXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxzdmdcZ3JhcGhpY3NcZmlsdGVycyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
Llx3bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN0b3JhZ2UmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdvcmtl
cnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cikuLlxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rpcilc
aW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNj
cmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVh
ZHMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcc3FsaXRlJnF1b3Q7
OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7
IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19XSU4zMl9fO0RJU0FCTEVfM0RfUkVOREVS
SU5HO1dFQkNPUkVfQ09OVEVYVF9NRU5VUyIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJ
CVByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaD0iV2ViQ29yZVByZWZpeC5oIgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYxNjA5KQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQyNTcsNiArNDI1Nyw4IEBACiAJCUI1QjVEQzZBMTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0
cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI1QzExMjNCMTAy
QjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjM5MTAyQjZDNDYwMDA5
NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKIAkJQjVDMTEyM0Mx
MDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QzExMjNBMTAyQjZDNDYwMDA5
NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IH07CisJCUI1RDMxREZBMTFD
RjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyog
QWN0aXZlRE9NQ2FsbGJhY2suY3BwICovOyB9OworCQlCNUQzMURGQjExQ0Y2MTBCMDA5RjIyQjQg
LyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFj
ay5oICovOyB9OwogCQlCNUQzNjAxQTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVEMzYw
MTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjYyN0ZC
MkQxMUFENzQzNTAwRTk3QjcyIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBBRDJBOTExQUMxNjMxMDA4Q0YyRkIg
LyogSURCRGF0YWJhc2VJbXBsLmNwcCAqLzsgfTsKIAkJQjY2OTNFRUMxMUFENjNFNjAwM0YyNzcw
IC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNjY5M0VFODExQUQ2M0U2MDAzRjI3NzAgLyogSURCT2JqZWN0U3RvcmUuaCAq
LzsgfTsKQEAgLTk3NjUsNiArOTc2Nyw4IEBACiAJCUI1QjVEQzY4MTE5QkIzRDUwMDJBODc5MCAv
KiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFi
c3RyYWN0RGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVDMTEyMzkx
MDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QzExMjNBMTAyQjZDNDYwMDA5NjU3
OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFjdGl2ZURPTUNhbGxi
YWNrLmNwcDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCNUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9N
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWN0aXZlRE9NQ2Fs
bGJhY2suaDsgcGF0aCA9IGdlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VDYWxsYmFj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjY5M0VFODExQUQ2M0U2MDAzRjI3
NzAgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjY2OTNFRTkx
MUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZVJlcXVlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzNDYsNiArMTUzNTAsMTUgQEAKIAkJCW5hbWUg
PSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUI1RDMxREY3MTFDRjYw
RTUwMDlGMjJCNCAvKiBnZW5lcmljICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQlCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJh
Y2suY3BwICovLAorCQkJCUI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxs
YmFjay5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBnZW5lcmljOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJQjczNEIxN0YxMTlCOThEQjAwNjU4N0JEIC8qIHRyYW5zY29kZXIg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTUzNTgsNiAr
MTUzNzEsNyBAQAogCQlCQzFBMzc5MDA5N0M2Rjk3MDAxOUYzRDggLyogYmluZGluZ3MgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUI1RDMxREY3MTFDRjYw
RTUwMDlGMjJCNCAvKiBnZW5lcmljICovLAogCQkJCUJDMUEzNzkzMDk3QzZGQjEwMDE5RjNEOCAv
KiBqcyAqLywKIAkJCQlCQzFBMzc5NDA5N0M2RkM0MDAxOUYzRDggLyogb2JqYyAqLywKIAkJCQk5
M0Y4QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLywKQEAgLTE5NDk5
LDYgKzE5NTEzLDcgQEAKIAkJCQlCNTZFQkE4NTExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTI1QTk2NTExQ0EyMzQwMDAzQTIzQTggLyogSlNT
UUxFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTlBRjAwMTFEMDlGMkMwMEQ0NTgz
MSAvKiBIVE1MSW5wdXRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUI1RDMxREZCMTFDRjYx
MEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTgx
NSw2ICsyMTgzMCw3IEBACiAJCQkJMjAwQjE5MDkxMUMyNzdEOTAwRENDRDNBIC8qIFNjcmlwdEJy
ZWFrcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEOEY4MUMxMUNBQjlFOTAwRTkzRTU0
IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTI1QTk2NjEx
Q0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2Fs
bGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2
ZURPTUNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2suaCIKKworI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZGVzdHJveU9uQ29u
dGV4dFRocmVhZChQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4pOworCitj
bGFzcyBEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZXN0cm95T25D
b250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NPd25QdHI8QWN0aXZlRE9NT2JqZWN0Q2FsbGJh
Y2tJbXBsPiBpbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEZXN0cm95T25Db250ZXh0
VGhyZWFkVGFzayhpbXBsKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBkZXN0cm95T25Db250ZXh0
VGhyZWFkKG1faW1wbC5yZWxlYXNlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZXN0cm95
T25Db250ZXh0VGhyZWFkVGFzayhQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1w
bD4gaW1wbCkKKyAgICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICB7CisgICAgfQorCisgICAgT3du
UHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4gbV9pbXBsOworfTsKKworLy8gSW5zdGFu
Y2VzIG9mIHRoaXMgY2xhc3MgYXJlIGFjY2Vzc2VkIG9ubHkgb24gdGhlIGNvbnRleHQgdGhyZWFk
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVzZSBsb2Nrcy4KK2NsYXNzIEFjdGl2ZURPTU9iamVjdENh
bGxiYWNrSW1wbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIEFjdGl2
ZURPTU9iamVjdENhbGxiYWNrSW1wbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
ICAgICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICAgICAsIG1fc3Vz
cGVuZGVkKGZhbHNlKQorICAgICAgICAsIG1fc3RvcHBlZChmYWxzZSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKQorICAgIHsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBBY3RpdmVET01PYmplY3Q6OmNvbnRl
eHREZXN0cm95ZWQoKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCkKKyAgICB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9zdXNwZW5kZWQg
PSB0cnVlOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCkKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9zdXNwZW5kZWQgPSBmYWxz
ZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKQorICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3N0b3BwZWQgPSB0cnVlOworICAgIH0K
KyAgICBib29sIGNhbkludm9rZUNhbGxiYWNrKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgcmV0dXJuICghbV9zdXNwZW5kZWQgJiYgIW1fc3Rv
cHBlZCk7CisgICAgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgfQorICAgIE11dGV4JiBtdXRleCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0KKworcHJpdmF0
ZToKKyAgICBNdXRleCBtX211dGV4OworICAgIGJvb2wgbV9zdXNwZW5kZWQ7CisgICAgYm9vbCBt
X3N0b3BwZWQ7Cit9OworCitzdGF0aWMgdm9pZCBkZXN0cm95T25Db250ZXh0VGhyZWFkKFBhc3NP
d25QdHI8QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsPiBpbXBsKQoreworICAgIE93blB0cjxB
Y3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw+IGltcGxPd25QdHIgPSBpbXBsOworCisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGltcGxPd25QdHItPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoaW1wbE93blB0ci0+bXV0ZXgoKSk7
CisgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQorICAgICAg
ICBjb250ZXh0LT5wb3N0VGFzayhEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRlKGlt
cGxPd25QdHIucmVsZWFzZSgpKSk7Cit9CisKK0FjdGl2ZURPTUNhbGxiYWNrOjpBY3RpdmVET01D
YWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogbV9pbXBsKG5l
dyBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwoY29udGV4dCkpCit7CisgICAgQVNTRVJUKGNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKK30KKworQWN0aXZlRE9NQ2FsbGJhY2s6On5BY3Rp
dmVET01DYWxsYmFjaygpCit7CisgICAgZGVzdHJveU9uQ29udGV4dFRocmVhZChtX2ltcGwucmVs
ZWFzZSgpKTsKK30KKworYm9vbCBBY3RpdmVET01DYWxsYmFjazo6Y2FuSW52b2tlQ2FsbGJhY2so
KSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwtPmNhbkludm9rZUNhbGxiYWNrKCk7Cit9CisK
K1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFjdGl2ZURPTUNhbGxiYWNrOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFjdGl2ZURPTUNhbGxiYWNrX2gKKyNkZWZpbmUgQWN0aXZl
RE9NQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKKy8vIEEgY2xhc3MgdGhhdCBhbGxvd3MgY2FsbGJhY2tzIHRv
IGJlaGF2ZSBsaWtlIEFjdGl2ZURPTU9iamVjdHMsIGFuZCBhbHNvCisvLyBiZSBkZXN0cm95ZWQg
b24gdGhlIGNvbnRleHQgdGhyZWFkIG9yIGFueSBvdGhlciB0aHJlYWQuCitjbGFzcyBBY3RpdmVE
T01DYWxsYmFjayB7CitwdWJsaWM6CisgICAgQWN0aXZlRE9NQ2FsbGJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCk7CisgICAgfkFjdGl2ZURPTUNhbGxiYWNrKCk7CisKKyAgICBi
b29sIGNhbkludm9rZUNhbGxiYWNrKCkgY29uc3Q7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFRo
ZSBBY3RpdmVET01PYmplY3QgcGFydCBvZiB0aGUgY2FsbGJhY2suCisgICAgT3duUHRyPEFjdGl2
ZURPTU9iamVjdENhbGxiYWNrSW1wbD4gbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQWN0aXZlRE9NQ2FsbGJhY2tfaApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIyICs0MSwy
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wg
SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBl
cnJvcikKK2Jvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIFNRTEVycm9yKiBlcnJvcikKIHsKLSAgICBBU1NFUlQo
bV9kYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFtX2RhdGEgfHwgIWNhbklu
dm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmUHRyPEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpTQzo6SlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lzb2xhdGVkV29ybGQu
Z2V0KCkpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lzb2xhdGVkV29ybGQuZ2V0
KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gaWYg
d2UgY2Fubm90IGludm9rZSB0aGUgY2FsbGJhY2ssIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24K
KyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFy
Z3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShl
eGVjKSwgdHJhbnNhY3Rpb24pKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0
ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyksIGVycm9yKSk7CisgICAgYXJncy5hcHBl
bmQodG9KUyhleGVjLCB0cmFuc2FjdGlvbikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywg
ZXJyb3IpKTsKIAogICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24p
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiA2MTYwOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBK
U1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYWxsYmFjayA9IEpTU1FMU3RhdGVtZW50
Q2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGNhbGxiYWNrID0gSlNTUUxT
dGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwpAQCAtMTA2LDcgKzEwNiw3IEBAIEpTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgZXJy
b3JDYWxsYmFjayA9IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSkpOwogICAgIH0K
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA2MTYwOSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIwNTUs
MTIgKzIwNTUsMTMgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICAjIC0gQWRkIGRl
ZmF1bHQgaGVhZGVyIHRlbXBsYXRlIGFuZCBoZWFkZXIgcHJvdGVjdGlvbgogICAgIHB1c2goQGhl
YWRlckNvbnRlbnRIZWFkZXIsIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUp
KTsKIAorICAgICRoZWFkZXJJbmNsdWRlc3siQWN0aXZlRE9NQ2FsbGJhY2suaCJ9ID0gMTsKICAg
ICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CiAgICAgJGhlYWRlcklu
Y2x1ZGVzeyJKU0NhbGxiYWNrRGF0YS5oIn0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRlc3siPHd0
Zi9Gb3J3YXJkLmg+In0gPSAxOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNw
YWNlIFdlYkNvcmUge1xuXG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNs
YXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1YmxpYyAkaW50ZXJmYWNlTmFtZSwgcHVibGlj
IEFjdGl2ZURPTUNhbGxiYWNrIHtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJs
aWM6XG4iKTsKIAogICAgICMgVGhlIHN0YXRpYyBjcmVhdGUoKSBtZXRob2QuCkBAIC0yMDgzLDEw
ICsyMDg0LDEzIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkiKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
ICIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRp
dmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIC4gIigiKTsKKworICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAg
ICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIg
IiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZl
VHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAog
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgfQpAQCAt
MjEwMCw3ICsyMTA0LDYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICAjIFByaXZh
dGUgbWVtYmVycwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDYWxsYmFja0RhdGEq
IG1fZGF0YTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgUmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKQEAgLTIxMzAsMTYg
KzIxMzMsMTYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogCiAgICAgIyBD
b25zdHJ1Y3RvcgogICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNz
TmFtZX0oSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJh
Y2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9kYXRhKG5l
dyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSlcbiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+d29ybGQo
KSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKVxuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CiAKICAgICAjIERlc3RydWN0b3IKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NO
YW1lfTo6fiR7Y2xhc3NOYW1lfSgpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0
VGFzayhEZWxldGVDYWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7XG4iKTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiNpZm5kZWYgTkRFQlVHXG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBtX2RhdGEgPSAwO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5k
aWZcbiIpOwpAQCAtMjE1NywyMSArMjE2MCwyMiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxl
bWVudGF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlw
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4g
IiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIg
JHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOwogCisg
ICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0g
KEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50
eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAuIEdldE5h
dGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAg
ICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBh
cmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
KVxuIik7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQobV9kYXRhKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGNvbnRleHQpO1xuXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghbV9kYXRhIHx8ICFjYW5JbnZv
a2VDYWxsYmFjaygpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtX2lz
b2xhdGVkV29ybGQuZ2V0KCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVj
dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZ2xvYmFsT2JqZWN0KVxu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7
XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7XG4iKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNjE2MDkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTI2LDI1ICsyMTI2LDI1IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAg
IyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
IEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpKTsKIAotICAgIGlmICgiJGlu
dGVyZmFjZU5hbWUuaCIgbHQgIldvcmxkQ29udGV4dEhhbmRsZS5oIikgewotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5oXCJcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUu
aFwiXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2lu
Y2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5hbWUuaFwiXG4iKTsKLSAgICB9Ci0gICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2OC5oPlxuIik7Ci0gICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPlxuIik7CisgICAgbXkgQHVuc29y
dGVkSW5jbHVkZXMgPSAoKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVzLCAiI2luY2x1ZGUg
XCJBY3RpdmVET01DYWxsYmFjay5oXCIiKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVzLCAi
I2luY2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5oXCIiKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1
ZGVzLCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiIik7CisgICAgcHVzaChAdW5z
b3J0ZWRJbmNsdWRlcywgIiNpbmNsdWRlIDx2OC5oPiIpOworICAgIHB1c2goQHVuc29ydGVkSW5j
bHVkZXMsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCBqb2luKCJcbiIsIHNvcnQgQHVuc29ydGVkSW5jbHVkZXMpKTsKICAgICAKLSAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwotICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1l
IHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcblxubmFtZXNwYWNlIFdlYkNvcmUg
e1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05h
bWUgOiBwdWJsaWMgJGludGVyZmFjZU5hbWUsIHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7XG4i
KTsKIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpKSk7CisgICAgICAgIEFT
U0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2NsYXNzTmFtZX0o
dmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH4ke2Ns
YXNzTmFtZX0oKTsKQEAgLTIxNjIsMTEgKzIxNjIsMTMgQEAgRU5ECiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmly
dHVhbCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCoiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmly
dHVhbCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CisKKyAgICAg
ICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIgLiBHZXRO
YXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUp
OworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3Mo
JHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9Ci0KKyAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yMTc0LDcgKzIxNzYsNyBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7
CiAKIHByaXZhdGU6Ci0gICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7Cisg
ICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKICAg
ICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CkBAIC0yMjA2LDggKzIyMDgsOSBA
QCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD5cblxuIik7CiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCA8PEVORCk7Ci0ke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2ODo6TG9jYWw8djg6Ok9iamVj
dD4gY2FsbGJhY2spCi0gICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcoY2FsbGJhY2spKQorJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAg
IDogQWN0aXZlRE9NQ2FsbGJhY2soY29udGV4dCkKKyAgICAsIG1fY2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX3dvcmxkQ29udGV4dChV
c2VDdXJyZW50V29ybGQpCiB7CiB9CkBAIC0yMjMxLDIyICsyMjM0LDI2IEBAIEVORAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPnR5cGUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXRO
YXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtj
bGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4iIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlw
ZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigi
KTsKIAorICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkg
JHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRw
YXJhbS0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIsICIgLiBH
ZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5h
bWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFj
a3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigiLCAiLCBAYXJncykpOwogCiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICghY2FuSW52b2tlQ2FsbGJhY2soKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTtcblxuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENv
bnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4
Q29udGV4dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENv
bnRleHQpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodjhD
b250ZXh0LklzRW1wdHkoKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpO1xuXG4iKTsKIAotICAg
ICAgICAgICAgbXkgQGFyZ3ZzID0gKCk7CisgICAgICAgICAgICBAYXJncyA9ICgpOwogICAgICAg
ICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBteSAk
cGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke3BhcmFtTmFtZX1IYW5kbGUgPSB0b1Y4
KCR7cGFyYW1OYW1lfSk7XG4iKTsKQEAgLTIyNTQsMTQgKzIyNjEsMTQgQEAgRU5ECiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIENSQVNIKCk7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBhcmd2cywgIiAgICAgICAgJHtwYXJhbU5hbWV9SGFuZGxlIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAYXJncywgIiAgICAgICAgJHtwYXJhbU5hbWV9SGFuZGxlIik7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIGpvaW4oIixcbiIsIEBhcmd2cykpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIGpvaW4oIixcbiIsIEBhcmdzKSk7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuICAgIH07XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Ym9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgIiAu
IHNjYWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9r
ZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBjYWxs
YmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmNwcAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNSBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU1Rlc3RDYWxsYmFj
azo6SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQotICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywg
Z2xvYmFsT2JqZWN0KSkKKyAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGdsb2JhbE9iamVjdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShj
YWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKICAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmpl
Y3QtPndvcmxkKCkpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZ2xvYmFsT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiB7CiB9CiAKIEpTVGVzdENhbGxiYWNrOjp+SlNU
ZXN0Q2FsbGJhY2soKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
RGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOworICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1f
ZGF0YSkpOwogI2lmbmRlZiBOREVCVUcKICAgICBtX2RhdGEgPSAwOwogI2VuZGlmCkBAIC01MSwx
NiArNTEsMTYgQEAgSlNUZXN0Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiAKIC8vIEZ1bmN0
aW9ucwogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQorYm9vbCBK
U1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJh
bSkKIHsKLSAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYg
KCFtX2RhdGEgfHwgIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3Js
ZC5nZXQoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lzb2xhdGVkV29ybGQuZ2V0
KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAt
NzMsMTYgKzczLDE2IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAK
ICAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Q2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCitib29sIEpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25z
dCBTdHJpbmcmIHN0ckFyZykKIHsKLSAgICBBU1NFUlQobV9kYXRhKTsKLSAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgaWYgKCFtX2RhdGEgfHwgIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMp
OwogCiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQs
IG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2lz
b2xhdGVkV29ybGQuZ2V0KCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5oCShyZXZpc2lvbiA2MTYwOSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEz
ICsyMywxNCBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiQWN0aXZlRE9N
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgogI2luY2x1ZGUgIlRlc3RD
YWxsYmFjay5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSlNUZXN0Q2FsbGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsKK2NsYXNz
IEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjaywgcHVibGljIEFjdGl2ZURPTUNh
bGxiYWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1Rlc3RDYWxsYmFjaz4g
Y3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogICAgIHsKQEAgLTM5LDE3ICs0MCwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
SlNUZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MxKiBj
bGFzczFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcm
IHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxi
YWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczMq
IGNsYXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7
CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3Mx
UGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIq
IGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09NUElMRV9BU1NFUlQo
ZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKENsYXNz
MyogY2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKENsYXNzNSog
Y2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRlOgogICAgIEpTVGVz
dENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwog
CiAgICAgSlNDYWxsYmFja0RhdGEqIG1fZGF0YTsKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxk
PiBtX2lzb2xhdGVkV29ybGQ7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNw
cAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1WOFRlc3RDYWxsYmFjazo6VjhUZXN0Q2FsbGJhY2sodjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrKQotICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKK1Y4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxs
YmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01DYWxsYmFjayhjb250ZXh0KQorICAgICwgbV9j
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKICAgICAs
IG1fd29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKIHsKIH0KQEAgLTQ3LDExICs0OCwxNCBA
QCBWOFRlc3RDYWxsYmFjazo6flY4VGVzdENhbGxiYWNrKCkKIAogLy8gRnVuY3Rpb25zCiAKLWJv
b2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIENsYXNzMSogY2xhc3MxUGFyYW0pCitib29sIFY4VGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNsYXNzMVBhcmFtKQogeworICAg
IGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02OCwxNCArNzIsMTcgQEAgYm9vbCBW
OFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAgIH07CiAKICAgICBib29sIGNh
bGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1f
Y2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQpOworICAgIHJl
dHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJhY2tSZXR1cm5W
YWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAotYm9vbCBWOFRlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpCitib29sIFY4VGVz
dENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBj
b25zdCBTdHJpbmcmIHN0ckFyZykKIHsKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwog
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29u
dGV4dCwgbV93b3JsZENvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENvbnRl
eHQpOwogICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtOTgsNyArMTA1LDcgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xh
c3MyUAogICAgIH07CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAg
ICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0
dXJuVmFsdWUsIGNvbnRleHQpOworICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFj
aywgMiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oCShyZXZpc2lvbiA2MTYwOSkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZm5kZWYgVjhUZXN0Q2FsbGJhY2tfaAog
I2RlZmluZSBWOFRlc3RDYWxsYmFja19oCiAKKyNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5o
IgogI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRs
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CkBAIC0zMCwyNCArMzEsMjcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgewor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgVjhUZXN0Q2FsbGJhY2sgOiBw
dWJsaWMgVGVzdENhbGxiYWNrLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNy
ZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCkp
KTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFY4VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB+VjhUZXN0Q2FsbGJhY2soKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZp
cnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgQ2xhc3MxKiBjbGFzczFQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENs
YXNzMlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczIqIGNsYXNzMlBhcmFtLCBj
b25zdCBTdHJpbmcmIHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1
YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBDbGFzczMqIGNsYXNzM1BhcmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFj
ayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBj
bGFzczZQYXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENs
YXNzMSogY2xhc3MxUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQ
YXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZyk7CisgICAgQ09N
UElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1
cm5UeXBlKENsYXNzMyogY2xhc3MzUGFyYW0pOworICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxi
YWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogCiBwcml2YXRl
OgotICAgIFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pik7CisgICAgVjhUZXN0
Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwogICAgIFdvcmxk
Q29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxMSArNDMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFY4U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiti
b29sIFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiB7CisgICAgaWYgKCFjYW5JbnZva2VD
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRv
VjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IG1fd29ybGRDb250ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY1LDE1ICs2OCwxMiBAQCBib29sIFY4U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjazo6aGFuZGxlCiAgICAgICAgIGVycm9ySGFuZGxlCiAgICAgfTsKIAotICAgIC8v
IFByb3RlY3QgdGhlIGNvbnRleHQgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHByb3RlY3Rvcihjb250ZXh0KTsKLQogICAgIGJv
b2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIC8vIFN0ZXAgNjogSWYgdGhlIGVy
cm9yIGNhbGxiYWNrIHJldHVybnMgZmFsc2UsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dAogICAg
IC8vIHN0YXRlbWVudCwgaWYgYW55LCBvciBvbnRvIHRoZSBuZXh0IG92ZXJhbGwgc3RlcCBvdGhl
cndpc2UuIE90aGVyd2lzZSwKICAgICAvLyB0aGUgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1
cm4gZmFsc2UsIG9yIHRoZXJlIHdhcyBubyBlcnJvciBjYWxsYmFjay4KICAgICAvLyBKdW1wIHRv
IHRoZSBsYXN0IHN0ZXAgaW4gdGhlIG92ZXJhbGwgc3RlcHMuCi0gICAgcmV0dXJuIGludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIGNvbnRleHQp
IHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7CisgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkgfHwgY2FsbGJhY2tSZXR1cm5WYWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNCwxMiArODA0LDEzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkQKICAgICBpZiAoIVY4Qmlu
ZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAt
PmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRp
b25DYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CiAgICAgICAgIGlmICgh
YXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNh
bGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERh
dGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA2MTYwOSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFi
YXNlOjpjaGFuZ2UKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNhbGxi
YWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7CisgICAgICAg
IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwpAQCAtNzIsNyArNzIsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJnc1szXS0+
SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hf
RVJSKTsKIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s6OmNyZWF0ZShhcmdzWzNdKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2s7CkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVRyYW5zCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
UmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBSZWZQdHI8VjhTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAgICAgUmVmUHRyPFY4U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMSAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkpIHsKICAgICAgICAgaWYgKCFhcmdz
WzFdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIpOwogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhT
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8VjhDdXN0b21Wb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VTeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDYxNjA5KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MywxMiArNTMsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2VTeW5j
OjpjaAogCiAgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSA9IFY4RGF0YWJhc2VTeW5jOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVm
UHRyPFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrOwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMikgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAg
Y2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7
CisgICAgICAgIGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNzgsNyArNzksOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVRyYW5zCiAKICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlID0gVjhEYXRhYmFz
ZVN5bmM6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgUmVmUHRyPFY4U1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
azo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgUmVmUHRy
PFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNh
bGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHksIGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biA2MTYwOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyMiArODksMjIgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4U1FMVHJhbnNhY3Rpb246OgogCiAgICAgU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uID0gVjhTUUxUcmFuc2FjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyICYmICFpc1VuZGVmaW5lZE9y
TnVsbChhcmdzWzJdKSkgewogICAgICAgICBpZiAoIWFyZ3NbMl0tPklzT2JqZWN0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIGNh
bGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAg
ICBjYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMgJiYg
IWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbM10pKSB7CiAgICAgICAgIGlmICghYXJnc1szXS0+SXNP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJS
KTsKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6
Y3JlYXRlKGFyZ3NbM10pOworICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAg
ICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9u
IDYxNjA5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDEyICsxNTcsMTMgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpIHsKICAgICAgICAgaWYg
KCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQ
RV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNl
Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4
RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtMTg1LDEyICsxODYsMTMg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6bwogCiAgICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUp
IHsKICAgICAgICAgaWYgKCFhcmdzWzRdLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAgIGNyZWF0aW9uQ2FsbGJh
Y2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0sIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRl
eDogV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9BY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiA2MTYwOSkKKysrIFdlYkNvcmUvZG9t
L0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIyICszNywxNCBAQCBB
Y3RpdmVET01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdChTY3JpcHRFCiAgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fcGVuZGluZ0Fj
dGl2aXR5Q291bnQoMCkKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBBU1NFUlQoKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFpblRocmVhZCgpKQotICAg
ICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAmJiBj
dXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCktPnRocmVhZCgpLT50aHJlYWRJRCgpKSk7Ci0jZW5kaWYKLQorICAgIEFT
U0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRBY3RpdmVET01PYmplY3QodGhpcywgdXBj
YXN0UG9pbnRlcik7CiB9CiAKIEFjdGl2ZURPTU9iamVjdDo6fkFjdGl2ZURPTU9iamVjdCgpCiB7
CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgewotI2lmIEVOQUJMRShXT1JLRVJT
KQotICAgICAgICBBU1NFUlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgp
ICYmIGlzTWFpblRocmVhZCgpKQotICAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0
PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT50aHJlYWQoKS0+dGhy
ZWFkSUQoKSkpOwotI2VuZGlmCi0KKyAgICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmRlc3Ryb3llZEFjdGl2ZURPTU9iamVjdCh0aGlzKTsKICAgICB9CiB9CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDYxNjA5KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDcgKzc1OSw3IEBAIFZlY3RvcjxTdHJpbmc+IERh
dGFiYXNlOjpwZXJmb3JtR2V0VGFibGUKIAogdm9pZCBEYXRhYmFzZTo6cGVyZm9ybUNyZWF0aW9u
Q2FsbGJhY2soKQogewotICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsKKyAgICBtX2NyZWF0aW9uQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KHRoaXMpOwogfQogCiBTUUxUcmFuc2FjdGlvbkNsaWVudCogRGF0YWJhc2U6
OnRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJh
Y2suaAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlU3luYzsKLWNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxEYXRhYmFzZUNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0
YWJhc2VDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRGF0YWJhc2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhbmRs
ZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhYmFzZVN5bmMqKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGhhbmRsZUV2ZW50KERhdGFiYXNlKikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChEYXRhYmFzZVN5bmMqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50LmNwcAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
U3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDkgKzE3MCw5IEBAIGJvb2wgU1FM
U3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHIKICAgICAvLyBiZWNhdXNlIHRoZW4gd2Ug
bmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KICAgICBpZiAo
bV9lcnJvcikgewogICAgICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAg
ICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZl
bnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJh
bnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOworICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0
ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQo
KSk7CiAgICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENhbGxiYWNrKQotICAgICAgICBjYWxsYmFj
a0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX3Jlc3Vs
dFNldC5nZXQoKSk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0ZW1lbnRDYWxsYmFj
ay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIC8v
IE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAg
ICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3Rh
dGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50Q2FsbGJhY2suaAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3Rh
dGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDEzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNz
IFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMUmVzdWx0U2V0OwogCiBjbGFzcyBTUUxTdGF0ZW1l
bnRDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudENhbGxiYWNr
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRy
YW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVF
dmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCopID0gMDsKIH07CiAKIH0KSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24g
NjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBj
bGFzcyBTUUxFcnJvcjsKIAogY2xhc3MgU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1Ymxp
YyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlv
biosIFNRTEVycm9yKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFu
c2FjdGlvbiosIFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uY3BwCShyZXZpc2lvbiA2MTYwOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIFNRTFRy
YW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiAKICAgICBpZiAobV9jYWxsYmFjaykgewog
ICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgc2hvdWxkRGVsaXZl
ckVycm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVycm9y
Q2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1fZXhl
Y3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgc2hvdWxkRGVsaXZl
ckVycm9yQ2FsbGJhY2sgPSB0cnVlOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0g
SWYgZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdAogICAgIC8vIGVy
cm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICBpZiAobV9lcnJv
ckNhbGxiYWNrKQotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJh
c2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsK
KyAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3Iu
Z2V0KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVy
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGlu
ZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aAkocmV2aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNh
Y3Rpb247CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKikgPSAwOwogfTsKIAogfQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2
aXNpb24gNjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxFcnJvcjsK
IAogY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTUUxFcnJvciopID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3IqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24g
NjE2MDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE2IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
IGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mg
c2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0
aHJlYWQuCiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uU3luYyopID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb25TeW5jKikgPSAwOwog
fTsKIAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE2MTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNi0yMiAgRHVtaXRydSBE
YW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSBhbGwgREIgY2FsbGJhY2tzIHJ1biBpbiB0
aGUgY29ycmVjdCBjb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICAqIHN0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3Rv
cmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbDogQWRkZWQu
CisgICAgICAgICogc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29y
cmVjdC1jb250ZXh0LWhlbHBlci1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtb3V0cHV0
LWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNr
cy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC10ZXN0LWZyYW1lLmh0bWw6IEFkZGVkLgor
CiAyMDEwLTA2LTIyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NhbGxi
YWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0
LWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACisKKworLS0tLS0tLS0KK0ZyYW1lOiAnb3V0cHV0
RnJhbWUnCistLS0tLS0tLQorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgYWxsIERCIGNhbGxiYWNrcyBh
cmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IHRoZXkgd2VyZSBjcmVhdGVkLCByYXRoZXIgdGhhbiB0
aGUgY29udGV4dCB3aGVyZSB0aGUgREIgaGFuZGxlIHdhcyBjcmVhdGVkLgorUEFTUzogVGhlIHRy
YW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1BB
U1M6IFRoZSBzdGF0ZW1lbnQgc3VjY2VzcyBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3Jy
ZWN0IGNvbnRleHQuCitQQVNTOiBUaGUgc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIHdhcyBjYWxs
ZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBlcnJvciBj
YWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitQQVNTOiBUaGUgdHJh
bnNhY3Rpb24gc3VjY2VzcyBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRl
eHQuCitQQVNTOiBUaGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29y
cmVjdCBjb250ZXh0LgorUEFTUzogVGhlIHN0YXRlbWVudCBzdWNjZXNzIGNhbGxiYWNrIHdhcyBj
YWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1BBU1M6IFRoZSBzdGF0ZW1lbnQgZXJyb3Ig
Y2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUEFTUzogVGhlIHRy
YW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4
dC4KK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBzdWNjZXNzIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4g
dGhlIGNvcnJlY3QgY29udGV4dC4KKworCistLS0tLS0tLQorRnJhbWU6ICd0ZXN0RnJhbWUnCist
LS0tLS0tLQorCisKKy0tLS0tLS0tCitGcmFtZTogJ2hlbHBlckZyYW1lJworLS0tLS0tLS0KKwpJ
bmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0
LWNvbnRleHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NhbGxiYWNr
cy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBzZXR1cEFuZFJ1bkZyYW1lc1Rlc3QoKQoreworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuaW5uZXJUZXh0ID0gIiI7CisgICAgdG9wLmZyYW1lc1sxXS5ydW5UZXN0KCk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxmcmFtZXNldCBvbmxvYWQ9InNldHVwQW5kUnVuRnJhbWVzVGVzdCgp
Ij4KKzxmcmFtZSBuYW1lPSJvdXRwdXRGcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2FsbGJhY2tzLWFy
ZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sIj4KKzxmcmFtZSBu
YW1lPSJ0ZXN0RnJhbWUiIHNyYz0icmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNv
cnJlY3QtY29udGV4dC10ZXN0LWZyYW1lLmh0bWwiPgorPGZyYW1lIG5hbWU9ImhlbHBlckZyYW1l
IiBzcmM9InJlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQt
aGVscGVyLWZyYW1lLmh0bWwiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29u
dGV4dC1oZWxwZXItZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtaGVscGVy
LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNl
cy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtaGVscGVyLWZyYW1lLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
PgordmFyIGRvbmUgPSBmYWxzZTsKKworZnVuY3Rpb24gbG9nQ2FsbGJhY2soY2FsbGJhY2tUeXBl
KQoreworICAgIHRvcC5mcmFtZXNbMF0uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KS5pbm5lclRleHQgKz0gIlBBU1M6IFRoZSAiICsgY2FsbGJhY2tUeXBlICsgIiBjYWxsYmFjayB3
YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuXG4iCit9CisKK2Z1bmN0aW9uIGZhaWxp
bmdUcmFuc2FjdGlvbkNhbGxiYWNrKHR4KQoreworICAgIGxvZ0NhbGxiYWNrKCJ0cmFuc2FjdGlv
biIpOworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3Qg
KEZvbyBJTlQpIiwgW10sIHN1Y2Nlc3NTdGF0ZW1lbnRDYWxsYmFjaywgbnVsbCk7CisgICAgdHgu
ZXhlY3V0ZVNxbCgiQkFEIFNRTCBTVEFURU1FTlQiLCBbXSwgbnVsbCwgZXJyb3JTdGF0ZW1lbnRD
YWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGVycm9yU3RhdGVtZW50Q2FsbGJhY2sodHgsIGVycm9y
KQoreworICAgIGxvZ0NhbGxiYWNrKCJzdGF0ZW1lbnQgZXJyb3IiKTsKKyAgICByZXR1cm4gdHJ1
ZTsgLy8gZmFpbCB0aGUgdHJhbnNhY3Rpb24KK30KKworZnVuY3Rpb24gc3VjY2Vzc1N0YXRlbWVu
dENhbGxiYWNrKHR4LCBkYXRhKQoreworICAgIGxvZ0NhbGxiYWNrKCJzdGF0ZW1lbnQgc3VjY2Vz
cyIpOworfQorCitmdW5jdGlvbiBlcnJvclRyYW5zYWN0aW9uQ2FsbGJhY2soZXJyb3IpCit7Cisg
ICAgbG9nQ2FsbGJhY2soInRyYW5zYWN0aW9uIGVycm9yIik7Cit9CisKK2Z1bmN0aW9uIHN1Y2Nl
c3NUcmFuc2FjdGlvbkNhbGxiYWNrKCkKK3sKKyAgICBsb2dDYWxsYmFjaygidHJhbnNhY3Rpb24g
c3VjY2VzcyIpOworICAgIGlmICghZG9uZSkKKyAgICAgICAgdGVzdFN0YXJ0VHJhbnNhY3Rpb25z
SW5UaGlzQ29udGV4dCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdFN0YXJ0VHJhbnNhY3Rpb25zSW5UaGlzQ29u
dGV4dCgpCit7CisgICAgZG9uZSA9IHRydWU7CisKKyAgICAvLyB0ZXN0IHRoYXQgYWxsIGNhbGxi
YWNrcyBhcmUgZXhlY3V0ZWQgaW4gdGhpcyBjb250ZXh0LCBldmVuIHRob3VnaCAnZGInIGlzIGRl
ZmluZWQgaW4gYW5vdGhlciBjb250ZXh0CisgICAgdG9wLmZyYW1lc1sxXS5kYi50cmFuc2FjdGlv
bihmYWlsaW5nVHJhbnNhY3Rpb25DYWxsYmFjaywgZXJyb3JUcmFuc2FjdGlvbkNhbGxiYWNrKTsK
KyAgICB0b3AuZnJhbWVzWzFdLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7IH0sIG51bGws
IHN1Y2Nlc3NUcmFuc2FjdGlvbkNhbGxiYWNrKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNl
cy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtb3V0cHV0LWZyYW1lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tz
LWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwIEBACis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+CitUaGlzIHRlc3Qg
dGVzdHMgdGhhdCBhbGwgREIgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgdGhl
eSB3ZXJlIGNyZWF0ZWQsIHJhdGhlciB0aGFuIHRoZSBjb250ZXh0IHdoZXJlIHRoZSBEQiBoYW5k
bGUgd2FzIGNyZWF0ZWQuCis8cHJlIGlkPSJjb25zb2xlIj4KK0ZBSUxVUkU6IHRlc3QgZGlkbid0
IHJ1bi4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXRlc3Qt
ZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9j
YWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtdGVzdC1mcmFtZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFy
ZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXRlc3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJkYXRhYmFzZS1j
b21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVdpdGhT
dWZmaXgoIkNhbGxiYWNrc0FyZUNhbGxlZEluQ29ycmVjdENvbnRleHRUZXN0IiwgIjEuMCIsICIi
LCAxKTsKKworZnVuY3Rpb24gbG9nQ2FsbGJhY2soY2FsbGJhY2tUeXBlKQoreworICAgIHRvcC5m
cmFtZXNbMF0uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0g
IkZBSUw6IFRoZSAiICsgY2FsbGJhY2tUeXBlICsgIiBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRo
ZSB3cm9uZyBjb250ZXh0LlxuIgorfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICAvLyB0
ZXN0IHRoYXQgdHJhbnNhY3Rpb24gY2FsbGJhY2tzIGRlZmluZWQgaW4gYW5vdGhlciBmcmFtZSBh
cmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmcmFtZQorICAgIGRiLnRyYW5zYWN0
aW9uKHRvcC5mcmFtZXNbMl0uZmFpbGluZ1RyYW5zYWN0aW9uQ2FsbGJhY2ssIHRvcC5mcmFtZXNb
Ml0uZXJyb3JUcmFuc2FjdGlvbkNhbGxiYWNrKTsKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeyB9LCBudWxsLCB0b3AuZnJhbWVzWzJdLnN1Y2Nlc3NUcmFuc2FjdGlvbkNhbGxiYWNr
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="46165"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59751</attachid>
            <date>2010-06-25 03:03:00 -0700</date>
            <delta_ts>2010-07-30 18:43:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>80529</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTAtMDYtMjUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIGFsbCBjYWxsYmFja3MgaW50byBBY3RpdmVET01PYmplY3RzIGFuZCBjcmVhdGUgY2Fs
bGJhY2tzIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDExMgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMv
c3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbAorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZUNvbW1vbi52c3Byb3BzOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzazo6RGVzdHJveU9uQ29udGV4dFRocmVh
ZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpB
Y3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9N
T2JqZWN0Q2FsbGJhY2tJbXBsOjpjb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OnN1c3BlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpyZXN1bWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6Y2FuSW52b2tlQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1w
bDo6bXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveU9uQ29udGV4dFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01DYWxsYmFjazo6QWN0aXZlRE9NQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NQ2FsbGJhY2s6On5BY3RpdmVET01DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01DYWxsYmFjazo6Y2FuSW52b2tlQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NQ2FsbGJhY2s6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
azo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25D
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RDYWxsYmFjazo6VjhUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpW
OFRlc3RDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvdzo6b3BlbkRhdGFiYXNlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RGF0YWJh
c2U6OmNoYW5nZVZlcnNpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9u
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWxDYWxsYmFjayk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luY0NhbGxiYWNr
KToKKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZURPTU9iamVjdDo6QWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
dGl2ZURPTU9iamVjdDo6fkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgICogc3RvcmFnZS9EYXRh
YmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNr
OjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmg6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFj
ayk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAq
IHN0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaDoKKwogMjAxMC0wNi0yNSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7
V0VCQ09SRV9ESVJ9IgogICAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5IgorICAgICIk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nZW5lcmljIgogICAgICIke1dFQkNPUkVfRElSfS9iaW5k
aW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdlIgogICAgICIke1dFQkNPUkVfRElS
fS9icmlkZ2UvYyIKQEAgLTY4LDYgKzY5LDcgQEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RP
UklFUwogKQogCiBTRVQoV2ViQ29yZV9JRExfSU5DTFVERVMKKyAgICBiaW5kaW5ncy9nZW5lcmlj
CiAgICAgYmluZGluZ3MvanMKICAgICBjc3MKICAgICBkb20KQEAgLTU0Nyw2ICs1NDksOCBAQCBT
RVQoV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBiaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5j
cHAKIAorICAgIGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwCisKICAgICBi
aW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuY3BwCiAgICAgYmluZGluZ3MvanMvRE9N
V3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKSW5kZXg6
IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIFZQQVRIID0gXAogICAg
ICQoV2ViQ29yZSkgXAorICAgICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJChX
ZWJDb3JlKS9iaW5kaW5ncy9qcyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9vYmpjIFwKICAg
ICAkKFdlYkNvcmUpL2NzcyBcCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCB3ZWJjb3Jl
X2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdCBcCiAJLUkkKHNy
Y2RpcikvV2ViQ29yZSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5IFwKKwkt
SSQoc3JjZGlyKS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMgXAogCS1JJChzcmNkaXIpL1dlYkNv
cmUvYmluZGluZ3MvanMgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdCBc
CiAJLUkkKHNyY2RpcikvV2ViQ29yZS9icmlkZ2UgXApAQCAtMzg0LDYgKzM4NSw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZUhlYWRlckNvbnRhaW5lci5oIFwKIAlXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlUm93LmNwcCBcCiAJV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZVJvdy5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suY3Bw
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0RPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYxODQxKQor
KysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw2ICs0ODQsOCBA
QAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmplY3RXaW4u
Y3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3dpbi9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcldpbi5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3d4L0FjY2Vzc2liaWxp
dHlPYmplY3RXeC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9N
Q2FsbGJhY2suY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNh
bGxiYWNrLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ0RPTVdpbmRv
dy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdFbGVtZW50LmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgnLApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw2ICsxNzgsNyBAQCBpbmNsdWRlKFdlYkNvcmUucHJpKQogSU5DTFVERVBBVEggPSBcCiAg
ICAgJCRQV0QgXAogICAgICQkUFdEL2FjY2Vzc2liaWxpdHkgXAorICAgICQkUFdEL2JpbmRpbmdz
L2dlbmVyaWMgXAogICAgICQkUFdEL2JpbmRpbmdzL2pzIFwKICAgICAkJFBXRC9icmlkZ2UgXAog
ICAgICQkUFdEL2JyaWRnZS9jIFwKQEAgLTI3Myw2ICsyNzQsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAgXCAg
ICAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAgXCAgICAKICAg
ICBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIFwKKyAgICBiaW5kaW5ncy9nZW5lcmlj
L0FjdGl2ZURPTUNhbGxiYWNrLmNwcCBcCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNw
cCBcCiAgICAgYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcCBcCiAgICAgYmlu
ZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcCBcCkBAIC0xMDU2LDYgKzEwNTgsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRh
aW5lci5oIFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIFwKICAg
ICBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBcCisgICAgYmluZGluZ3MvZ2VuZXJpYy9B
Y3RpdmVET01DYWxsYmFjay5oIFwKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oIFwKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCBcCiAgICAgYmluZGlu
Z3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3NzgzLDYgKzM3NzgzLDE4IEBA
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQorIAkJCTxGaWx0ZXINCisJCQkJTmFtZT0iZ2VuZXJpYyIN
CisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xnZW5l
cmljXEFjdGl2ZURPTUNhbGxiYWNrLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcZ2VuZXJpY1xBY3RpdmVET01DYWxs
YmFjay5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0ZpbHRlcj4NCiAJCQk8Rmls
dGVyDQogCQkJCU5hbWU9ImpzIg0KIAkJCQk+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlQ29tbW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTcs
NyArNyw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikuLiZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cYWNjZXNzaWJpbGl0eSZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
Li5cYWNjZXNzaWJpbGl0eVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJyaWRnZSZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cYnJpZGdlXGMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGJyaWRnZVxqc2MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGNzcyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cZWRpdGluZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cmVuZGVyaW5nJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxyZW5kZXJpbmdcc3R5bGUmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGJpbmRpbmdzXGpzJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxkb20mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGRvbVxkZWZhdWx0JnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxoaXN0b3J5JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxodG1sJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxodG1sXGNhbnZhcyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5caW5zcGVjdG9yJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxs
b2FkZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcHBjYWNoZSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5cbG9hZGVyXGFyY2hpdmUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXGxvYWRlclxhcmNoaXZlXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcaWNvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cbm90aWZpY2F0aW9ucyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5ccGFnZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGFn
ZVxhbmltYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2Vcd2luJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxt
b2NrJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxzcWwmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5c
cGxhdGZvcm1cbmV0d29yayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cbmV0
d29ya1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGNmJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljcyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXHRyYW5zZm9ybXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXHRleHQmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXHRl
eHRcdHJhbnNjb2RlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx4bWwmcXVvdDs7JnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcikuLlxwbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbHVnaW5zXHdp
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnXGFuaW1hdGlvbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxz
dmdcZ3JhcGhpY3NcZmlsdGVycyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cc3ZnJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlx3bWwmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN0
b3JhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHdlYnNvY2tldHMmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHdvcmtlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90
OzsmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90Ozsm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxGb3J3YXJkaW5nSGVhZGVycyZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmll
c0RpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJp
ZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XGluY2x1ZGVcc3FsaXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRl
XEphdmFTY3JpcHRDb3JlJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIm
cXVvdDskKFByb2plY3REaXIpLi4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2li
aWxpdHkmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGFjY2Vzc2liaWxpdHlcd2luJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4u
XGJyaWRnZVxjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxicmlkZ2VcanNjJnF1b3Q7OyZx
dW90OyQoUHJvamVjdERpcikuLlxjc3MmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGVkaXRp
bmcmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHJlbmRlcmluZyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccmVuZGVyaW5nXHN0eWxlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxi
aW5kaW5nc1xnZW5lcmljJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxiaW5kaW5nc1xqcyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cZG9tJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
Llxkb21cZGVmYXVsdCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caGlzdG9yeSZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpLi5caHRtbCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5caHRt
bFxjYW52YXMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGluc3BlY3RvciZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cbG9hZGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2Fk
ZXJcYXBwY2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXGxvYWRlclxhcmNoaXZlJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxsb2FkZXJcYXJjaGl2ZVxjZiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpLi5cbG9hZGVyXGljb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXG5v
dGlmaWNhdGlvbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBhZ2UmcXVvdDs7JnF1b3Q7
JChQcm9qZWN0RGlyKS4uXHBhZ2VcYW5pbWF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpciku
LlxwYWdlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm0mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGFuaW1hdGlvbiZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGxhdGZvcm1cbW9jayZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZv
cm1cc3FsJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx3aW4mcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmsmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKS4uXHBsYXRmb3JtXG5ldHdvcmtcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxw
bGF0Zm9ybVxjZiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Mm
cXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnMmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1x0cmFuc2Zvcm1zJnF1b3Q7
OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVx0ZXh0JnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcikuLlxwbGF0Zm9ybVx0ZXh0XHRyYW5zY29kZXImcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KS4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ceG1s
JnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNl
cyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5ccGx1Z2lucyZxdW90OzsmcXVvdDskKFByb2pl
Y3REaXIpLi5ccGx1Z2luc1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xhbmlt
YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKS4uXHN2Z1xncmFwaGljcyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpLi5cc3ZnXGdyYXBoaWNzXGZpbHRlcnMmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHN2ZyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cd21sJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcikuLlxzdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3ZWJz
b2NrZXRzJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlx3b3JrZXJzJnF1b3Q7OyZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcSmF2
YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0
ZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpLi5cRm9yd2FyZGluZ0hl
YWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1
b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQo
V2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHNxbGl0ZSZxdW90OzsmcXVvdDskKFdlYktpdExp
YnJhcmllc0RpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OyIKIAkJUHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM9Il9fV0lOMzJfXztESVNBQkxFXzNEX1JFTkRFUklORztXRUJDT1JFX0NPTlRF
WFRfTUVOVVMiCiAJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQlQcmVjb21waWxlZEhlYWRl
clRocm91Z2g9IldlYkNvcmVQcmVmaXguaCIKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjY1LDYgKzQyNjUs
OCBAQAogCQlCNUI1REM2QTExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVCNURDNjgxMTlC
QjNENTAwMkE4NzkwIC8qIEFic3RyYWN0RGF0YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyog
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CiAJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3OCAv
KiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oICovOyB9OworCQlCNUQzMURGQTExQ0Y2MTBCMDA5RjIyQjQgLyog
QWN0aXZlRE9NQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjVEMzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNr
LmNwcCAqLzsgfTsKKwkJQjVEMzFERkIxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQz
MURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjVE
MzYwMUExMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDM2MDE5MTEyRjhCNTYwMDQ4REVB
OCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi87IH07CiAJCUI2MjdGQjJEMTFBRDc0MzUwMEU5N0I3
MiAvKiBJREJEYXRhYmFzZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzUwQUQyQTkxMUFDMTYzMTAwOENGMkZCIC8qIElEQkRhdGFiYXNlSW1w
bC5jcHAgKi87IH07CiAJCUI2NjkzRUVDMTFBRDYzRTYwMDNGMjc3MCAvKiBJREJPYmplY3RTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjY2OTNF
RTgxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlLmggKi87IH07CkBAIC05Nzg0LDYg
Kzk3ODYsOCBAQAogCQlCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJhY3REYXRhYmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdERhdGFiYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QzExMjM5MTAyQjZDNDYwMDA5NjU3OCAv
KiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1RDMx
REY4MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBY3RpdmVET01DYWxsYmFjay5jcHA7IHBhdGggPSBn
ZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFjdGl2ZURPTUNhbGxiYWNrLmg7IHBhdGggPSBn
ZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUI1RDM2MDE5MTEyRjhCNTYwMDQ4REVBOCAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjY2OTNFRTgxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI2NjkzRUU5MTFBRDYzRTYwMDNGMjc3MCAv
KiBJREJPYmplY3RTdG9yZVJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCT2JqZWN0U3RvcmVSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1Mzc0LDYgKzE1Mzc4LDE1IEBACiAJCQluYW1lID0gY2Y7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwogCQl9OworCQlCNUQzMURGNzExQ0Y2MEU1MDA5RjIyQjQgLyogZ2Vu
ZXJpYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQjVE
MzFERjgxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCAqLywKKwkJCQlC
NUQzMURGOTExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCAqLywKKwkJCSk7
CisJCQluYW1lID0gZ2VuZXJpYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CUI3MzRCMTdGMTE5Qjk4REIwMDY1ODdCRCAvKiB0cmFuc2NvZGVyICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE1Mzg2LDYgKzE1Mzk5LDcgQEAKIAkJQkMx
QTM3OTAwOTdDNkY5NzAwMTlGM0Q4IC8qIGJpbmRpbmdzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUQzMURGNzExQ0Y2MEU1MDA5RjIyQjQgLyogZ2Vu
ZXJpYyAqLywKIAkJCQlCQzFBMzc5MzA5N0M2RkIxMDAxOUYzRDggLyoganMgKi8sCiAJCQkJQkMx
QTM3OTQwOTdDNkZDNDAwMTlGM0Q4IC8qIG9iamMgKi8sCiAJCQkJOTNGOEIzMDUwQTMwMEZFMTAw
RjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8sCkBAIC0xOTUzNyw2ICsxOTU1MSw3IEBACiAJ
CQkJQThFNkE3ODExMUQxNjYxQjAwMzExRjRBIC8qIEhUTUxQYXJzZXJTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4NEQ4MjdDMTFEMzMzRUQwMDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1l
bnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRDRiAv
KiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1RDMxREZCMTFD
RjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0y
MTg1Nyw2ICsyMTg3Miw3IEBACiAJCQkJQjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FM
RXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RTZBNzgyMTFEMTY2MUIwMDMxMUY0
QSAvKiBIVE1MUGFyc2VyU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNFQTM5NDlD
MTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjVEMzFERkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURP
TUNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0
aXZlRE9NQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2suaCIKKworI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZGVz
dHJveU9uQ29udGV4dFRocmVhZChQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1w
bD4pOworCitjbGFzcyBEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
ZXN0cm95T25Db250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NPd25QdHI8QWN0aXZlRE9NT2Jq
ZWN0Q2FsbGJhY2tJbXBsPiBpbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEZXN0cm95
T25Db250ZXh0VGhyZWFkVGFzayhpbXBsKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBkZXN0cm95
T25Db250ZXh0VGhyZWFkKG1faW1wbC5yZWxlYXNlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzayhQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENh
bGxiYWNrSW1wbD4gaW1wbCkKKyAgICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICB7CisgICAgfQor
CisgICAgT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4gbV9pbXBsOworfTsKKwor
Ly8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGFjY2Vzc2VkIG9ubHkgb24gdGhlIGNvbnRl
eHQgdGhyZWFkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVzZSBsb2Nrcy4KK2NsYXNzIEFjdGl2ZURP
TU9iamVjdENhbGxiYWNrSW1wbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgor
ICAgIEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICAg
ICAsIG1fc3VzcGVuZGVkKGZhbHNlKQorICAgICAgICAsIG1fc3RvcHBlZChmYWxzZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKQorICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBBY3RpdmVET01PYmpl
Y3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIGNhblN1c3Bl
bmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCkK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9z
dXNwZW5kZWQgPSB0cnVlOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCkKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9zdXNwZW5k
ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKQorICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3N0b3BwZWQgPSB0cnVl
OworICAgIH0KKyAgICBib29sIGNhbkludm9rZUNhbGxiYWNrKCkKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgcmV0dXJuICghbV9zdXNwZW5kZWQg
JiYgIW1fc3RvcHBlZCk7CisgICAgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgfQorICAgIE11dGV4JiBtdXRleCgpIHsgcmV0dXJuIG1fbXV0ZXg7IH0K
KworcHJpdmF0ZToKKyAgICBNdXRleCBtX211dGV4OworICAgIGJvb2wgbV9zdXNwZW5kZWQ7Cisg
ICAgYm9vbCBtX3N0b3BwZWQ7Cit9OworCitzdGF0aWMgdm9pZCBkZXN0cm95T25Db250ZXh0VGhy
ZWFkKFBhc3NPd25QdHI8QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsPiBpbXBsKQoreworICAg
IE93blB0cjxBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw+IGltcGxPd25QdHIgPSBpbXBsOwor
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGltcGxPd25QdHItPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoaW1wbE93blB0ci0+
bXV0ZXgoKSk7CisgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KQorICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzazo6
Y3JlYXRlKGltcGxPd25QdHIucmVsZWFzZSgpKSk7Cit9CisKK0FjdGl2ZURPTUNhbGxiYWNrOjpB
Y3RpdmVET01DYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDog
bV9pbXBsKG5ldyBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwoY29udGV4dCkpCit7CisgICAg
QVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKK30KKworQWN0aXZlRE9NQ2FsbGJh
Y2s6On5BY3RpdmVET01DYWxsYmFjaygpCit7CisgICAgZGVzdHJveU9uQ29udGV4dFRocmVhZCht
X2ltcGwucmVsZWFzZSgpKTsKK30KKworYm9vbCBBY3RpdmVET01DYWxsYmFjazo6Y2FuSW52b2tl
Q2FsbGJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwtPmNhbkludm9rZUNhbGxiYWNr
KCk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFjdGl2ZURPTUNhbGxiYWNrOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjdGl2ZURPTUNhbGxiYWNrX2gKKyNkZWZp
bmUgQWN0aXZlRE9NQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKy8vIEEgY2xhc3MgdGhhdCBhbGxvd3MgY2Fs
bGJhY2tzIHRvIGJlaGF2ZSBsaWtlIEFjdGl2ZURPTU9iamVjdHMsIGFuZCBhbHNvCisvLyBiZSBk
ZXN0cm95ZWQgb24gdGhlIGNvbnRleHQgdGhyZWFkIG9yIGFueSBvdGhlciB0aHJlYWQuCitjbGFz
cyBBY3RpdmVET01DYWxsYmFjayB7CitwdWJsaWM6CisgICAgQWN0aXZlRE9NQ2FsbGJhY2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCk7CisgICAgfkFjdGl2ZURPTUNhbGxiYWNrKCk7
CisKKyAgICBib29sIGNhbkludm9rZUNhbGxiYWNrKCkgY29uc3Q7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIC8vIFRoZSBBY3RpdmVET01PYmplY3QgcGFydCBvZiB0aGUgY2FsbGJhY2suCisgICAgT3du
UHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4gbV9pbXBsOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQWN0aXZlRE9NQ2FsbGJhY2tfaApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiSlNTUUxFcnJvci5oIgogI2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb24uaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00MSwyMiArNDAsMTkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3Ip
Citib29sIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBTUUxFcnJvciogZXJyb3IpCiB7Ci0gICAgQVNTRVJUKG1fZGF0
YSk7Ci0gICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghbV9kYXRhIHx8ICFtX2RhdGEtPmds
b2JhbE9iamVjdCgpIHx8ICFjYW5JbnZva2VDYWxsYmFjaygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29u
dGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7IC8vIGlmIHdlIGNhbm5vdCBpbnZva2UgdGhlIGNhbGxiYWNrLCBy
b2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsK
LSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90
b3R5cGUoZXhlYyksIHRyYW5zYWN0aW9uKSk7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBlcnJvcikpOworICAgIGFy
Z3MuYXBwZW5kKHRvSlMoZXhlYywgdHJhbnNhY3Rpb24pKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pT
KGV4ZWMsIGVycm9yKSk7CiAKICAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhj
ZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FM
VHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpT
VmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FsbGJhY2sgPSBKU1NRTFN0
YXRlbWVudENhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkpOworICAgICAgICBjYWxsYmFjayA9
IEpTU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsKICAgICB9CiAKICAgICBSZWZQdHI8U1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKQEAgLTEwNiw3ICsxMDYsNyBA
QCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGVycm9yQ2FsbGJhY2sg
PSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSk7CisgICAg
ICAgIGVycm9yQ2FsbGJhY2sgPSBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShv
YmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpKTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDU1LDEyICsyMDU1LDEzIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgIyAt
IEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZSBhbmQgaGVhZGVyIHByb3RlY3Rpb24KICAgICBw
dXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUhlYWRlckNvbnRlbnRIZWFkZXIoJGRh
dGFOb2RlKSk7CiAKKyAgICAkaGVhZGVySW5jbHVkZXN7IkFjdGl2ZURPTUNhbGxiYWNrLmgifSA9
IDE7CiAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgICRo
ZWFkZXJJbmNsdWRlc3siSlNDYWxsYmFja0RhdGEuaCJ9ID0gMTsKICAgICAkaGVhZGVySW5jbHVk
ZXN7Ijx3dGYvRm9yd2FyZC5oPiJ9ID0gMTsKIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
bm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNs
YXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGludGVyZmFjZU5hbWUge1xuIik7CisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGludGVyZmFjZU5hbWUs
IHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAicHVibGljOlxuIik7CiAKICAgICAjIFRoZSBzdGF0aWMgY3JlYXRlKCkgbWV0aG9kLgpAQCAt
MjA4MywxMCArMjA4NCwxMyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogICAgICAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpIik7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
dmlydHVhbCAiIC4gR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAi
ICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCoiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCAiIC4g
R2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZSAuICIoIik7CisKKyAgICAgICAgICAgIG15IEBhcmdzID0gKCk7
CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgewotICAgICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIsICIgLiBHZXROYXRpdmVUeXBlKCRwYXJhbS0+dHlw
ZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdl
dE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBqb2luKCIsICIsIEBhcmdz
KSk7CiAKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAg
IH0KQEAgLTIwOTksOCArMjEwMyw2IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAKICAg
ICAjIFByaXZhdGUgbWVtYmVycwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDYWxs
YmFja0RhdGEqIG1fZGF0YTtcbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgUmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkO1xuIik7Ci0gICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKQEAg
LTIxMzAsMTYgKzIxMzIsMTUgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgog
CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9
Ojoke2NsYXNzTmFtZX0oSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBtX2RhdGEobmV3
IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKVxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgLCBtX2lzb2xhdGVkV29ybGQoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpXG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGdsb2JhbE9iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgLCBtX2RhdGEobmV3IEpTQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKVxu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CiAKICAgICAjIERlc3RydWN0b3IKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiR7Y2xhc3NOYW1lfTo6fiR7Y2xhc3NOYW1lfSgpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhEZWxldGVDYWxsYmFja0RhdGFU
YXNrOjpjcmVhdGUobV9kYXRhKSk7XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZm5k
ZWYgTkRFQlVHXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEgPSAwO1xu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwpAQCAtMjE1NywyNCArMjE1
OCwyMiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
dHlwZSk7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5
cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOwogCisgICAgICAgICAgICBteSBAYXJncyA9ICgp
OwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAg
ICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAuIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAu
ICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0
aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAg
IH0KLQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiKVxuIik7CiAKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBBU1NFUlQobV9kYXRhKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUKGNvbnRleHQpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghbV9kYXRhIHx8ICFtX2RhdGEtPmdsb2JhbE9iamVjdCgpIHx8ICFjYW5J
bnZva2VDYWxsYmFjaygpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBt
X2lzb2xhdGVkV29ybGQuZ2V0KCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIWdsb2JhbE9iamVjdClcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
XG4iKTsKIAogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24g
NjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTI2LDI1ICsyMTI2LDI1IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNr
SGVhZGVyCiAgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIEdlbmVyYXRlSGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpKTsKIAot
ICAgIGlmICgiJGludGVyZmFjZU5hbWUuaCIgbHQgIldvcmxkQ29udGV4dEhhbmRsZS5oIikgewot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5o
XCJcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJXb3JsZENv
bnRleHRIYW5kbGUuaFwiXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiXG4iKTsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5hbWUuaFwiXG4iKTsK
LSAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx2OC5oPlxuIik7Ci0g
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPlxuIik7Cisg
ICAgbXkgQHVuc29ydGVkSW5jbHVkZXMgPSAoKTsKKyAgICBwdXNoKEB1bnNvcnRlZEluY2x1ZGVz
LCAiI2luY2x1ZGUgXCJBY3RpdmVET01DYWxsYmFjay5oXCIiKTsKKyAgICBwdXNoKEB1bnNvcnRl
ZEluY2x1ZGVzLCAiI2luY2x1ZGUgXCIkaW50ZXJmYWNlTmFtZS5oXCIiKTsKKyAgICBwdXNoKEB1
bnNvcnRlZEluY2x1ZGVzLCAiI2luY2x1ZGUgXCJXb3JsZENvbnRleHRIYW5kbGUuaFwiIik7Cisg
ICAgcHVzaChAdW5zb3J0ZWRJbmNsdWRlcywgIiNpbmNsdWRlIDx2OC5oPiIpOworICAgIHB1c2go
QHVuc29ydGVkSW5jbHVkZXMsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4iKTsKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCBqb2luKCJcbiIsIHNvcnQgQHVuc29ydGVkSW5jbHVkZXMpKTsKICAg
ICAKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIp
OwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRp
bnRlcmZhY2VOYW1lIHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcblxubmFtZXNw
YWNlIFdlYkNvcmUge1xuXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNs
YXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGludGVyZmFjZU5hbWUsIHB1YmxpYyBBY3RpdmVET01D
YWxsYmFjayB7XG4iKTsKIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNyZWF0ZSh2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjwke2NsYXNzTmFtZX0+IGNy
ZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpKSk7
CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAk
e2NsYXNzTmFtZX0odmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIH4ke2NsYXNzTmFtZX0oKTsKQEAgLTIxNjIsMTEgKzIxNjIsMTMgQEAgRU5ECiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQo
ZmFsc2UpIik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdmlydHVhbCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCoiKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgdmlydHVhbCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+dHlwZSkgLiAiICIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIo
Iik7CisKKyAgICAgICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15
ICRwYXJhbSAoQHBhcmFtcykgewotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIsICIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAk
cGFyYW0tPm5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVG
b3JDYWxsYmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFy
Z3MpKTsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIpO1xuIik7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yMTc0LDcgKzIxNzYsNyBAQCBFTkQKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCA8PEVORCk7CiAKIHByaXZhdGU6Ci0gICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6
T2JqZWN0Pik7CisgICAgJHtjbGFzc05hbWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9j
YWxsYmFjazsKICAgICBXb3JsZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CkBAIC0yMjA2
LDggKzIyMDgsOSBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD5cblxuIik7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7Ci0ke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfSh2ODo6TG9j
YWw8djg6Ok9iamVjdD4gY2FsbGJhY2spCi0gICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQorJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0o
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgIDogQWN0aXZlRE9NQ2FsbGJhY2soY29udGV4dCkKKyAgICAsIG1fY2FsbGJh
Y2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAgLCBtX3dv
cmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CkBAIC0yMjMxLDIyICsyMjM0LDI2IEBA
IEVORAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50
eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAi
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lIC4gIigiKTsKIAorICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKICAgICAgICAgICAg
IGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWRkSW5jbHVk
ZXNGb3JUeXBlKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIsICIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIg
LiAkcGFyYW0tPm5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5
cGVGb3JDYWxsYmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigiLCAiLCBAYXJn
cykpOwogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSlcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTtcblxu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgbV93b3JsZENvbnRleHQpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpO1xu
XG4iKTsKIAotICAgICAgICAgICAgbXkgQGFyZ3ZzID0gKCk7CisgICAgICAgICAgICBAYXJncyA9
ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAg
ICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke3BhcmFtTmFtZX1I
YW5kbGUgPSB0b1Y4KCR7cGFyYW1OYW1lfSk7XG4iKTsKQEAgLTIyNTQsMTQgKzIyNjEsMTQgQEAg
RU5ECiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIENSQVNIKCk7
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHRydWU7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBhcmd2cywgIiAgICAgICAgJHtwYXJhbU5hbWV9SGFu
ZGxlIik7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgIiAgICAgICAgJHtwYXJhbU5hbWV9
SGFuZGxlIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIixcbiIsIEBhcmd2cykpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIixcbiIsIEBhcmdzKSk7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuICAgIH07XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9j
YWxsYmFjaywgIiAuIHNjYWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFs
dWUsIGNvbnRleHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAi
LCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1
ICszNSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBK
U1Rlc3RDYWxsYmFjazo6SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0
YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKLSAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxP
YmplY3QtPndvcmxkKCkpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZ2xvYmFsT2Jq
ZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgOiBBY3RpdmVET01DYWxsYmFjayhn
bG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZGF0YShuZXcg
SlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpCiB7CiB9CiAKIEpTVGVzdENh
bGxiYWNrOjp+SlNUZXN0Q2FsbGJhY2soKQogewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOworICAg
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRh
c2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOwogI2lmbmRlZiBOREVC
VUcKICAgICBtX2RhdGEgPSAwOwogI2VuZGlmCkBAIC01MSwyMCArNTAsMTYgQEAgSlNUZXN0Q2Fs
bGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiAKIC8vIEZ1bmN0aW9ucwogCi1ib29sIEpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkKIHsKLSAgICBBU1NFUlQobV9k
YXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFtX2RhdGEgfHwgIW1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCkgfHwgIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1faXNvbGF0
ZWRXb3JsZC5nZXQoKSk7Ci0gICAgaWYgKCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9K
UyhleGVjLCBjbGFzczFQYXJhbSkpOwogCkBAIC03MywyMCArNjgsMTYgQEAgYm9vbCBKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogICAgIHJldHVybiAhcmFpc2VkRXhjZXB0aW9u
OwogfQogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBT
dHJpbmcmIHN0ckFyZykKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQogewotICAgIEFT
U0VSVChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBpZiAoIW1fZGF0YSB8fCAh
bV9kYXRhLT5nbG9iYWxPYmplY3QoKSB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwg
bV9pc29sYXRlZFdvcmxkLmdldCgpKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFw
cGVuZCh0b0pTKGV4ZWMsIGNsYXNzMlBhcmFtKSk7CiAgICAgYXJncy5hcHBlbmQodG9KUyhleGVj
LCBzdHJBcmcpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywx
MyArMjMsMTQgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFjdGl2ZURP
TUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKICNpbmNsdWRlICJUZXN0
Q2FsbGJhY2suaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7CitjbGFz
cyBKU1Rlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2ssIHB1YmxpYyBBY3RpdmVET01D
YWxsYmFjayB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+
IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKICAgICB7CkBAIC0zOSwxNyArNDAsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fkpTVGVzdENhbGxiYWNrKCk7CiAKICAgICAvLyBGdW5jdGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMSog
Y2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5n
JiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxs
YmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3Mz
KiBjbGFzczNQYXJhbSk7Ci0gICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0p
OworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNsYXNz
MVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xhc3My
KiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAgIENPTVBJTEVfQVNTRVJU
KGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShDbGFz
czMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFzczUq
IGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJpdmF0ZToKICAgICBKU1Rl
c3RDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqKTsK
IAogICAgIEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7Ci0gICAgUmVmUHRyPERPTVdyYXBwZXJXb3Js
ZD4gbV9pc29sYXRlZFdvcmxkOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5j
cHAJKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotVjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaykKLSAgICA6IG1fY2FsbGJhY2sodjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCitWOFRlc3RDYWxsYmFjazo6VjhUZXN0Q2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQorICAgIDogQWN0aXZlRE9NQ2FsbGJhY2soY29udGV4dCkKKyAgICAsIG1f
Y2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjYWxsYmFjaykpCiAgICAg
LCBtX3dvcmxkQ29udGV4dChVc2VDdXJyZW50V29ybGQpCiB7CiB9CkBAIC00NywxMSArNDgsMTQg
QEAgVjhUZXN0Q2FsbGJhY2s6On5WOFRlc3RDYWxsYmFjaygpCiAKIC8vIEZ1bmN0aW9ucwogCi1i
b29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBDbGFzczEqIGNsYXNzMVBhcmFtKQorYm9vbCBWOFRlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkKIHsKKyAg
ICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRleHQpOworICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENvbnRleHQpOwogICAgIGlmICh2OENvbnRleHQuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjgsMTQgKzcyLDE3IEBAIGJvb2wg
VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKICAgICB9OwogCiAgICAgYm9vbCBj
YWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayht
X2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KTsKKyAgICBy
ZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJu
VmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiB9CiAKLWJvb2wgVjhUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQorYm9vbCBWOFRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwg
Y29uc3QgU3RyaW5nJiBzdHJBcmcpCiB7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
IAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KGNv
bnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENv
bnRleHQgPSB0b1Y4Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ybGRDb250
ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTk4LDcgKzEwNSw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMlAKICAgICB9OwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBjYWxsYmFja1Jl
dHVyblZhbHVlLCBjb250ZXh0KTsKKyAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJh
Y2ssIDIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gNjE4NDEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaWZuZGVmIFY4VGVzdENhbGxiYWNrX2gK
ICNkZWZpbmUgVjhUZXN0Q2FsbGJhY2tfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5k
bGUuaCIKICNpbmNsdWRlIDx2OC5oPgpAQCAtMzAsMjQgKzMxLDI3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgVjhUZXN0Q2FsbGJhY2sgOiBwdWJsaWMgVGVzdENhbGxiYWNrIHsK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIFY4VGVzdENhbGxiYWNrIDog
cHVibGljIFRlc3RDYWxsYmFjaywgcHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFRlc3RDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4VGVzdENhbGxiYWNrPiBj
cmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOwotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4VGVzdENhbGxiYWNrKHZhbHVlLT5Ub09iamVjdCgp
KSk7CisgICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBWOFRlc3RDYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgY29udGV4dCkpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgflY4VGVzdENhbGxiYWNrKCk7CiAKICAgICAvLyBGdW5jdGlvbnMKLSAgICB2
aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIENsYXNzMSogY2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhD
bGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ2xhc3MyKiBjbGFzczJQYXJhbSwg
Y29uc3QgU3RyaW5nJiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0
dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgQ2xhc3MzKiBjbGFzczNQYXJhbSk7Ci0gICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJh
Y2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiog
Y2xhc3M2UGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShD
bGFzczEqIGNsYXNzMVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3My
UGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOworICAgIENP
TVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0
dXJuVHlwZShDbGFzczMqIGNsYXNzM1BhcmFtKTsKKyAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxs
YmFjayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKIAogcHJpdmF0
ZToKLSAgICBWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4pOworICAgIFY4VGVz
dENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKICAgICBXb3Js
ZENvbnRleHRIYW5kbGUgbV93b3JsZENvbnRleHQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHAJKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTEgKzQzLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBWOFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQor
Ym9vbCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogeworICAgIGlmICghY2FuSW52b2tl
Q2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0
b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29udGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCkBAIC02NSwxNSArNjgsMTIgQEAgYm9vbCBWOFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s6OmhhbmRsZQogICAgICAgICBlcnJvckhhbmRsZQogICAgIH07CiAKLSAgICAv
LyBQcm90ZWN0IHRoZSBjb250ZXh0IHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgotICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBwcm90ZWN0b3IoY29udGV4dCk7Ci0KICAgICBi
b29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgICAvLyBTdGVwIDY6IElmIHRoZSBl
cnJvciBjYWxsYmFjayByZXR1cm5zIGZhbHNlLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQKICAg
ICAvLyBzdGF0ZW1lbnQsIGlmIGFueSwgb3Igb250byB0aGUgbmV4dCBvdmVyYWxsIHN0ZXAgb3Ro
ZXJ3aXNlLiBPdGhlcndpc2UsCiAgICAgLy8gdGhlIGVycm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0
dXJuIGZhbHNlLCBvciB0aGVyZSB3YXMgbm8gZXJyb3IgY2FsbGJhY2suCiAgICAgLy8gSnVtcCB0
byB0aGUgbGFzdCBzdGVwIGluIHRoZSBvdmVyYWxsIHN0ZXBzLgotICAgIHJldHVybiBpbnZva2VD
YWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0
KSB8fCBjYWxsYmFja1JldHVyblZhbHVlOworICAgIHJldHVybiBpbnZva2VDYWxsYmFjayhtX2Nh
bGxiYWNrLCAyLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpIHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1
c3RvbS5jcHAJKHJldmlzaW9uIDYxODQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDQsMTIgKzgwNCwxMyBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6Om9wZW5ECiAgICAgaWYgKCFWOEJp
bmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1w
LT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAorICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0
aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gNSkgewogICAgICAgICBpZiAo
IWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBF
X01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0YWJhc2VD
YWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhE
YXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNjE4NDEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRh
YmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjYWxs
YmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAg
ICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKQEAgLTcyLDcgKzcyLDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNoYW5nZQogICAgICAgICBpZiAoIWFyZ3NbM10t
PklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENI
X0VSUik7CiAKLSAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrOjpjcmVhdGUoYXJnc1szXSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbM10sIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxWOEN1c3RvbVZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrOwpAQCAtMTAxLDE0ICsxMDEsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjcmVhdGVUcmFucwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAg
IFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSk7CisgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShh
cmdzWzBdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgIFJlZlB0cjxWOFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDEgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMV0pKSB7CiAgICAgICAgIGlmICghYXJn
c1sxXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlT
TUFUQ0hfRVJSKTsKIAotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSwgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2s7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFi
YXNlU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VTeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsMTIgKzUzLDEzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFiYXNlU3lu
Yzo6Y2gKIAogICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UgPSBWOERhdGFiYXNlU3luYzo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJl
ZlB0cjxWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjazsKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+IDIpIHsKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgICAg
IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0p
OworICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzJdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKQEAgLTc4LDcgKzc5LDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjcmVhdGVUcmFucwogCiAgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSA9IFY4RGF0YWJh
c2VTeW5jOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAotICAgIFJlZlB0cjxWOFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIFJlZlB0
cjxWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihj
YWxsYmFjay5yZWxlYXNlKCksIHJlYWRPbmx5LCBlYyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gNjE4NDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMjIgKzg5LDIyIEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOFNRTFRyYW5zYWN0aW9uOjoKIAogICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiA9IFY4U1FMVHJhbnNhY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0g
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQpCisgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJh
Y2s+IGNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMiAmJiAhaXNVbmRlZmluZWRP
ck51bGwoYXJnc1syXSkpIHsKICAgICAgICAgaWYgKCFhcmdzWzJdLT5Jc09iamVjdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICBj
YWxsYmFjayA9IFY4U1FMU3RhdGVtZW50Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJdKTsKKyAgICAg
ICAgY2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSwgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAzICYm
ICFpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzNdKSkgewogICAgICAgICBpZiAoIWFyZ3NbM10tPklz
T2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VS
Uik7Ci0gICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmNyZWF0ZShhcmdzWzNdKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbM10sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biA2MTg0MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMiArMTU3LDEzIEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om8KIAogICAgIFdvcmtlckNvbnRleHQqIHdvcmtl
ckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdldFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1KSB7CiAgICAgICAgIGlm
ICghYXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFz
ZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2sgPSBW
OERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE4NSwxMiArMTg2LDEz
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om8KIAogICAgIFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOwogCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1
KSB7CiAgICAgICAgIGlmICghYXJnc1s0XS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBjcmVhdGlvbkNhbGxi
YWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSk7CisgICAgICAgIGNyZWF0
aW9uQ2FsbGJhY2sgPSBWOERhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzRdLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gNjE4NDEpCisrKyBXZWJDb3JlL2Rv
bS9BY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMiArMzcsMTQgQEAg
QWN0aXZlRE9NT2JqZWN0OjpBY3RpdmVET01PYmplY3QoU2NyaXB0RQogICAgIDogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX3BlbmRpbmdB
Y3Rpdml0eUNvdW50KDApCiB7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgQVNTRVJUKChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSAmJiBpc01haW5UaHJlYWQoKSkKLSAg
ICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYg
Y3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpLT50aHJlYWQoKS0+dGhyZWFkSUQoKSkpOwotI2VuZGlmCi0KKyAgICBB
U1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkQWN0aXZlRE9NT2JqZWN0KHRoaXMsIHVw
Y2FzdFBvaW50ZXIpOwogfQogCiBBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQog
ewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsKLSNpZiBFTkFCTEUoV09SS0VS
UykKLSAgICAgICAgQVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KSAmJiBpc01haW5UaHJlYWQoKSkKLSAgICAgICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+dGhyZWFkKCktPnRo
cmVhZElEKCkpKTsKLSNlbmRpZgotCisgICAgICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kZXN0cm95ZWRBY3RpdmVET01PYmplY3QodGhpcyk7CiAgICAgfQogfQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9u
Q2FsbGJhY2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikKICAgICB7Ci0gICAgICAgIG1fY3JlYXRpb25DYWxsYmFj
ay0+aGFuZGxlRXZlbnQoY29udGV4dCwgbV9kYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIG1fY3Jl
YXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCiBw
cml2YXRlOgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEzICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNl
OwogY2xhc3MgRGF0YWJhc2VTeW5jOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAog
Y2xhc3MgRGF0YWJhc2VDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNl
Q2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUNhbGxiYWNrKCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBE
YXRhYmFzZSopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIERhdGFiYXNlU3luYyopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoRGF0YWJhc2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KERhdGFi
YXNlU3luYyopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5
bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShy
ZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRh
YmFzZVN5bmM6Om8KICAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFj
ay5nZXQoKSkgewogICAgICAgICBkYXRhYmFzZS0+bV9leHBlY3RlZFZlcnNpb24gPSAiIjsKICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9y
IGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIGNyZWF0aW9uQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KGNvbnRleHQsIGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0KCkpOwogICAgIH0KIAogICAgIHJl
dHVybiBkYXRhYmFzZTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA2
MTg0MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsOSArMTcwLDkgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhT
UUxUcgogICAgIC8vIGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0
aW9uIGVycm9yIGNhbGxiYWNrLgogICAgIGlmIChtX2Vycm9yKSB7CiAgICAgICAgIEFTU0VSVCht
X3N0YXRlbWVudEVycm9yQ2FsbGJhY2spOwotICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0
ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7Cisg
ICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKICAgICB9IGVsc2UgaWYgKG1fc3RhdGVt
ZW50Q2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0ZW1lbnRDYWxsYmFj
ay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKKyAgICAgICAgY2FsbGJh
Y2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
bV9yZXN1bHRTZXQuZ2V0KCkpOwogCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxNCArMzQsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFzcyBTUUxS
ZXN1bHRTZXQ7CiAKIGNsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5T
UUxTdGF0ZW1lbnRDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVz
dWx0U2V0KikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwx
MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTEVycm9yOwogCiBjbGFzcyBTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMRXJyb3IqKSA9IDA7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDYxODQx
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlv
bkMKIAogICAgIGlmIChtX2NhbGxiYWNrKSB7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQg
PSB0cnVlOwotICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFtX2NhbGxiYWNr
LT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMp
OworICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFtX2NhbGxiYWNrLT5oYW5k
bGVFdmVudCh0aGlzKTsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwogICAg
IH0gZWxzZQogICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IHRydWU7CkBAIC01
NDksNyArNTQ5LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRQog
ICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxs
YmFjayB3aXRoIHRoZSBsYXN0CiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlz
IHRyYW5zYWN0aW9uLgogICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spCi0gICAgICAgIG1fZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOworICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CiAKICAgICBtX25leHRTdGVwID0g
JlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiAg
ICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEzICszNSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIAogY2xhc3MgU1FMVHJhbnNhY3Rp
b25DYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkNhbGxiYWNrKCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBT
UUxUcmFuc2FjdGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJh
bnNhY3Rpb24qKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTMgKzM1LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNRTEVycm9yOwogCiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFNRTEVycm9yKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxF
cnJvciopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5oCShyZXZpc2lvbiA2MTg0MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIs
MTYgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwog
CiAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBv
bmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KIGNsYXNzIFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaygp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgU1FMVHJhbnNhY3Rpb25TeW5jKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChTUUxUcmFuc2FjdGlvblN5bmMqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
MTg0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDEwLTA2LTI1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBz
dXJlIGFsbCBEQiBjYWxsYmFja3MgcnVuIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDExMgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9zdG9yYWdlOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3N0b3Jh
Z2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVk
LWluLWNvcnJlY3QtY29udGV4dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3N0
b3JhZ2UvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3N0b3JhZ2UvcmVz
b3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1maXJzdC1mcmFt
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2Nh
bGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1vdXRwdXQtZnJhbWUuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3Mt
YXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LXRoaXJkLWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29y
cmVjdC1jb250ZXh0LmNnaTogQWRkZWQuCisKIDIwMTAtMDYtMjUgIFJvYiBCdWlzICA8cndsYnVp
c0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVk
LWluLWNvcnJlY3QtY29udGV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29u
dGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorCisKKy0tLS0tLS0tCitGcmFtZTog
J291dHB1dEZyYW1lJworLS0tLS0tLS0KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IGFsbCBEQiBjYWxs
YmFja3MgYXJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCB0aGV5IHdlcmUgY3JlYXRlZCwgcmF0aGVy
IHRoYW4gdGhlIGNvbnRleHQgd2hlcmUgdGhlIERCIGhhbmRsZSB3YXMgY3JlYXRlZC4KK1BBU1M6
IFRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRl
eHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2Nh
bGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1maXJzdC1mcmFtZS5odG1sCitQ
QVNTOiBUaGUgc3RhdGVtZW50IHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29y
cmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jl
c291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJh
bWUuaHRtbAorUEFTUzogVGhlIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayB3YXMgY2FsbGVkIGlu
IHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0
b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1m
aXJzdC1mcmFtZS5odG1sCitQQVNTOiBUaGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgd2Fz
IGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0
LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbAorUEFTUzogVGhlIHRyYW5zYWN0aW9uIHN1Y2Nlc3Mg
Y2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxl
ZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbAorUEFTUzogVGhlIHRyYW5zYWN0
aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1JlZmVycmVy
OiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1j
YWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sCitQQVNTOiBUaGUgc3Rh
dGVtZW50IHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0
LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxs
YmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKK1BB
U1M6IFRoZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVj
dCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291
cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1l
Lmh0bWwKK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjayB3YXMgY2FsbGVkIGlu
IHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0
b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1z
ZWNvbmQtZnJhbWUuaHRtbAorUEFTUzogVGhlIHRyYW5zYWN0aW9uIHN1Y2Nlc3MgY2FsbGJhY2sg
d2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3Jy
ZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBjYWxs
YmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDov
LzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWlu
LWNvcnJlY3QtY29udGV4dC10aGlyZC1mcmFtZS5odG1sCitQQVNTOiBUaGUgc3RhdGVtZW50IHN1
Y2Nlc3MgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJy
ZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJl
LWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtdGhpcmQtZnJhbWUuaHRtbAorUEFTUzogVGhlIHN0
YXRlbWVudCBlcnJvciBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQu
CitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxi
YWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC10aGlyZC1mcmFtZS5odG1sCitQQVNT
OiBUaGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVj
dCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291
cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtdGhpcmQtZnJhbWUu
aHRtbAorUEFTUzogVGhlIHRyYW5zYWN0aW9uIHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIGNhbGxlZCBp
biB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9z
dG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQt
dGhpcmQtZnJhbWUuaHRtbAorCisKKy0tLS0tLS0tCitGcmFtZTogJ2ZpcnN0RnJhbWUnCistLS0t
LS0tLQorCisKKy0tLS0tLS0tCitGcmFtZTogJ3NlY29uZEZyYW1lJworLS0tLS0tLS0KKworCist
LS0tLS0tLQorRnJhbWU6ICd0aGlyZEZyYW1lJworLS0tLS0tLS0KKwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29u
dGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9j
YWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1p
bi1jb3JyZWN0LWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBzZXR1cEFuZFJ1bkZyYW1lc1Rlc3QoKQor
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAgdG9wLmZyYW1lc1sxXS5y
dW5UZXN0KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxmcmFtZXNldCBvbmxvYWQ9InNldHVw
QW5kUnVuRnJhbWVzVGVzdCgpIj4KKzxmcmFtZSBuYW1lPSJvdXRwdXRGcmFtZSIgc3JjPSJyZXNv
dXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFt
ZS5odG1sIj4KKzxmcmFtZSBuYW1lPSJmaXJzdEZyYW1lIiBzcmM9InJlc291cmNlcy9jYWxsYmFj
a3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbCI+Cis8ZnJh
bWUgbmFtZT0ic2Vjb25kRnJhbWUiIHNyYz0icmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVk
LWluLWNvcnJlY3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbCI+Cis8ZnJhbWUgbmFtZT0idGhp
cmRGcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1j
b250ZXh0LXRoaXJkLWZyYW1lLmh0bWwiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LWZpcnN0LWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxl
ZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LWZpcnN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFyIGRiID0gb3BlbkRhdGFi
YXNlKCJDYWxsYmFja3NBcmVDYWxsZWRJbkNvcnJlY3RDb250ZXh0V29ya2VyVGVzdCIsICIxLjAi
LCAiIiwgMSk7CisKK2Z1bmN0aW9uIHByaW50UmVmZXJyZXIoKQoreworICAgIHZhciByZXEgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICByZXEub3BlbigiR0VUIiwgImNhbGxiYWNrcy1hcmUt
Y2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5jZ2kiLCBmYWxzZSk7CisgICAgcmVxLnNlbmQobnVs
bCk7CisgICAgdG9wLmZyYW1lc1swXS5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmlubmVyVGV4dCArPSAiUmVmZXJyZXI6ICIgKyByZXEucmVzcG9uc2VUZXh0OworfQorCitmdW5j
dGlvbiBsb2dDYWxsYmFjayhjYWxsYmFja1R5cGUpCit7CisgICAgdG9wLmZyYW1lc1swXS5kb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSAiRkFJTDogVGhlICIg
KyBjYWxsYmFja1R5cGUgKyAiIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIHdyb25nIGNvbnRl
eHQuXG4iCisgICAgcHJpbnRSZWZlcnJlcigpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sK
KyAgICAvLyB0ZXN0IHRoYXQgdHJhbnNhY3Rpb24gY2FsbGJhY2tzIGRlZmluZWQgaW4gYW5vdGhl
ciBmcmFtZSBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmcmFtZQorICAgIGRi
LnRyYW5zYWN0aW9uKHRvcC5mcmFtZXNbMl0uZmFpbGluZ1RyYW5zYWN0aW9uQ2FsbGJhY2ssIHRv
cC5mcmFtZXNbMl0uZXJyb3JUcmFuc2FjdGlvbkNhbGxiYWNrKTsKKyAgICBkYi50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeyB9LCBudWxsLCB0b3AuZnJhbWVzWzJdLnN1Y2Nlc3NUcmFuc2FjdGlv
bkNhbGxiYWNrKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxi
YWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1vdXRwdXQtZnJhbWUuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxi
YWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1vdXRwdXQtZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2Fs
bGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+CitUaGlzIHRlc3QgdGVzdHMgdGhhdCBhbGwgREIgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4g
dGhlIGNvbnRleHQgdGhleSB3ZXJlIGNyZWF0ZWQsIHJhdGhlciB0aGFuIHRoZSBjb250ZXh0IHdo
ZXJlIHRoZSBEQiBoYW5kbGUgd2FzIGNyZWF0ZWQuCis8cHJlIGlkPSJjb25zb2xlIj4KK0ZBSUxV
UkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxl
ZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxl
ZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2Fs
bGVkLWluLWNvcnJlY3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Cit2YXIgZnJhbWUgPSAxOwor
CitmdW5jdGlvbiBwcmludFJlZmVycmVyKCkKK3sKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7CisgICAgcmVxLm9wZW4oIkdFVCIsICJjYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1j
b3JyZWN0LWNvbnRleHQuY2dpIiwgZmFsc2UpOworICAgIHJlcS5zZW5kKG51bGwpOworICAgIHRv
cC5mcmFtZXNbMF0uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQg
Kz0gIlJlZmVycmVyOiAiICsgcmVxLnJlc3BvbnNlVGV4dCArICJcbiI7Cit9CisKK2Z1bmN0aW9u
IGxvZ0NhbGxiYWNrKGNhbGxiYWNrVHlwZSkKK3sKKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9ICJQQVNTOiBUaGUgIiArIGNh
bGxiYWNrVHlwZSArICIgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0
LlxuIgorICAgIHByaW50UmVmZXJyZXIoKTsKK30KKworZnVuY3Rpb24gZmFpbGluZ1RyYW5zYWN0
aW9uQ2FsbGJhY2sodHgpCit7CisgICAgbG9nQ2FsbGJhY2soInRyYW5zYWN0aW9uIik7CisgICAg
dHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCki
LCBbXSwgc3VjY2Vzc1N0YXRlbWVudENhbGxiYWNrLCBudWxsKTsKKyAgICB0eC5leGVjdXRlU3Fs
KCJCQUQgU1FMIFNUQVRFTUVOVCIsIFtdLCBudWxsLCBlcnJvclN0YXRlbWVudENhbGxiYWNrKTsK
K30KKworZnVuY3Rpb24gZXJyb3JTdGF0ZW1lbnRDYWxsYmFjayh0eCwgZXJyb3IpCit7CisgICAg
bG9nQ2FsbGJhY2soInN0YXRlbWVudCBlcnJvciIpOworICAgIHJldHVybiB0cnVlOyAvLyBmYWls
IHRoZSB0cmFuc2FjdGlvbgorfQorCitmdW5jdGlvbiBzdWNjZXNzU3RhdGVtZW50Q2FsbGJhY2so
dHgsIGRhdGEpCit7CisgICAgbG9nQ2FsbGJhY2soInN0YXRlbWVudCBzdWNjZXNzIik7Cit9CisK
K2Z1bmN0aW9uIGVycm9yVHJhbnNhY3Rpb25DYWxsYmFjayhlcnJvcikKK3sKKyAgICBsb2dDYWxs
YmFjaygidHJhbnNhY3Rpb24gZXJyb3IiKTsKK30KKworZnVuY3Rpb24gc3VjY2Vzc1RyYW5zYWN0
aW9uQ2FsbGJhY2soKQoreworICAgIGxvZ0NhbGxiYWNrKCJ0cmFuc2FjdGlvbiBzdWNjZXNzIik7
CisgICAgZnJhbWUrKzsKKyAgICBzd2l0Y2ggKGZyYW1lKSB7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIHJ1blRlc3RJblNlY29uZEZyYW1lKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHRvcC5mcmFtZXNbM10ucnVuVGVzdEluVGhpcmRG
cmFtZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93ICJCYWQgJ2ZyYW1lJyB2YWx1ZTogIiArIGZy
YW1lOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVGVzdEluU2Vjb25kRnJhbWUoKQoreworICAg
IC8vIHRlc3QgdGhhdCBhbGwgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCBpbiB0aGlzIGNvbnRleHQs
IGV2ZW4gdGhvdWdoICdkYicgaXMgZGVmaW5lZCBpbiBhbm90aGVyIGNvbnRleHQKKyAgICB0b3Au
ZnJhbWVzWzFdLmRiLnRyYW5zYWN0aW9uKGZhaWxpbmdUcmFuc2FjdGlvbkNhbGxiYWNrLCBlcnJv
clRyYW5zYWN0aW9uQ2FsbGJhY2spOworICAgIHRvcC5mcmFtZXNbMV0uZGIudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsgfSwgbnVsbCwgc3VjY2Vzc1RyYW5zYWN0aW9uQ2FsbGJhY2spOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQt
aW4tY29ycmVjdC1jb250ZXh0LXRoaXJkLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1p
bi1jb3JyZWN0LWNvbnRleHQtdGhpcmQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQt
aW4tY29ycmVjdC1jb250ZXh0LXRoaXJkLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gcHJpbnRSZWZlcnJl
cigpCit7CisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHJlcS5vcGVu
KCJHRVQiLCAiY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LmNnaSIsIGZh
bHNlKTsKKyAgICByZXEuc2VuZChudWxsKTsKKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9ICJSZWZlcnJlcjogIiArIHJlcS5y
ZXNwb25zZVRleHQ7Cit9CisKK2Z1bmN0aW9uIGxvZ0NhbGxiYWNrKGNhbGxiYWNrVHlwZSkKK3sK
KyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5u
ZXJUZXh0ICs9ICJGQUlMOiBUaGUgIiArIGNhbGxiYWNrVHlwZSArICIgY2FsbGJhY2sgd2FzIGNh
bGxlZCBpbiB0aGUgd3JvbmcgY29udGV4dC5cbiIKKyAgICBwcmludFJlZmVycmVyKCk7Cit9CisK
K2Z1bmN0aW9uIHJ1blRlc3RJblRoaXJkRnJhbWUoKQoreworICAgIC8vIHRlc3QgdGhhdCB0cmFu
c2FjdGlvbiBjYWxsYmFja3MgZGVmaW5lZCBpbiBhbm90aGVyIGZyYW1lIGFyZSBleGVjdXRlZCBp
biB0aGUgY29udGV4dCBvZiB0aGF0IGZyYW1lCisgICAgdG9wLmZyYW1lc1sxXS5kYi50cmFuc2Fj
dGlvbih0b3AuZnJhbWVzWzJdLmZhaWxpbmdUcmFuc2FjdGlvbkNhbGxiYWNrLCB0b3AuZnJhbWVz
WzJdLmVycm9yVHJhbnNhY3Rpb25DYWxsYmFjayk7CisgICAgdG9wLmZyYW1lc1sxXS5kYi50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeyB9LCBudWxsLCB0b3AuZnJhbWVzWzJdLnN1Y2Nlc3NUcmFu
c2FjdGlvbkNhbGxiYWNrKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2Vz
L2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5jZ2kKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJl
LWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuY2dpCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1j
b3JyZWN0LWNvbnRleHQuY2dpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACisjIS91c3Iv
YmluL3BlcmwgLXcKKwordXNlIENHSSBxdyg6c3RhbmRhcmQpOworbXkgJGNnaSA9IG5ldyBDR0k7
CisKK3ByaW50ICJDb250ZW50LXR5cGU6IHRleHQvcGxhaW5cblxuIjsgCitpZiAoJGNnaS0+cmVm
ZXJlcikgeworICBwcmludCAkY2dpLT5yZWZlcmVyOworfSBlbHNlIHsKKyAgcHJpbnQgIk5PIFJF
RkVSRVIiOworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
dG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQu
Y2dpCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="46809"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="46810"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63135</attachid>
            <date>2010-07-30 18:43:12 -0700</date>
            <delta_ts>2010-08-02 11:14:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>78696</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEwIEBACisyMDEwLTA3LTMwICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVHVybiBhbGwgY2FsbGJhY2tzIGludG8gQWN0aXZlRE9NT2JqZWN0cyBhbmQgY3JlYXRlIGNh
bGxiYWNrcyBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0Lmh0bWwKKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFj
ay5jcHA6IEFkZGVkLiBUaGUgYmFzZSBjbGFzcworICAgICAgICBmb3IgYWxsIGNhbGxiYWNrcywg
dGhhdCBiZWhhdmVzIGxpa2UgYW4gQWN0aXZlRE9NT2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6
RGVzdHJveU9uQ29udGV4dFRocmVhZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZXN0cm95T25Db250ZXh0VGhyZWFkVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6RGVzdHJveU9uQ29udGV4dFRocmVhZFRhc2s6OkRlc3Ryb3lPbkNvbnRleHRUaHJlYWRUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6QWN0aXZl
RE9NT2JqZWN0Q2FsbGJhY2tJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTU9iamVj
dENhbGxiYWNrSW1wbDo6Y29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpBY3Rp
dmVET01PYmplY3RDYWxsYmFja0ltcGw6OmNhblN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6OmNhbkludm9rZUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw6Om11
dGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lPbkNvbnRleHRUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWN0aXZlRE9NQ2FsbGJhY2s6OkFjdGl2ZURPTUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjp+QWN0aXZlRE9NQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6QWN0aXZlRE9NQ2FsbGJhY2s6OmNhbkludm9rZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjdGl2ZURPTUNhbGxiYWNrOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxiYWNrLmg6IEFkZGVk
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmNwcDogUGFzcyB0aGUKKyAgICAgICAgcmlnaHQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0
byB0aGUgSlNDIGNhbGxiYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJh
bnNhY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6
ZXhlY3V0ZVNxbCk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbTogTWFrZSBhbGwgY2FsbGJhY2tzIGluaGVyaXQKKyAgICAgICAgZnJvbSBBY3RpdmVET01D
YWxsYmFjaywgYW5kIG1ha2UgdGhlbSB1c2UgdGhlIHJpZ2h0CisgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG06CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2su
Y3BwOiBVcGRhdGUgdGhlCisgICAgICAgIGV4cGVjdGF0aW9ucyBmb3IgdGhlIGNvZGUgZ2VuZXJh
dGVkIGJ5IENvZGVHZW5lcmF0b3J7SlN8Vjh9LnBtLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q2FsbGJhY2s6OkpTVGVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjp+SlNUZXN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxi
YWNrOjpWOFRlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxi
YWNrOjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2Fs
bGJhY2tBcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFy
Z0NhbGxiYWNrKToKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOiBQYXNzCisgICAgICAgIHRoZSByaWdodCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0IHRvIHRoZSBWOCBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpW
OFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3c6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFi
YXNlOjpjaGFuZ2VWZXJzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJh
bnNhY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lv
bkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsQ2FsbGJhY2spOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmNDYWxsYmFj
ayk6CisKKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0LmNwcDogU2ltcGxpZnkgdGhlIGNv
ZGUuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QpOgor
CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6IENhbGxiYWNrQ2xhc3M6OmhhbmRsZUV2
ZW50KCkgZG9lc24ndCB0YWtlCisgICAgICAgIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBhbnlt
b3JlLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6cGVy
Zm9ybVRhc2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U3luYzo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2spOgor
ICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9y
YWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVy
VHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUpOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDoKKwogMjAxMC0wNy0zMCAg
QW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgS2lsemVyLgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2NDM5MikKKysrIFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgU0VUKFdlYkNvcmVfSU5D
TFVERV9ESVJFQ1RPUklFUwogKQogCiBTRVQoV2ViQ29yZV9JRExfSU5DTFVERVMKKyAgICBiaW5k
aW5ncy9nZW5lcmljCiAgICAgYmluZGluZ3MvanMKICAgICBjc3MKICAgICBkb20KQEAgLTU2MSw2
ICs1NjIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBiaW5kaW5ncy9TY3JpcHRDb250
cm9sbGVyQmFzZS5jcHAKIAorICAgIGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2su
Y3BwCiAgICAgYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAogCiAg
ICAgYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcApJbmRleDogV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogVlBBVEggPSBcCiAgICAgJChXZWJDb3Jl
KSBcCisgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9nZW5lcmljIFwKICAgICAkKFdlYkNvcmUpL2Jp
bmRpbmdzL2pzIFwKICAgICAkKFdlYkNvcmUpL2JpbmRpbmdzL29iamMgXAogICAgICQoV2ViQ29y
ZSkvY3NzIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02MTcsNiArNjE3LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29u
dGFpbmVyLmggXAogCVdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cu
Y3BwIFwKIAlXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmggXAor
CVdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHAgXAorCVdlYkNv
cmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggXAogCVdlYkNvcmUvYmluZGluZ3Mv
anMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjQzOTIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDkwLDYgKzQ5MCw4
IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS93aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdp
bi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd2luL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyV2luLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvd3gvQWNjZXNzaWJp
bGl0eU9iamVjdFd4LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVE
T01DYWxsYmFjay5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9N
Q2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2lu
ZG93LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5Lmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAn
LApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiA2NDM5MikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTI3Niw2ICsyNzYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5jcHAgXCAgICAKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAgXCAgICAKICAgICBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwIFwKKyAgICBiaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNhbGxi
YWNrLmNwcCBcCiAgICAgYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNw
cCBcCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
RE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcCBcCkBAIC0xMDgxLDYgKzEwODIsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIFwKICAgICBh
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBcCiAgICAgYmluZGluZ3MvU2NyaXB0Q29udHJv
bGxlckJhc2UuaCBcCisgICAgYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oIFwK
ICAgICBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oIFwKICAgICBiaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCBcCiAgICAgYmluZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRh
YmxlTWFwLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiA2NDM5MikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTQwODI4LDYgKzQwODI4LDE4IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xTY3JpcHRDb250cm9sbGVyQmFzZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
KyAJCQk8RmlsdGVyDQorCQkJCU5hbWU9ImdlbmVyaWMiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcZ2VuZXJpY1xBY3RpdmVET01DYWxsYmFjay5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGJpbmRpbmdzXGdlbmVyaWNcQWN0aXZlRE9NQ2FsbGJhY2suY3BwIg0KKwkJCQkJPg0KKwkJ
CQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQogCQkJPEZpbHRlcg0KIAkJCQlOYW1lPSJnZW5lcmlj
Ig0KIAkJCQk+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzNDksNiArNDM0OSw4IEBACiAJCUI1QjVEQzZB
MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyog
QWJzdHJhY3REYXRhYmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1QzExMjM5MTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcCAqLzsgfTsKIAkJQjVDMTEyM0MxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggKi87IH07CisJCUI1RDMxREZBMTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUQz
MURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suY3BwICovOyB9OworCQlC
NUQzMURGQjExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1RDMxREY5MTFDRjYxMEIwMDlG
MjJCNCAvKiBBY3RpdmVET01DYWxsYmFjay5oICovOyB9OwogCQlCNUQzNjAxQTExMkY4QjU2MDA0
OERFQTggLyogRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjVEMzYwMTkxMTJGOEI1NjAwNDhERUE4IC8qIERhdGFiYXNlQ2Fs
bGJhY2suaCAqLzsgfTsKIAkJQjcxRkU2REYxMTA5MUNCMzAwREFFRjc3IC8qIFByaW50Q29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc3NkQ0
M0ExMTA0NTI1RDAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAv
KiBGb250VHJhbnNjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNzM0QjE4MDExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3Bw
ICovOyB9OwpAQCAtOTk3Nyw2ICs5OTc5LDggQEAKIAkJQjVCNURDNjgxMTlCQjNENTAwMkE4Nzkw
IC8qIEFic3RyYWN0RGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWJzdHJhY3REYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNUMxMTIz
OTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2
NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCNUQzMURGODExQ0Y2MTBCMDA5RjIyQjQgLyogQWN0aXZlRE9NQ2FsbGJh
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWN0aXZlRE9NQ2Fs
bGJhY2suY3BwOyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1RDMxREY5MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVE
T01DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY3RpdmVET01D
YWxsYmFjay5oOyBwYXRoID0gZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCNUQzNjAxOTExMkY4QjU2MDA0OERFQTggLyogRGF0YWJhc2VD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZUNhbGxi
YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI3MzRCMTgwMTE5Qjk5MTEwMDY1
ODdCRCAvKiBGb250VHJhbnNjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGb250VHJhbnNjb2Rlci5jcHA7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2Nv
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjczNEIxODIxMTlCOTkxRDAw
NjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZvbnRUcmFuc2NvZGVyLmg7IHBhdGggPSB0cmFuc2NvZGVyL0ZvbnRUcmFuc2NvZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTYzNCw2ICsxNTYzOCwxNSBAQAogCQkJ
bmFtZSA9IGNmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQjVEMzFERjcx
MUNGNjBFNTAwOUYyMkI0IC8qIGdlbmVyaWMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCUI1RDMxREY4MTFDRjYxMEIwMDlGMjJCNCAvKiBBY3RpdmVET01D
YWxsYmFjay5jcHAgKi8sCisJCQkJQjVEMzFERjkxMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURP
TUNhbGxiYWNrLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGdlbmVyaWM7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQlCNzM0QjE3RjExOUI5OERCMDA2NTg3QkQgLyogdHJhbnNj
b2RlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNTY0
Niw2ICsxNTY1OSw3IEBACiAJCUJDMUEzNzkwMDk3QzZGOTcwMDE5RjNEOCAvKiBiaW5kaW5ncyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjVEMzFERjcx
MUNGNjBFNTAwOUYyMkI0IC8qIGdlbmVyaWMgKi8sCiAJCQkJQkMxQTM3OTMwOTdDNkZCMTAwMTlG
M0Q4IC8qIGpzICovLAogCQkJCUJDMUEzNzk0MDk3QzZGQzQwMDE5RjNEOCAvKiBvYmpjICovLAog
CQkJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9yLnBtICovLApAQCAt
MTcyNTEsNiArMTcyNjUsNyBAQAogCQkJCTI5QTgxMjQxMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nl
c3NpYmlsaXR5VGFibGVDb2x1bW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjNGMEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QTgxMjMxMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1RDMxREZCMTFDRjYxMEIwMDlGMjJCNCAvKiBB
Y3RpdmVET01DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDNERFNjkwRUE3NUMxRTAw
MjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYx
MTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMDIwNiw2ICsyMDIyMSw3IEBACiAJCQkJMjlBODEyMzUwRkJCOUMxRDAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUE4MTI0MDBG
QkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5QTgxMjI5MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmls
aXR5VGFibGVSb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjVEMzFERkExMUNGNjEwQjAwOUYy
MkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZF
MEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODREMEM0MDQxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUU5MTJBQTBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0FjdGl2ZURPTUNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZl
RE9NQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L0FjdGl2ZURPTUNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2suaCIKKworI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQ
cmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZGVzdHJv
eU9uQ29udGV4dFRocmVhZChQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4p
OworCitjbGFzcyBEZXN0cm95T25Db250ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEZXN0
cm95T25Db250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NPd25QdHI8QWN0aXZlRE9NT2JqZWN0
Q2FsbGJhY2tJbXBsPiBpbXBsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBE
ZXN0cm95T25Db250ZXh0VGhyZWFkVGFzayhpbXBsKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAgICAgICAg
ZGVzdHJveU9uQ29udGV4dFRocmVhZChtX2ltcGwucmVsZWFzZSgpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgRGVzdHJveU9uQ29udGV4dFRocmVhZFRhc2soUGFzc093blB0cjxBY3RpdmVET01P
YmplY3RDYWxsYmFja0ltcGw+IGltcGwpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgewor
ICAgIH0KKworICAgIE93blB0cjxBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw+IG1faW1wbDsK
K307CisKKy8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBhY2Nlc3NlZCBvbmx5IG9uIHRo
ZSBjb250ZXh0IHRocmVhZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgbG9ja3MuCitjbGFzcyBB
Y3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKKyAgICAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykK
KyAgICAgICAgLCBtX3N1c3BlbmRlZChmYWxzZSkKKyAgICAgICAgLCBtX3N0b3BwZWQoZmFsc2Up
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgQWN0aXZl
RE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBj
YW5TdXNwZW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3Vz
cGVuZCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAg
ICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgp
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1f
c3VzcGVuZGVkID0gZmFsc2U7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9zdG9wcGVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgYm9vbCBjYW5JbnZva2VDYWxsYmFjaygpCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIHJldHVybiAoIW1fc3Vz
cGVuZGVkICYmICFtX3N0b3BwZWQpOworICAgIH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIH0KKyAgICBNdXRleCYgbXV0ZXgoKSB7IHJldHVybiBtX211
dGV4OyB9CisKK3ByaXZhdGU6CisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBib29sIG1fc3VzcGVu
ZGVkOworICAgIGJvb2wgbV9zdG9wcGVkOworfTsKKworc3RhdGljIHZvaWQgZGVzdHJveU9uQ29u
dGV4dFRocmVhZChQYXNzT3duUHRyPEFjdGl2ZURPTU9iamVjdENhbGxiYWNrSW1wbD4gaW1wbCkK
K3sKKyAgICBPd25QdHI8QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsPiBpbXBsT3duUHRyID0g
aW1wbDsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBpbXBsT3duUHRy
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGltcGxP
d25QdHItPm11dGV4KCkpOworICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSkKKyAgICAgICAgY29udGV4dC0+cG9zdFRhc2soRGVzdHJveU9uQ29udGV4dFRocmVh
ZFRhc2s6OmNyZWF0ZShpbXBsT3duUHRyLnJlbGVhc2UoKSkpOworfQorCitBY3RpdmVET01DYWxs
YmFjazo6QWN0aXZlRE9NQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
KyAgICA6IG1faW1wbChuZXcgQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2tJbXBsKGNvbnRleHQpKQor
eworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Cit9CisKK0FjdGl2ZURP
TUNhbGxiYWNrOjp+QWN0aXZlRE9NQ2FsbGJhY2soKQoreworICAgIGRlc3Ryb3lPbkNvbnRleHRU
aHJlYWQobV9pbXBsLnJlbGVhc2UoKSk7Cit9CisKK2Jvb2wgQWN0aXZlRE9NQ2FsbGJhY2s6OmNh
bkludm9rZUNhbGxiYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5jYW5JbnZva2VD
YWxsYmFjaygpOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBBY3RpdmVET01DYWxsYmFj
azo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVET01DYWxsYmFjay5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY3RpdmVET01DYWxsYmFja19o
CisjZGVmaW5lIEFjdGl2ZURPTUNhbGxiYWNrX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBY3RpdmVET01PYmplY3RDYWxsYmFja0lt
cGw7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCisvLyBBIGNsYXNzIHRoYXQgYWxs
b3dzIGNhbGxiYWNrcyB0byBiZWhhdmUgbGlrZSBBY3RpdmVET01PYmplY3RzLCBhbmQgYWxzbwor
Ly8gYmUgZGVzdHJveWVkIG9uIHRoZSBjb250ZXh0IHRocmVhZCBvciBhbnkgb3RoZXIgdGhyZWFk
LgorY2xhc3MgQWN0aXZlRE9NQ2FsbGJhY2sgeworcHVibGljOgorICAgIEFjdGl2ZURPTUNhbGxi
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpOworICAgIH5BY3RpdmVET01DYWxs
YmFjaygpOworCisgICAgYm9vbCBjYW5JbnZva2VDYWxsYmFjaygpIGNvbnN0OworICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICAvLyBUaGUgQWN0aXZlRE9NT2JqZWN0IHBhcnQgb2YgdGhlIGNhbGxiYWNrLgor
ICAgIE93blB0cjxBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw+IG1faW1wbDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFjdGl2ZURPTUNhbGxiYWNrX2gKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw2IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkpTU1FMRXJyb3IuaCIKICNpbmNsdWRlICJKU1NRTFRyYW5zYWN0
aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNDEsMjIgKzQw
LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotYm9v
bCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3Iq
IGVycm9yKQorYm9vbCBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQogewotICAgIEFTU0VS
VChtX2RhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBpZiAoIW1fZGF0YSB8fCAhbV9k
YXRhLT5nbG9iYWxPYmplY3QoKSB8fCAhY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBSZWZQdHI8SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBwcm90
ZWN0KHRoaXMpOwogCiAgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2Jq
ZWN0KGNvbnRleHQsIG1faXNvbGF0ZWRXb3JsZC5nZXQoKSk7Ci0gICAgaWYgKCFnbG9iYWxPYmpl
Y3QpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBpZiB3ZSBjYW5ub3QgaW52b2tlIHRoZSBjYWxs
YmFjaywgcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbgogCi0gICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRh
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKGV4ZWMpLCB0cmFuc2FjdGlvbikpOwotICAgIGFyZ3MuYXBwZW5kKHRvSlMo
ZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSwgZXJyb3IpKTsK
KyAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIHRyYW5zYWN0aW9uKSk7CisgICAgYXJncy5hcHBl
bmQodG9KUyhleGVjLCBlcnJvcikpOwogCiAgICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBmYWxz
ZTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJh
aXNlZEV4Y2VwdGlvbik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rp
b25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUs
NyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNhbGxiYWNrID0g
SlNTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2Fs
bGJhY2sgPSBKU1NRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKSk7CiAgICAgfQogCiAgICAgUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2s7CkBAIC0xMDYsNyAr
MTA2LDcgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvckNh
bGxiYWNrID0gSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSkp
OworICAgICAgICBlcnJvckNhbGxiYWNrID0gSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpj
cmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCgpKSk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDY0MzkyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMjA4NCwxMiArMjA4NCwxMyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgog
ICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUgYW5kIGhlYWRlciBwcm90ZWN0aW9u
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgR2VuZXJhdGVIZWFkZXJDb250ZW50SGVh
ZGVyKCRkYXRhTm9kZSkpOwogCisgICAgJGhlYWRlckluY2x1ZGVzeyJBY3RpdmVET01DYWxsYmFj
ay5oIn0gPSAxOwogICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsK
ICAgICAkaGVhZGVySW5jbHVkZXN7IkpTQ2FsbGJhY2tEYXRhLmgifSA9IDE7CiAgICAgJGhlYWRl
ckluY2x1ZGVzeyI8d3RmL0ZvcndhcmQuaD4ifSA9IDE7CiAKICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiXG5uYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lIHtcbiIpOworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZh
Y2VOYW1lLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sge1xuIik7CiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgInB1YmxpYzpcbiIpOwogCiAgICAgIyBUaGUgc3RhdGljIGNyZWF0ZSgpIG1ldGhv
ZC4KQEAgLTIxMTIsMTAgKzIxMTMsMTMgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAg
ICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIENPTVBJTEVfQVNTRVJUKGZh
bHNlKSIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHZpcnR1YWwgIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5
cGUpIC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1
YWwgIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAiIC4g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOworCisgICAgICAgICAgICBteSBAYXJn
cyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiLCAiIC4gR2V0TmF0aXZlVHlwZSgkcGFy
YW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBh
cmdzLCBHZXROYXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgam9pbigiLCAi
LCBAYXJncykpOwogCiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiKTtcbiIpOwog
ICAgICAgICB9CkBAIC0yMTI4LDggKzIxMzIsNiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRl
cgogCiAgICAgIyBQcml2YXRlIG1lbWJlcnMKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IEpTQ2FsbGJhY2tEYXRhKiBtX2RhdGE7XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDtcbiIpOwotICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0O1xuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIp
OwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcblxu
Iik7CkBAIC0yMTU5LDE5ICsyMTYxLDIxIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50
YXRpb24KIAogICAgICMgQ29uc3RydWN0b3IKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xh
c3NOYW1lfTo6JHtjbGFzc05hbWV9KEpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogbV9k
YXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSlcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2JhbE9iamVjdC0+
d29ybGQoKSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKVxuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICwgbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2Jq
ZWN0KSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgIyBEZXN0cnVjdG9yCiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIke2NsYXNzTmFtZX06On4ke2NsYXNzTmFtZX0oKVxuIik7CiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSlcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBX
aGVuIHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCwgYWxsIHRhc2tzIHdpdGggYSByZWZlcmVuY2Ug
dG8gYSBjYWxsYmFja1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gc2hvdWxk
IGJlIGRlbGV0ZWQuIFNvIGlmIHRoZSBjb250ZXh0IGlzIE5VTEwsIHdlIGFyZSBvbiB0aGUgY29u
dGV4dCB0aHJlYWQuXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNvbnRl
eHQgfHwgY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpXG4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgZGVsZXRlIG1fZGF0YTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGVsc2VcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERlbGV0ZUNhbGxiYWNrRGF0YVRhc2s6OmNyZWF0
ZShtX2RhdGEpKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBjb250ZXh0
LT5wb3N0VGFzayhEZWxldGVDYWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7XG4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZm5kZWYgTkRFQlVHXG4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBtX2RhdGEgPSAwO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIjZW5kaWZcbiIpOwpAQCAtMjE4OSwyNCArMjE5MywyMiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEFkZEluY2x1ZGVz
Rm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5
cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSAuICIo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBl
KSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIp
OwogCisgICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFjaCBteSAk
cGFyYW0gKEBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHBh
cmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgIiAu
IEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAg
ICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUpIC4gIiAi
IC4gJHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiKVxuIik7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQobV9kYXRhKTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGNvbnRleHQpO1xuXG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghY2FuSW52b2tlQ2Fs
bGJhY2soKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiB0cnVlO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJl
ZlB0cjwkY2xhc3NOYW1lPiBwcm90ZWN0KHRoaXMpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7XG5c
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRl
ZFdvcmxkLmdldCgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFnbG9iYWxPYmplY3QpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0g
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAK
ICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDY0MzkyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTE4OSwxMSArMTE4OSw3IEBAIEVORAogICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAkcGFyYW1JbmRleCB8fCAhYXJnc1skcGFy
YW1JbmRleF0tPklzT2JqZWN0KCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIp
OwotICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlZvaWRDYWxsYmFjayIpIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjwiIC4g
JHBhcmFtZXRlci0+dHlwZSAuICI+ICRwYXJhbWV0ZXJOYW1lID0gIiAuICRjbGFzc05hbWUgLiAi
OjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7
XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1l
dGVyTmFtZSA9ICIgLiAkY2xhc3NOYW1lIC4gIjo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdKTtc
biIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1ldGVyTmFtZSA9ICR7
Y2xhc3NOYW1lfTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCBnZXRTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpO1xuIik7CiAgICAgICAgICAgICAkcGFyYW1JbmRleCsrOwogICAgICAgICAgICAg
bmV4dDsKICAgICAgICAgfQpAQCAtMjEyOSwyNSArMjEyNSwyNSBAQCBzdWIgR2VuZXJhdGVDYWxs
YmFja0hlYWRlcgogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCBHZW5lcmF0ZUhlYWRlckNvbnRlbnRIZWFkZXIoJGRhdGFOb2RlKSk7
CiAKLSAgICBpZiAoIiRpbnRlcmZhY2VOYW1lLmgiIGx0ICJXb3JsZENvbnRleHRIYW5kbGUuaCIp
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5h
bWUuaFwiXG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiV29y
bGRDb250ZXh0SGFuZGxlLmhcIlxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiV29ybGRDb250ZXh0SGFuZGxlLmhcIlxuIik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIiRpbnRlcmZhY2VOYW1lLmhcIlxu
Iik7Ci0gICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8djguaD5cbiIp
OwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD5cbiIp
OworICAgIG15IEB1bnNvcnRlZEluY2x1ZGVzID0gKCk7CisgICAgcHVzaChAdW5zb3J0ZWRJbmNs
dWRlcywgIiNpbmNsdWRlIFwiQWN0aXZlRE9NQ2FsbGJhY2suaFwiIik7CisgICAgcHVzaChAdW5z
b3J0ZWRJbmNsdWRlcywgIiNpbmNsdWRlIFwiJGludGVyZmFjZU5hbWUuaFwiIik7CisgICAgcHVz
aChAdW5zb3J0ZWRJbmNsdWRlcywgIiNpbmNsdWRlIFwiV29ybGRDb250ZXh0SGFuZGxlLmhcIiIp
OworICAgIHB1c2goQHVuc29ydGVkSW5jbHVkZXMsICIjaW5jbHVkZSA8djguaD4iKTsKKyAgICBw
dXNoKEB1bnNvcnRlZEluY2x1ZGVzLCAiI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Iik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgam9pbigiXG4iLCBzb3J0IEB1bnNvcnRlZEluY2x1ZGVzKSk7
CiAgICAgCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xu
XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGNsYXNzTmFtZSA6IHB1Ymxp
YyAkaW50ZXJmYWNlTmFtZSB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5cbm5h
bWVzcGFjZSBXZWJDb3JlIHtcblxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7XG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRpbnRlcmZhY2VOYW1lLCBwdWJsaWMgQWN0aXZl
RE9NQ2FsbGJhY2sge1xuIik7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8JHtjbGFzc05hbWV9PiBjcmVhdGUodjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8JHtjbGFzc05hbWV9
PiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOwot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7Y2xhc3NOYW1lfSh2YWx1ZS0+VG9PYmplY3Qo
KSkpOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgJHtjbGFzc05hbWV9KHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB+JHtjbGFzc05hbWV9KCk7CkBAIC0yMTY1LDExICsyMTYxLDEzIEBAIEVORAog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIENPTVBJTEVfQVNT
RVJUKGZhbHNlKSIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZpcnR1YWwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUg
LiAiKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHZpcnR1YWwgIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUpIC4gIiAiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUg
LiAiKCIpOworCisgICAgICAgICAgICBteSBAYXJncyA9ICgpOwogICAgICAgICAgICAgZm9yZWFj
aCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiLCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAi
IC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRpdmVU
eXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwogICAg
ICAgICAgICAgfQotCisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBqb2luKCIsICIs
IEBhcmdzKSk7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiKTtcbiIpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjE3Nyw3ICsyMTc1LDcgQEAgRU5ECiAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgPDxFTkQpOwogCiBwcml2YXRlOgotICAgICR7Y2xhc3NOYW1lfSh2ODo6TG9jYWw8
djg6Ok9iamVjdD4pOworICAgICR7Y2xhc3NOYW1lfSh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IG1fY2FsbGJhY2s7CiAgICAgV29ybGRDb250ZXh0SGFuZGxlIG1fd29ybGRDb250ZXh0OwpAQCAt
MjIwOSw4ICsyMjA3LDkgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+XG5cbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0odjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrKQotICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKKyR7Y2xhc3NOYW1lfTo6JHtjbGFzc05h
bWV9KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKKyAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGNvbnRleHQpCisgICAgLCBtX2Nh
bGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQogICAgICwg
bV93b3JsZENvbnRleHQoVXNlQ3VycmVudFdvcmxkKQogewogfQpAQCAtMjIzNCwyMiArMjIzMywy
NiBAQCBFTkQKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
IC4gIihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0Iik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSAuICIoIik7CiAKKyAgICAgICAgICAgIG15IEBhcmdzID0gKCk7CiAgICAgICAg
ICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFkZElu
Y2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiLCAiIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRp
dmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW0tPm5hbWUpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwg
QGFyZ3MpKTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoY29udGV4dCwgbV93b3JsZENvbnRl
eHQpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIG1fd29ybGRDb250ZXh0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpXG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0
KTtcblxuIik7CiAKLSAgICAgICAgICAgIG15IEBhcmd2cyA9ICgpOworICAgICAgICAgICAgQGFy
Z3MgPSAoKTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAg
ICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtwYXJhbU5h
bWV9SGFuZGxlID0gdG9WOCgke3BhcmFtTmFtZX0pO1xuIik7CkBAIC0yMjU3LDE0ICsyMjYwLDE0
IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBDUkFT
SCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiB0cnVlO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJndnMsICIgICAgICAgICR7cGFyYW1OYW1l
fUhhbmRsZSIpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsICIgICAgICAgICR7cGFyYW1O
YW1lfUhhbmRsZSIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBAYXJndnMpKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsXG4iLCBAYXJncykpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiAgICB9O1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlO1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNhbGxiYWNr
KG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBjYWxsYmFja1JldHVy
blZhbHVlLCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMp
IC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw5ICszNSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBtX2RhdGEobmV3IEpTQ2FsbGJhY2tE
YXRhKGNhbGxiYWNrLCBnbG9iYWxPYmplY3QpKQotICAgICwgbV9pc29sYXRlZFdvcmxkKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSkKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICA6IEFjdGl2ZURPTUNhbGxiYWNr
KGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhKG5l
dyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSkKIHsKIH0KIApAQCAtNDYs
NyArNDUsNyBAQCBKU1Rlc3RDYWxsYmFjazo6fkpTVGVzdENhbGxiYWNrKCkKICAgICBpZiAobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKICAgICAgICAgZGVsZXRl
IG1fZGF0YTsKICAgICBlbHNlCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkpOworICAgICAgICBt
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNr
KERlbGV0ZUNhbGxiYWNrRGF0YVRhc2s6OmNyZWF0ZShtX2RhdGEpKTsKICNpZm5kZWYgTkRFQlVH
CiAgICAgbV9kYXRhID0gMDsKICNlbmRpZgpAQCAtNTQsMjAgKzUzLDE2IEBAIEpTVGVzdENhbGxi
YWNrOjp+SlNUZXN0Q2FsbGJhY2soKQogCiAvLyBGdW5jdGlvbnMKIAotYm9vbCBKU1Rlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQ2xhc3MxKiBjbGFzczFQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFyYW0pCiB7Ci0gICAgQVNTRVJUKG1fZGF0
YSk7Ci0gICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3Rl
Y3QodGhpcyk7CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0g
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qo
Y29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgpKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAg
ICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGNsYXNzMVBhcmFtKSk7CiAKQEAgLTc2LDIwICs3MSwx
NiBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQCiAgICAgcmV0dXJu
ICFyYWlzZWRFeGNlcHRpb247CiB9CiAKLWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aENsYXNzMlBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIENsYXNzMiogY2xh
c3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQorYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2Fs
bGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJiBz
dHJBcmcpCiB7Ci0gICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgQVNTRVJUKGNvbnRleHQpOworICAg
IGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBS
ZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgbV9pc29sYXRlZFdvcmxkLmdldCgp
KTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIGNsYXNz
MlBhcmFtKSk7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXhlYywgc3RyQXJnKSk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmgJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE0IEBACiAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmgiCiAjaW5jbHVkZSAiVGVzdENhbGxiYWNrLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKU1Rl
c3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2sgeworY2xhc3MgSlNUZXN0Q2FsbGJhY2sg
OiBwdWJsaWMgVGVzdENhbGxiYWNrLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBjcmVhdGUoSlNDOjpKU09i
amVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewpA
QCAtMzksMTcgKzQwLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5KU1Rlc3RDYWxsYmFjaygp
OwogCiAgICAgLy8gRnVuY3Rpb25zCi0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNz
MVBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczEqIGNsYXNzMVBhcmFtKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKLSAgICBD
T01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmlydHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJl
dHVyblR5cGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMyogY2xhc3MzUGFyYW0pOwot
ICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBD
bGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJhbSk7CisgICAgdmly
dHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNv
bnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmlydHVh
bCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoQ2xhc3MzKiBjbGFzczNQYXJhbSk7
CisgICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xh
c3M2KiBjbGFzczZQYXJhbSk7CiAKIHByaXZhdGU6CiAgICAgSlNUZXN0Q2FsbGJhY2soSlNDOjpK
U09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU0NhbGxiYWNr
RGF0YSogbV9kYXRhOwotICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3Js
ZDsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiA2NDM5
MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVY4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4g
Y2FsbGJhY2spCi0gICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcoY2FsbGJhY2spKQorVjhUZXN0Q2FsbGJhY2s6OlY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IEFjdGl2ZURPTUNhbGxiYWNrKGNvbnRleHQpCisgICAgLCBtX2NhbGxiYWNrKHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQogICAgICwgbV93b3JsZENvbnRleHQo
VXNlQ3VycmVudFdvcmxkKQogewogfQpAQCAtNDcsMTEgKzQ4LDE0IEBAIFY4VGVzdENhbGxiYWNr
Ojp+VjhUZXN0Q2FsbGJhY2soKQogCiAvLyBGdW5jdGlvbnMKIAotYm9vbCBWOFRlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgQ2xhc3MxKiBjbGFzczFQYXJhbSkKK2Jvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFyYW0pCiB7CisgICAgaWYgKCFjYW5JbnZva2VD
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRv
VjhDb250ZXh0KGNvbnRleHQsIG1fd29ybGRDb250ZXh0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IG1fd29ybGRDb250ZXh0KTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY4LDE0ICs3MiwxNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpj
YWxsYmFja1dpdGhDbGFzczFQCiAgICAgfTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1
ZSA9IGZhbHNlOwotICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJn
diwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4dCk7CisgICAgcmV0dXJuICFpbnZva2VDYWxs
YmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwogfQogCi1ib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhD
bGFzczJQYXJhbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDbGFzczIqIGNsYXNz
MlBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZykKK2Jvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxi
YWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3Ry
QXJnKQogeworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29u
dGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4
Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC05OCw3ICsxMDUs
NyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQCiAgICAgfTsKIAog
ICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgIHJldHVybiAhaW52b2tl
Q2FsbGJhY2sobV9jYWxsYmFjaywgMiwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgY29udGV4
dCk7CisgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBjYWxs
YmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNiArMjMsNyBAQAogI2lmbmRlZiBWOFRlc3RDYWxsYmFja19oCiAjZGVmaW5lIFY4VGVzdENh
bGxiYWNrX2gKIAorI2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVGVz
dENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8
djguaD4KQEAgLTMwLDI0ICszMSwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFY4VGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjayB7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworCitjbGFzcyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJh
Y2ssIHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOFRlc3RDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWOFRlc3RDYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSkpOworICAgICAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhUZXN0Q2FsbGJhY2so
dmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5WOFRl
c3RDYWxsYmFjaygpOwogCiAgICAgLy8gRnVuY3Rpb25zCi0gICAgdmlydHVhbCBib29sIGNhbGxi
YWNrV2l0aENsYXNzMVBhcmFtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDbGFzczEqIGNsYXNz
MVBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3Ry
QXJnKTsKLSAgICBDT01QSUxFX0FTU0VSVChmYWxzZSkgICAgdmlydHVhbCBpbnQgY2FsbGJhY2tX
aXRoTm9uQm9vbFJldHVyblR5cGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIENsYXNzMyogY2xh
c3MzUGFyYW0pOwotICAgIHZpcnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJh
bSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xh
c3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKKyAgICBDT01QSUxFX0FTU0VSVChmYWxz
ZSkgICAgdmlydHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoQ2xhc3MzKiBj
bGFzczNQYXJhbSk7CisgICAgdmlydHVhbCBpbnQgY3VzdG9tQ2FsbGJhY2soQ2xhc3M1KiBjbGFz
czVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7CiAKIHByaXZhdGU6Ci0gICAgVjhUZXN0Q2Fs
bGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+KTsKKyAgICBWOFRlc3RDYWxsYmFjayh2ODo6TG9j
YWw8djg6Ok9iamVjdD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IG1fY2FsbGJhY2s7CiAgICAgV29ybGRDb250ZXh0SGFuZGxlIG1f
d29ybGRDb250ZXh0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCShyZXZpc2lvbiA2NDM5MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2OSw3ICs4Njks
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDCiAgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8PSAwIHx8ICFhcmdzWzBdLT5Jc09iamVjdCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIFJlZlB0cjxU
ZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNr
QXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CkBA
IC04ODEsNyArODgxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRo
TgogICAgIGludCBub25DYWxsYmFjayA9IHRvSW50MzIoYXJnc1swXSk7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMSB8fCAhYXJnc1sxXS0+SXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNh
bGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsKKyAgICBSZWZQdHI8VGVz
dENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSwgZ2V0
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpbXAtPm1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxsYmFjayk7CiAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQpAQCAtODk2LDcgKzg5Niw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEMKICAgICB9CiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMCB8fCAhYXJnc1swXS0+SXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNr
ID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBSZWZQdHI8VGVzdENhbGxi
YWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlv
bmFsQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDY0MzkyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNRTFRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgU1FMRXJyb3IqIGVycm9yKQorYm9vbCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMRXJyb3IqIGVy
cm9yKQogeworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChjb250ZXh0LCBtX3dvcmxkQ29u
dGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CiAgICAgaWYgKHY4
Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NSwxNSArNjgs
MTIgQEAgYm9vbCBWOFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZQogICAgICAgICBl
cnJvckhhbmRsZQogICAgIH07CiAKLSAgICAvLyBQcm90ZWN0IHRoZSBjb250ZXh0IHVudGlsIHRo
ZSBjYWxsYmFjayByZXR1cm5zLgotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBw
cm90ZWN0b3IoY29udGV4dCk7Ci0KICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxz
ZTsKICAgICAvLyBTdGVwIDY6IElmIHRoZSBlcnJvciBjYWxsYmFjayByZXR1cm5zIGZhbHNlLCB0
aGVuIG1vdmUgb24gdG8gdGhlIG5leHQKICAgICAvLyBzdGF0ZW1lbnQsIGlmIGFueSwgb3Igb250
byB0aGUgbmV4dCBvdmVyYWxsIHN0ZXAgb3RoZXJ3aXNlLiBPdGhlcndpc2UsCiAgICAgLy8gdGhl
IGVycm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0dXJuIGZhbHNlLCBvciB0aGVyZSB3YXMgbm8gZXJy
b3IgY2FsbGJhY2suCiAgICAgLy8gSnVtcCB0byB0aGUgbGFzdCBzdGVwIGluIHRoZSBvdmVyYWxs
IHN0ZXBzLgotICAgIHJldHVybiBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBj
YWxsYmFja1JldHVyblZhbHVlLCBjb250ZXh0KSB8fCBjYWxsYmFja1JldHVyblZhbHVlOworICAg
IHJldHVybiBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2LCBjYWxsYmFja1JldHVy
blZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHx8IGNhbGxiYWNrUmV0dXJuVmFsdWU7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MDYsMTIgKzgwNiwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01X
aW5kb3c6Om9wZW5ECiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUo
VjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPj0gNSkgewogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3Jl
YXRpb25DYWxsYmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAg
ICAgICBjcmVhdGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0
XSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNl
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhYmFzZTo6Y2hhbmdlCiAgICAgICAgIGlmICghYXJn
c1syXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlT
TUFUQ0hfRVJSKTsKIAotICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFj
azo6Y3JlYXRlKGFyZ3NbMl0pOworICAgICAgICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25D
YWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0K
IAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
azsKQEAgLTczLDcgKzczLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YWJhc2U6OmNo
YW5nZQogICAgICAgICBpZiAoIWFyZ3NbM10tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgZXJyb3JDYWxsYmFj
ayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUoYXJnc1szXSk7CisgICAg
ICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRl
KGFyZ3NbM10sIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxW
OEN1c3RvbVZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrOwpAQCAtMTAyLDE0ICsxMDIsMTQg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVUcmFucwogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSk7
CisgICAgUmVmUHRyPFY4U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KTsKIAogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKGFy
Z3NbMV0pKSB7CiAgICAgICAgIGlmICghYXJnc1sxXS0+SXNPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAgICBlcnJvckNh
bGxiYWNrID0gVjhTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsK
KyAgICAgICAgZXJyb3JDYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpj
cmVhdGUoYXJnc1sxXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgUmVm
UHRyPFY4Q3VzdG9tVm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2s7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlU3luY0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZVN5bmNDdXN0b20uY3BwCShy
ZXZpc2lvbiA2NDM5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VT
eW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOERhdGFiYXNlU3luYzo6Y2gKIAogICAgIERhdGFiYXNlU3luYyogZGF0
YWJhc2UgPSBWOERhdGFiYXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiBjYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZpbmVk
T3JOdWxsKGFyZ3NbMl0pKSB7CiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgICAg
ICBjYWxsYmFjayA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzJd
KTsKKyAgICAgICAgY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOjpjcmVh
dGUoYXJnc1syXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkBAIC03OSw3ICs4MCw4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY3JlYXRlVHJhbnMKIAogICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UgPSBWOERhdGFi
YXNlU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBSZWZQdHI8VjhTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrOjpjcmVhdGUoYXJnc1swXSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBSZWZQ
dHI8VjhTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24o
Y2FsbGJhY2sucmVsZWFzZSgpLCByZWFkT25seSwgZWMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDY0MzkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlv
bkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDIyICs5MCwyMiBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhTUUxUcmFuc2FjdGlvbjo6CiAKICAgICBTUUxUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24gPSBWOFNRTFRyYW5zYWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAot
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQorICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxi
YWNrPiBjYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIgJiYgIWlzVW5kZWZpbmVk
T3JOdWxsKGFyZ3NbMl0pKSB7CiAgICAgICAgIGlmICghYXJnc1syXS0+SXNPYmplY3QoKSkKICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAg
Y2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVudENhbGxiYWNrOjpjcmVhdGUoYXJnc1syXSk7CisgICAg
ICAgIGNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIAogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMyAm
JiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1szXSkpIHsKICAgICAgICAgaWYgKCFhcmdzWzNdLT5J
c09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9F
UlIpOwotICAgICAgICBlcnJvckNhbGxiYWNrID0gVjhTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
OjpjcmVhdGUoYXJnc1szXSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2sgPSBWOFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s6OmNyZWF0ZShhcmdzWzNdLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
ICAgICB9CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNjQzOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTIgKzE1NywxMyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvCiAKICAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnZXRT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gNSkgewogICAgICAgICBp
ZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IFY4RGF0YWJh
c2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrID0g
VjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xODUsMTIgKzE4Niwx
MyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvCiAKICAgICBXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0g
NSkgewogICAgICAgICBpZiAoIWFyZ3NbNF0tPklzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICAgICAgY3JlYXRpb25DYWxs
YmFjayA9IFY4RGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbNF0pOworICAgICAgICBjcmVh
dGlvbkNhbGxiYWNrID0gVjhEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXJnc1s0XSwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9k
b20vQWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjIgKzM3LDE0IEBA
IEFjdGl2ZURPTU9iamVjdDo6QWN0aXZlRE9NT2JqZWN0KFNjcmlwdEUKICAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICwgbV9wZW5kaW5n
QWN0aXZpdHlDb3VudCgwKQogewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIEFTU0VSVCgobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCi0g
ICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYm
IGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKLSNlbmRpZgotCisgICAg
QVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y3JlYXRlZEFjdGl2ZURPTU9iamVjdCh0aGlzLCB1
cGNhc3RQb2ludGVyKTsKIH0KIAogQWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KCkK
IHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSB7Ci0jaWYgRU5BQkxFKFdPUktF
UlMpCi0gICAgICAgIEFTU0VSVCgobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50
KCkgJiYgaXNNYWluVGhyZWFkKCkpCi0gICAgICAgICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAmJiBjdXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPnRocmVhZCgpLT50
aHJlYWRJRCgpKSk7Ci0jZW5kaWYKLQorICAgICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+ZGVzdHJveWVkQWN0aXZlRE9NT2JqZWN0KHRoaXMpOwogICAgIH0KIH0KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG5ldyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKGRhdGFiYXNlLCBjcmVhdGlv
bkNhbGxiYWNrKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCiAgICAgewotICAgICAgICBtX2NyZWF0aW9uQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KGNvbnRleHQsIG1fZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBtX2Ny
ZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UuZ2V0KCkpOwogICAgIH0KIAog
cHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gNjQz
OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMyArMzksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFz
ZTsKIGNsYXNzIERhdGFiYXNlU3luYzsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
IGNsYXNzIERhdGFiYXNlQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFz
ZUNhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2VDYWxsYmFjaygpIHsg
fQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RGF0YWJhc2UqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBEYXRhYmFzZVN5bmMqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRs
ZUV2ZW50KERhdGFiYXNlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChEYXRh
YmFzZVN5bmMqKSA9IDA7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAko
cmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0
YWJhc2VTeW5jOjpvCiAgICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJh
Y2suZ2V0KCkpIHsKICAgICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7CiAg
ICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGZv
ciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICBjcmVhdGlvbkNhbGxi
YWNrLT5oYW5kbGVFdmVudChjb250ZXh0LCBkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIGNyZWF0
aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZGF0YWJhc2U7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkocmV2aXNpb24g
NjQzOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcwLDkgKzE3MCw5IEBAIGJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2so
U1FMVHIKICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2Fj
dGlvbiBlcnJvciBjYWxsYmFjay4KICAgICBpZiAobV9lcnJvcikgewogICAgICAgICBBU1NFUlQo
bV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwor
ICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CiAgICAgfSBlbHNlIGlmIChtX3N0YXRl
bWVudENhbGxiYWNrKQotICAgICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJh
Y2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisgICAgICAgIGNhbGxi
YWNrRXJyb3IgPSAhbV9zdGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24s
IG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3Ms
IHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkocmV2aXNpb24gNjQz
OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTQgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FM
UmVzdWx0U2V0OwogCiBjbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPFNRTFN0YXRlbWVudENhbGxiYWNrPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U1FMU3RhdGVtZW50Q2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0Kikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJl
c3VsdFNldCopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gNjQzOTIpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFzcyBTUUxFcnJvcjsKIAogY2xhc3MgU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTEVycm9yKikgPSAwOwog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA2NDM5
MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rp
b25DCiAKICAgICBpZiAobV9jYWxsYmFjaykgewogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2Vk
ID0gdHJ1ZTsKLSAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFj
ay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlz
KTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFu
ZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKICAg
ICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVw
IDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdAogICAg
IC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICBpZiAo
bV9lcnJvckNhbGxiYWNrKSB7Ci0gICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQo
bV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3RyYW5zYWN0aW9uRXJyb3Iu
Z2V0KCkpOworICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rp
b25FcnJvci5nZXQoKSk7CiAgICAgICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7CiAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDY0
MzkyKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogCiBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFNRTFRyYW5zYWN0aW9uKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVFdmVudChTUUxUcmFuc2FjdGlvbiopID0gMDsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDY0MzkyKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMyArMzUsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU1FMRXJyb3I7CiAKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgU1FMRXJyb3IqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUV2ZW50KFNRTEVycm9yKikgPSAwOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9uIDY0MzkyKQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBA
QCBFeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oCiBFeGNlcHRpb25Db2Rl
IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZSgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgKG1fY2FsbGJhY2sgJiYgIW1fY2FsbGJhY2stPmhhbmRs
ZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcykpKSB7Cisg
ICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAobV9jYWxsYmFjayAmJiAhbV9jYWxsYmFj
ay0+aGFuZGxlRXZlbnQodGhpcykpKSB7CiAgICAgICAgIG1fY2FsbGJhY2sgPSAwOwogICAgICAg
ICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKICAgICB9CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gNjQzOTIp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKIAog
Ly8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25s
eSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNr
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2soKSB7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFNRTFRyYW5zYWN0aW9uU3luYyopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQo
U1FMVHJhbnNhY3Rpb25TeW5jKikgPSAwOwogfTsKIAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQz
OTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MCBAQAorMjAxMC0wNy0zMCAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3Vy
ZSBhbGwgREIgY2FsbGJhY2tzIHJ1biBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICAq
IGh0dHAvdGVzdHMvc3RvcmFnZTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdl
L2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1p
bi1jb3JyZWN0LWNvbnRleHQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9y
YWdlL3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291
cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxs
YmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtb3V0cHV0LWZyYW1lLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFy
ZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVk
LWluLWNvcnJlY3QtY29udGV4dC10aGlyZC1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJl
Y3QtY29udGV4dC5jZ2k6IEFkZGVkLgorCiAyMDEwLTA3LTMwICBBbmRyZXcgV2lsc29uICA8YXR3
aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgcm9sbGJhY2sgZm9yIHI2
NDM3NSBiZWNhdXNlIGl0IGJyb2tlIGNocm9taXVtIHRlc3RzCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3Jh
Z2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9jYWxsYmFja3Mt
YXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUyIEBACisKKworLS0tLS0tLS0KK0ZyYW1lOiAnb3V0cHV0RnJhbWUnCistLS0t
LS0tLQorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgYWxsIERCIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGlu
IHRoZSBjb250ZXh0IHRoZXkgd2VyZSBjcmVhdGVkLCByYXRoZXIgdGhhbiB0aGUgY29udGV4dCB3
aGVyZSB0aGUgREIgaGFuZGxlIHdhcyBjcmVhdGVkLgorUEFTUzogVGhlIHRyYW5zYWN0aW9uIGNh
bGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1JlZmVycmVyOiBodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQt
aW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sCitQQVNTOiBUaGUgc3RhdGVtZW50
IHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVm
ZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3Mt
YXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKK1BBU1M6IFRo
ZSBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250
ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9j
YWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwK
K1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBj
b3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2Uv
cmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1zZWNvbmQt
ZnJhbWUuaHRtbAorUEFTUzogVGhlIHRyYW5zYWN0aW9uIHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIGNh
bGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNv
bnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3
YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4w
LjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJl
Y3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbAorUEFTUzogVGhlIHN0YXRlbWVudCBzdWNjZXNz
IGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1JlZmVycmVyOiBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxs
ZWQtaW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sCitQQVNTOiBUaGUgc3RhdGVt
ZW50IGVycm9yIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4KK1Jl
ZmVycmVyOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tz
LWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sCitQQVNTOiBU
aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBj
b250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9zdG9yYWdlL3Jlc291cmNl
cy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0
bWwKK1BBU1M6IFRoZSB0cmFuc2FjdGlvbiBzdWNjZXNzIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4g
dGhlIGNvcnJlY3QgY29udGV4dC4KK1JlZmVycmVyOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvc3Rv
cmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXNl
Y29uZC1mcmFtZS5odG1sCitQQVNTOiBUaGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxl
ZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LgorUmVmZXJyZXI6IGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRl
eHQtc2Vjb25kLWZyYW1lLmh0bWwKK1BBU1M6IFRoZSBzdGF0ZW1lbnQgc3VjY2VzcyBjYWxsYmFj
ayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNv
cnJlY3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbAorUEFTUzogVGhlIHN0YXRlbWVudCBlcnJv
ciBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCitSZWZlcnJlcjog
aHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2Fs
bGVkLWluLWNvcnJlY3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbAorUEFTUzogVGhlIHRyYW5z
YWN0aW9uIGVycm9yIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4K
K1JlZmVycmVyOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJh
Y2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXNlY29uZC1mcmFtZS5odG1sCitQQVNT
OiBUaGUgdHJhbnNhY3Rpb24gc3VjY2VzcyBjYWxsYmFjayB3YXMgY2FsbGVkIGluIHRoZSBjb3Jy
ZWN0IGNvbnRleHQuCitSZWZlcnJlcjogaHR0cDovLzEyNy4wLjAuMTo4MDAwL3N0b3JhZ2UvcmVz
b3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1zZWNvbmQtZnJh
bWUuaHRtbAorCisKKy0tLS0tLS0tCitGcmFtZTogJ2ZpcnN0RnJhbWUnCistLS0tLS0tLQorCisK
Ky0tLS0tLS0tCitGcmFtZTogJ3NlY29uZEZyYW1lJworLS0tLS0tLS0KKworCistLS0tLS0tLQor
RnJhbWU6ICd0aGlyZEZyYW1lJworLS0tLS0tLS0KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9jYWxsYmFja3Mt
YXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0
LWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBzZXR1cEFuZFJ1bkZyYW1lc1Rlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hp
bGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAgdG9wLmZyYW1lc1sxXS5ydW5UZXN0KCk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxmcmFtZXNldCBvbmxvYWQ9InNldHVwQW5kUnVuRnJh
bWVzVGVzdCgpIj4KKzxmcmFtZSBuYW1lPSJvdXRwdXRGcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2Fs
bGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sIj4K
KzxmcmFtZSBuYW1lPSJmaXJzdEZyYW1lIiBzcmM9InJlc291cmNlcy9jYWxsYmFja3MtYXJlLWNh
bGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbCI+Cis8ZnJhbWUgbmFtZT0i
c2Vjb25kRnJhbWUiIHNyYz0icmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNvcnJl
Y3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbCI+Cis8ZnJhbWUgbmFtZT0idGhpcmRGcmFtZSIg
c3JjPSJyZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXRo
aXJkLWZyYW1lLmh0bWwiPgorPC9mcmFtZXNldD4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29y
cmVjdC1jb250ZXh0LWZpcnN0LWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3Jy
ZWN0LWNvbnRleHQtZmlyc3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29y
cmVjdC1jb250ZXh0LWZpcnN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgordmFyIGRiID0gb3BlbkRhdGFiYXNlKCJDYWxs
YmFja3NBcmVDYWxsZWRJbkNvcnJlY3RDb250ZXh0V29ya2VyVGVzdCIsICIxLjAiLCAiIiwgMSk7
CisKK2Z1bmN0aW9uIHByaW50UmVmZXJyZXIoKQoreworICAgIHZhciByZXEgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgICByZXEub3BlbigiR0VUIiwgImNhbGxiYWNrcy1hcmUtY2FsbGVkLWlu
LWNvcnJlY3QtY29udGV4dC5jZ2kiLCBmYWxzZSk7CisgICAgcmVxLnNlbmQobnVsbCk7CisgICAg
dG9wLmZyYW1lc1swXS5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4
dCArPSAiUmVmZXJyZXI6ICIgKyByZXEucmVzcG9uc2VUZXh0OworfQorCitmdW5jdGlvbiBsb2dD
YWxsYmFjayhjYWxsYmFja1R5cGUpCit7CisgICAgdG9wLmZyYW1lc1swXS5kb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSAiRkFJTDogVGhlICIgKyBjYWxsYmFj
a1R5cGUgKyAiIGNhbGxiYWNrIHdhcyBjYWxsZWQgaW4gdGhlIHdyb25nIGNvbnRleHQuXG4iCisg
ICAgcHJpbnRSZWZlcnJlcigpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICAvLyB0
ZXN0IHRoYXQgdHJhbnNhY3Rpb24gY2FsbGJhY2tzIGRlZmluZWQgaW4gYW5vdGhlciBmcmFtZSBh
cmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBmcmFtZQorICAgIGRiLnRyYW5zYWN0
aW9uKHRvcC5mcmFtZXNbMl0uZmFpbGluZ1RyYW5zYWN0aW9uQ2FsbGJhY2ssIHRvcC5mcmFtZXNb
Ml0uZXJyb3JUcmFuc2FjdGlvbkNhbGxiYWNrKTsKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeyB9LCBudWxsLCB0b3AuZnJhbWVzWzJdLnN1Y2Nlc3NUcmFuc2FjdGlvbkNhbGxiYWNr
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUt
Y2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1vdXRwdXQtZnJhbWUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUt
Y2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC1vdXRwdXQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFy
ZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LW91dHB1dC1mcmFtZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+CitUaGlz
IHRlc3QgdGVzdHMgdGhhdCBhbGwgREIgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIGNvbnRl
eHQgdGhleSB3ZXJlIGNyZWF0ZWQsIHJhdGhlciB0aGFuIHRoZSBjb250ZXh0IHdoZXJlIHRoZSBE
QiBoYW5kbGUgd2FzIGNyZWF0ZWQuCis8cHJlIGlkPSJjb25zb2xlIj4KK0ZBSUxVUkU6IHRlc3Qg
ZGlkbid0IHJ1bi4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3Jy
ZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3Jy
ZWN0LWNvbnRleHQtc2Vjb25kLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNv
cnJlY3QtY29udGV4dC1zZWNvbmQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Cit2YXIgZnJhbWUgPSAxOworCitmdW5jdGlv
biBwcmludFJlZmVycmVyKCkKK3sKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
CisgICAgcmVxLm9wZW4oIkdFVCIsICJjYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNv
bnRleHQuY2dpIiwgZmFsc2UpOworICAgIHJlcS5zZW5kKG51bGwpOworICAgIHRvcC5mcmFtZXNb
MF0uZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gIlJlZmVy
cmVyOiAiICsgcmVxLnJlc3BvbnNlVGV4dCArICJcbiI7Cit9CisKK2Z1bmN0aW9uIGxvZ0NhbGxi
YWNrKGNhbGxiYWNrVHlwZSkKK3sKKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9ICJQQVNTOiBUaGUgIiArIGNhbGxiYWNrVHlw
ZSArICIgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0aGUgY29ycmVjdCBjb250ZXh0LlxuIgorICAg
IHByaW50UmVmZXJyZXIoKTsKK30KKworZnVuY3Rpb24gZmFpbGluZ1RyYW5zYWN0aW9uQ2FsbGJh
Y2sodHgpCit7CisgICAgbG9nQ2FsbGJhY2soInRyYW5zYWN0aW9uIik7CisgICAgdHguZXhlY3V0
ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiLCBbXSwgc3Vj
Y2Vzc1N0YXRlbWVudENhbGxiYWNrLCBudWxsKTsKKyAgICB0eC5leGVjdXRlU3FsKCJCQUQgU1FM
IFNUQVRFTUVOVCIsIFtdLCBudWxsLCBlcnJvclN0YXRlbWVudENhbGxiYWNrKTsKK30KKworZnVu
Y3Rpb24gZXJyb3JTdGF0ZW1lbnRDYWxsYmFjayh0eCwgZXJyb3IpCit7CisgICAgbG9nQ2FsbGJh
Y2soInN0YXRlbWVudCBlcnJvciIpOworICAgIHJldHVybiB0cnVlOyAvLyBmYWlsIHRoZSB0cmFu
c2FjdGlvbgorfQorCitmdW5jdGlvbiBzdWNjZXNzU3RhdGVtZW50Q2FsbGJhY2sodHgsIGRhdGEp
Cit7CisgICAgbG9nQ2FsbGJhY2soInN0YXRlbWVudCBzdWNjZXNzIik7Cit9CisKK2Z1bmN0aW9u
IGVycm9yVHJhbnNhY3Rpb25DYWxsYmFjayhlcnJvcikKK3sKKyAgICBsb2dDYWxsYmFjaygidHJh
bnNhY3Rpb24gZXJyb3IiKTsKK30KKworZnVuY3Rpb24gc3VjY2Vzc1RyYW5zYWN0aW9uQ2FsbGJh
Y2soKQoreworICAgIGxvZ0NhbGxiYWNrKCJ0cmFuc2FjdGlvbiBzdWNjZXNzIik7CisgICAgZnJh
bWUrKzsKKyAgICBzd2l0Y2ggKGZyYW1lKSB7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
IHJ1blRlc3RJblNlY29uZEZyYW1lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgMzoKKyAgICAgICAgICAgIHRvcC5mcmFtZXNbM10ucnVuVGVzdEluVGhpcmRGcmFtZSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHRocm93ICJCYWQgJ2ZyYW1lJyB2YWx1ZTogIiArIGZyYW1lOworICAg
IH0KK30KKworZnVuY3Rpb24gcnVuVGVzdEluU2Vjb25kRnJhbWUoKQoreworICAgIC8vIHRlc3Qg
dGhhdCBhbGwgY2FsbGJhY2tzIGFyZSBleGVjdXRlZCBpbiB0aGlzIGNvbnRleHQsIGV2ZW4gdGhv
dWdoICdkYicgaXMgZGVmaW5lZCBpbiBhbm90aGVyIGNvbnRleHQKKyAgICB0b3AuZnJhbWVzWzFd
LmRiLnRyYW5zYWN0aW9uKGZhaWxpbmdUcmFuc2FjdGlvbkNhbGxiYWNrLCBlcnJvclRyYW5zYWN0
aW9uQ2FsbGJhY2spOworICAgIHRvcC5mcmFtZXNbMV0uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24o
dHgpIHsgfSwgbnVsbCwgc3VjY2Vzc1RyYW5zYWN0aW9uQ2FsbGJhY2spOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVj
dC1jb250ZXh0LXRoaXJkLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0
LWNvbnRleHQtdGhpcmQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVj
dC1jb250ZXh0LXRoaXJkLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAK
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gcHJpbnRSZWZlcnJlcigpCit7Cisg
ICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHJlcS5vcGVuKCJHRVQiLCAi
Y2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LmNnaSIsIGZhbHNlKTsKKyAg
ICByZXEuc2VuZChudWxsKTsKKyAgICB0b3AuZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9ICJSZWZlcnJlcjogIiArIHJlcS5yZXNwb25zZVRl
eHQ7Cit9CisKK2Z1bmN0aW9uIGxvZ0NhbGxiYWNrKGNhbGxiYWNrVHlwZSkKK3sKKyAgICB0b3Au
ZnJhbWVzWzBdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9
ICJGQUlMOiBUaGUgIiArIGNhbGxiYWNrVHlwZSArICIgY2FsbGJhY2sgd2FzIGNhbGxlZCBpbiB0
aGUgd3JvbmcgY29udGV4dC5cbiIKKyAgICBwcmludFJlZmVycmVyKCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3RJblRoaXJkRnJhbWUoKQoreworICAgIC8vIHRlc3QgdGhhdCB0cmFuc2FjdGlvbiBj
YWxsYmFja3MgZGVmaW5lZCBpbiBhbm90aGVyIGZyYW1lIGFyZSBleGVjdXRlZCBpbiB0aGUgY29u
dGV4dCBvZiB0aGF0IGZyYW1lCisgICAgdG9wLmZyYW1lc1sxXS5kYi50cmFuc2FjdGlvbih0b3Au
ZnJhbWVzWzJdLmZhaWxpbmdUcmFuc2FjdGlvbkNhbGxiYWNrLCB0b3AuZnJhbWVzWzJdLmVycm9y
VHJhbnNhY3Rpb25DYWxsYmFjayk7CisgICAgdG9wLmZyYW1lc1sxXS5kYi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeyB9LCBudWxsLCB0b3AuZnJhbWVzWzJdLnN1Y2Nlc3NUcmFuc2FjdGlvbkNh
bGxiYWNrKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2NhbGxiYWNr
cy1hcmUtY2FsbGVkLWluLWNvcnJlY3QtY29udGV4dC5jZ2kKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1p
bi1jb3JyZWN0LWNvbnRleHQuY2dpCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zdG9yYWdlL3Jlc291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNv
bnRleHQuY2dpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACisjIS91c3IvYmluL3Blcmwg
LXcKKwordXNlIENHSSBxdyg6c3RhbmRhcmQpOworbXkgJGNnaSA9IG5ldyBDR0k7CisKK3ByaW50
ICJDb250ZW50LXR5cGU6IHRleHQvcGxhaW5cblxuIjsgCitpZiAoJGNnaS0+cmVmZXJlcikgewor
ICBwcmludCAkY2dpLT5yZWZlcmVyOworfSBlbHNlIHsKKyAgcHJpbnQgIk5PIFJFRkVSRVIiOwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zdG9yYWdlL3Jl
c291cmNlcy9jYWxsYmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQuY2dpCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="51443"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="51444"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67136</attachid>
            <date>2010-09-09 18:52:43 -0700</date>
            <delta_ts>2010-09-09 19:05:26 -0700</delta_ts>
            <desc>remove obsolete comment</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>1101</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzE0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmluZyBhbiBvYnNvbGV0ZSBjb21tZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxMTIKKworICAgICAgICAqIGJpbmRpbmdzL2dlbmVy
aWMvQWN0aXZlRE9NQ2FsbGJhY2suY3BwOgorCiAyMDEwLTA5LTA5ICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByNjcxMjYuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9BY3RpdmVE
T01DYWxsYmFjay5jcHAJKHJldmlzaW9uIDY3MTQxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL0FjdGl2ZURPTUNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBA
QCBwcml2YXRlOgogICAgIE93blB0cjxBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGw+IG1faW1w
bDsKIH07CiAKLS8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBhY2Nlc3NlZCBvbmx5IG9u
IHRoZSBjb250ZXh0IHRocmVhZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgbG9ja3MuCiBjbGFz
cyBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsK
IHB1YmxpYzoKICAgICBBY3RpdmVET01PYmplY3RDYWxsYmFja0ltcGwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkK
</data>
<flag name="review"
          id="56359"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="56360"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>