<?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>56425</bug_id>
          
          <creation_ts>2011-03-15 16:38:42 -0700</creation_ts>
          <short_desc>WebKit2 Icon Database</short_desc>
          <delta_ts>2011-03-25 17:09:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>InRadar, LayoutTestFailure</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56876</dependson>
    
    <dependson>57058</dependson>
    
    <dependson>57069</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>368034</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 16:38:42 -0700</bug_when>
    <thetext>WebKit2 needs an Icon Database

Our plan now is to host the icon DB in the UI process and have the web process talk to it through messages.

This will allow multiple WebProcesses to easily get at the same database.

I&apos;m planning on landing work in stages - first up will be a patch that adds the new files and lays the messaging groundwork between Web &lt;--&gt; UI processes, but is basically a no-op IconDatabaseBase implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368061</commentid>
    <comment_count>1</comment_count>
      <attachid>85882</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 17:13:10 -0700</bug_when>
    <thetext>Created attachment 85882
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368063</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-15 17:14:56 -0700</bug_when>
    <thetext>Attachment 85882 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/UIProcess/WebIconDatabase.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/WebIconDatabase.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/WebProcess/IconDatabase/WebIconDatabaseProxy.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/UIProcess/WebProcessProxy.cpp:294:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 4 in 32 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>368069</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 17:20:22 -0700</bug_when>
    <thetext>I&apos;ve fixed (some of) the style bot errors, but will not reload the patch at this time - they were minor, and I&apos;d rather give EWS a full chance to run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368122</commentid>
    <comment_count>4</comment_count>
      <attachid>85882</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-15 18:31:30 -0700</bug_when>
    <thetext>Comment on attachment 85882
Patch v1

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

&gt; Source/WebKit2/WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:109
&gt; +String WebIconDatabaseProxy::iconURLForPageURL(const String&amp; pageURL)
&gt; +{
&gt; +    String result;
&gt; +    if (!m_process-&gt;connection()-&gt;sendSync(Messages::WebIconDatabase::IconURLForPageURL(pageURL), Messages::WebIconDatabase::IconURLForPageURL::Reply(result), 0))
&gt; +        return String();
&gt; +    
&gt; +    return result;
&gt; +}
&gt; +
&gt; +bool WebIconDatabaseProxy::iconDataKnownForIconURL(const String&amp; iconURL)
&gt; +{
&gt; +    bool result;
&gt; +    if (!m_process-&gt;connection()-&gt;sendSync(Messages::WebIconDatabase::IconDataKnownForIconURL(iconURL), Messages::WebIconDatabase::IconDataKnownForIconURL::Reply(result), 0))
&gt; +        return false;
&gt; +    
&gt; +    return result;
&gt; +}
&gt; +
&gt; +IconLoadDecision WebIconDatabaseProxy::loadDecisionForIconURL(const String&amp; iconURL, DocumentLoader* documentLoader)
&gt; +{
&gt; +    IconLoadDecision result;
&gt; +    if (!m_process-&gt;connection()-&gt;sendSync(Messages::WebIconDatabase::LoadDecisionForIconURL(iconURL), Messages::WebIconDatabase::LoadDecisionForIconURL::Reply((int&amp;)result), 0))
&gt; +        return IconLoadNo;
&gt; +    
&gt; +    return result;
&gt; +}

These should not be sync messages.  Please don&apos;t land this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368139</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 19:16:45 -0700</bug_when>
    <thetext>The Qt bot being unable to apply the .vcproj part of the patch seems bizarre and broken...

I landed this in r81208 and will watch the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368143</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 19:39:03 -0700</bug_when>
    <thetext>Visual studio is apparently a lot pickier than the rest of our platforms, because it got confused by a forward declaration I don&apos;t think it should have...  trying to fix the windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368149</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-15 19:50:55 -0700</bug_when>
    <thetext>Attempted VS appeasement in r81211

I&apos;ll check in again in a few hours (traveling for a bit) to make sure it stuck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368151</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-15 19:59:32 -0700</bug_when>
    <thetext>Attachment 85882 did not build on win:
Build output: http://queues.webkit.org/results/8178839</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368362</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 09:58:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81208 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368368</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-16 10:11:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/81208 might have broken GTK Linux 32-bit Release

Maybe... but whether or not it did, that build is fine right now,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369457</commentid>
    <comment_count>11</comment_count>
      <attachid>86128</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-17 18:15:34 -0700</bug_when>
    <thetext>Created attachment 86128
Patch #2, v1 - Change IconDatabaseBase and FrameLoader icon logic to support an asynchronous mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369459</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-17 18:18:32 -0700</bug_when>
    <thetext>Attachment 86128 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/loader/icon/IconDatabase.cpp:289:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/loader/icon/IconDatabaseBase.h:49:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/icon/IconDatabaseBase.h:88:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/icon/IconDatabaseBase.h:156:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/icon/IconDatabaseBase.h:157:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/loader/FrameLoader.cpp:760:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 6 in 28 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>369470</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-17 18:49:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Attachment 86128 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/loader/icon/IconDatabase.cpp:289:  Missing space after ,  [whitespace/comma] [3]
&gt; Source/WebCore/loader/icon/IconDatabaseBase.h:49:  Missing space before {  [whitespace/braces] [5]
&gt; Source/WebCore/loader/icon/IconDatabaseBase.h:88:  Missing space before {  [whitespace/braces] [5]
&gt; Source/WebCore/loader/icon/IconDatabaseBase.h:156:  Missing space before {  [whitespace/braces] [5]
&gt; Source/WebCore/loader/icon/IconDatabaseBase.h:157:  Missing space before {  [whitespace/braces] [5]
&gt; Source/WebCore/loader/FrameLoader.cpp:760:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
&gt; Total errors found: 6 in 28 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Fixed all of these locally.  Will let EWS bots all have their swipe at this then land in the A.M.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369693</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-18 10:07:58 -0700</bug_when>
    <thetext>Landed Patch #2 in r81484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369723</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-18 10:50:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81484 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
webarchive/test-link-rel-icon.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369727</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-18 11:02:58 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; http://trac.webkit.org/changeset/81484 might have broken SnowLeopard Intel Release (Tests)
&gt; The following tests are not passing:
&gt; webarchive/test-link-rel-icon.html

Working on this right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369783</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-18 12:15:44 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; http://trac.webkit.org/changeset/81484 might have broken SnowLeopard Intel Release (Tests)
&gt; &gt; The following tests are not passing:
&gt; &gt; webarchive/test-link-rel-icon.html
&gt; 
&gt; Working on this right now.

I cannot reproduce this failure locally, either using run-webkit-tests or manually running the test in Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369906</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-18 14:45:58 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; http://trac.webkit.org/changeset/81484 might have broken SnowLeopard Intel Release (Tests)
&gt; &gt; &gt; The following tests are not passing:
&gt; &gt; &gt; webarchive/test-link-rel-icon.html
&gt; &gt; 
&gt; &gt; Working on this right now.
&gt; 
&gt; I cannot reproduce this failure locally, either using run-webkit-tests or manually running the test in Safari.

This failed once on Leopard, too, after passing a few times:
http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r81509%20(29954)/results.html

I can&apos;t reproduce this failure locally on SnowLeopard, or any other OS.

I can log in to the Leopard bot that showed the failure once and I can *not* reproduce it there.

I can log in to the SnowLeopard bot that shows the failure and *can* reproduce it there.

It appears this test is now &quot;flakey&quot; - I&apos;m filing a new bug and adding it to the skipped list until cycles can be spared to get to the bottom of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369912</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-18 14:50:38 -0700</bug_when>
    <thetext>
&gt; It appears this test is now &quot;flakey&quot; - I&apos;m filing a new bug and adding it to the skipped list until cycles can be spared to get to the bottom of it.

https://bugs.webkit.org/show_bug.cgi?id=56685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371465</commentid>
    <comment_count>20</comment_count>
      <attachid>86475</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-22 10:36:44 -0700</bug_when>
    <thetext>Created attachment 86475
Patch #3, v1 - Hookup an actual threaded icon database that manages I/O.  A direct port from WebCore/loader/icon/IconDatabase.cpp

The meatiest part of this patch is WebIconDatabaseImpl which is a direct copy of WebCore/loader/icon/IconDatabase.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371471</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-22 10:40:52 -0700</bug_when>
    <thetext>Attachment 86475 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/UIProcess/WebIconDatabaseImpl.h:41:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.h:68:  Missing space before {  [whitespace/braces] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:16:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:62:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:331:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:445:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:505:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:554:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:611:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:684:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:718:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:902:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:949:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:986:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1195:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1320:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1405:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1525:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebIconDatabaseImpl.cpp:1526:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/UIProcess/WebContext.h:159:  The parameter name &quot;path&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 21 in 25 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>371496</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-22 11:16:08 -0700</bug_when>
    <thetext>So much style embarrassment - new patch on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371498</commentid>
    <comment_count>23</comment_count>
      <attachid>86475</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-22 11:19:18 -0700</bug_when>
    <thetext>Comment on attachment 86475
Patch #3, v1 - Hookup an actual threaded icon database that manages I/O.  A direct port from WebCore/loader/icon/IconDatabase.cpp

I&apos;m concerned that all this code is being moved from WebCore to WebKit2. That seems like a bad overall direction. We don&apos;t want to have totally separate implementations for WebKit1 and WebKit2 IMO. Is there any way the code could live in WebCore, in a way that it could be used directly by WebKit1, and used via a proxy and then called from the UI process in WebKit2? I think that would be much better than forking the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371506</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-22 11:30:00 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 86475 [details])
&gt; I&apos;m concerned that all this code is being moved from WebCore to WebKit2. That seems like a bad overall direction. We don&apos;t want to have totally separate implementations for WebKit1 and WebKit2 IMO. Is there any way the code could live in WebCore, in a way that it could be used directly by WebKit1, and used via a proxy and then called from the UI process in WebKit2? I think that would be much better than forking the implementation.

We&apos;ve reached the design decision that the actual IconDatabase needs to be hosted in the UIProcess, so part of what you suggest isn&apos;t the direction we want to go.

But your suggestion of refactoring the one copy of the code in WebCore to be used by both WebCore and the WebKit2 UIProcess is quite feasible.  I guess it just hadn&apos;t occurred to anyone.

The WebCore icon database code could be refactored to support this.  It would run in &quot;the process&quot; for WK1 clients, and would run in the UI process as the WK2 icon database for WK2 apps.

This would be a gear shift that will put this out another day or so, but is probably worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371523</commentid>
    <comment_count>25</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-22 11:45:52 -0700</bug_when>
    <thetext>I&apos;m working on this new direction right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371526</commentid>
    <comment_count>26</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-22 11:49:11 -0700</bug_when>
    <thetext>Attachment 86475 did not build on win:
Build output: http://queues.webkit.org/results/8222403</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371542</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-22 12:10:21 -0700</bug_when>
    <thetext>Attachment 86475 did not build on win:
Build output: http://queues.webkit.org/results/8218918</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373762</commentid>
    <comment_count>28</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 15:50:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/8648311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373764</commentid>
    <comment_count>29</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 15:54:33 -0700</bug_when>
    <thetext>With the other related bugs here, and other bugs I might&apos;ve forgotten to relate, the WK2 icon database is in place.

A patch is coming any moment to expose the most basic API, then I&apos;ll add-on as needed using other bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373769</commentid>
    <comment_count>30</comment_count>
      <attachid>86991</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 16:09:21 -0700</bug_when>
    <thetext>Created attachment 86991
Patch - Add minimal WK2 API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373772</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-25 16:11:09 -0700</bug_when>
    <thetext>Attachment 86991 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/C/cg/WKIconDatabaseCG.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>373788</commentid>
    <comment_count>32</comment_count>
      <attachid>86991</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-25 16:52:53 -0700</bug_when>
    <thetext>Comment on attachment 86991
Patch - Add minimal WK2 API

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

&gt; Source/WebKit2/UIProcess/API/C/WKIconDatabase.h:38
&gt; +WK_EXPORT void WKIconDatabaseRetainIconForURL(WKIconDatabaseRef iconDatabase, WKStringRef pageURL);
&gt; +WK_EXPORT void WKIconDatabaseReleaseIconForURL(WKIconDatabaseRef iconDatabase, WKStringRef pageURL);

Why don&apos;t these take WKURLRefs?

&gt; Source/WebKit2/UIProcess/API/C/cg/WKIconDatabaseCG.cpp:39
&gt; +    WebCore::Image* image = toImpl(iconDatabaseRef)-&gt;imageForPageURL(toWTFString(urlStringRef));

WebCore:: not necessary here.

&gt; Source/WebKit2/UIProcess/API/C/cg/WKIconDatabaseCG.h:36
&gt; +WK_EXPORT CGImageRef WKIconDatabaseGetCGImageForURL(WKIconDatabaseRef iconDatabase, WKStringRef urlString);

Why does this not take a WKURLRef?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373791</commentid>
    <comment_count>33</comment_count>
      <attachid>86996</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 17:02:33 -0700</bug_when>
    <thetext>Created attachment 86996
Patch v2 - Fix Qt also</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373792</commentid>
    <comment_count>34</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 17:02:57 -0700</bug_when>
    <thetext>Ignore the &quot;Fix Qt also&quot; - it&apos;s in my autocomplete and that&apos;s too fast for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373795</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-25 17:05:09 -0700</bug_when>
    <thetext>Attachment 86996 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/C/cg/WKIconDatabaseCG.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>373800</commentid>
    <comment_count>36</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-25 17:09:28 -0700</bug_when>
    <thetext>r82005</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85882</attachid>
            <date>2011-03-15 17:13:10 -0700</date>
            <delta_ts>2011-03-17 18:15:34 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>68951</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMTkxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMTUgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NjQyNQorICAgICAgICBXZWJLaXQyIGljb24gZGF0YWJhc2UuCisKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKwogMjAxMS0wMy0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDgxMTcyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTU0NCw2ICs1NDQsNyBAQCBfX1pON1dlYkNvcmUyMW1haW5UaHJl
YWROb3JtYWxXb3JsZEV2CiBfX1pON1dlYkNvcmUyMW1hcmtlclRleHRGb3JMaXN0SXRlbUVQTlNf
N0VsZW1lbnRFCiBfX1pON1dlYkNvcmUyMXJlcG9ydFRocmVhZFZpb2xhdGlvbkVQS2NOU18yMFRo
cmVhZFZpb2xhdGlvblJvdW5kRQogX19aTjdXZWJDb3JlMjFyZXNvdXJjZUxvYWRTY2hlZHVsZXJF
dgorX19aTjdXZWJDb3JlMjFzZXRHbG9iYWxJY29uRGF0YWJhc2VFUE5TXzE2SWNvbkRhdGFiYXNl
QmFzZUUKIF9fWk43V2ViQ29yZTIxc2V0UGxhdGZvcm1TdHJhdGVnaWVzRVBOU18xOFBsYXRmb3Jt
U3RyYXRlZ2llc0UKIF9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDI2Y2FuU3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHNFdgogX19aTjdXZWJDb3JlMjJhcHBsaWNhdGlvbklzQXBwbGVN
YWlsRXYKQEAgLTExMTUsNiArMTExNiw3IEBAIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlv
bjRuZXh0RU5TXzIKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjhwcmV2aW91c0VOU18y
N0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmUxNkZvbnRGYWxsYmFj
a0xpc3QxMGZvbnREYXRhQXRFUEtOU180Rm9udEVqCiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRF
bGVtZW50MTJhdXRvQ29tcGxldGVFdgorX19aTks3V2ViQ29yZTE2SWNvbkRhdGFiYXNlQmFzZTEy
ZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNlUmVzcG9uc2UxM25zVVJMUmVz
cG9uc2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3aXNDb250ZW50RWRpdGFi
bGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3dG9Ob3JtYWxpemVkUmFuZ2VF
dgpAQCAtMTI3MSw2ICsxMjczLDcgQEAgX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyOGlzRW5jbG9z
ZWRJbkNvbQogX19aTks3V2ViQ29yZTlQYWdlQ2FjaGUxMGZyYW1lQ291bnRFdgogX19aTks3V2Vi
Q29yZTlQYWdlQ2FjaGUyMWF1dG9yZWxlYXNlZFBhZ2VDb3VudEV2CiBfX1pUVk43V2ViQ29yZTEy
Q2hyb21lQ2xpZW50RQorX19aVFZON1dlYkNvcmUxNkljb25EYXRhYmFzZUJhc2VFCiBfX1pUVk43
V2ViQ29yZTE3RmlsZUNob29zZXJDbGllbnRFCiBfX1pUVk43V2ViQ29yZTE3RnJhbWVMb2FkZXJD
bGllbnRFCiBfX1pUVk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlckUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgxMTkxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA4IEBACisyMDExLTAzLTE1ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0
MjUKKyAgICAgICAgV2ViS2l0MiBpY29uIGRhdGFiYXNlLgorCisgICAgICAgIFByb2plY3QgZmls
ZSBwYXBlcndvcms6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy5wcm86CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
V2ViS2l0Mi5wcmk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6IFNwZWNpYWwtY2FzZSBjYXBp
dGFsaXphdGlvbiBmb3IgbWVzc2FnZXMgdGhhdCBzdGFydCB3aXRoICJVUkwiIHRvIGJlIGxvd2Vy
Y2FzZWQKKyAgICAgICAgICB0byAidXJsIiBpbnN0ZWFkIG9mICJ1UkwiLgorCisgICAgICAgIEFk
ZCBtZXNzYWdpbmctcmVsYXRlZCBzdHVmZjoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRh
YmFzZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKToKKworICAgICAgICBQcmVwIHRvIG1ha2UgV2ViSWNvbkRhdGFiYXNlIGFu
IEFQSSBvYmplY3Q6CisgICAgICAgICogU2hhcmVkL0FQSU9iamVjdC5oOgorCisgICAgICAgIEFk
ZCBhbiAiaWNvbiBEQiBpcyBlbmFibGVkIiBmbGFnIHRvIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6CisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisKKyAg
ICAgICAgQWRkIFNQSSBmb3IgY2xpZW50IGFwcHMgdG8gc2V0IHRoZSBpY29uIGRhdGFiYXNlIHBh
dGg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChX
S0NvbnRleHRTZXRJY29uRGF0YWJhc2VQYXRoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnNldEljb25EYXRhYmFzZVBhdGgpOgorCisgICAg
ICAgIEhvb2sgdXAgaW5pdGlhbGl6YXRpb24sIGNsZWFyaW5nLCBhbmQgbWVzc2FnaW5nIGZvciB0
aGUgaWNvbiBkYXRhYmFzZToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OldlYkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0Ojp+V2ViQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6
OmVuc3VyZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpkaWRSZWNl
aXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmRpZFJlY2VpdmVTeW5j
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6Omljb25EYXRhYmFzZVBhdGgp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L1dlYkNvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgpOgorICAgICAgICAqIFVJUHJvY2Vz
cy93aW4vV2ViQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBs
YXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgpOgorCisgICAgICAgIEFkZCB0aGUgVUlQcm9j
ZXNzLXNpZGUgSWNvbkRhdGFiYXNlLiBJdCB3aWxsIGJlIHRoZSAiYWN0dWFsIGRhdGFiYXNlIiBh
cyB3ZWxsIGFzIHRoZSBBUEkgb2JqZWN0OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6On5XZWJJY29uRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNvblVSTCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aWNvbkRhdGFGb3JQYWdlVVJMKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aWNvbkRhdGFLbm93bkZvckljb25VUkwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmxvYWREZWNpc2lvbkZvckljb25VUkwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6Y2xlYXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViSWNvbkRhdGFiYXNlOjp0eXBlKToKKworICAgICAgICBBZGQgdGhlIFdlYlByb2Nlc3Mtc2lk
ZSBJY29uRGF0YWJhc2VQcm94eS4gSXQgYWN0cyBhcyB0aGUgV2ViQ29yZSBJY29uRGF0YWJhc2Ug
YW5kIG9wZXJhdGVzIHZpYSBtZXNzYWdpbmc6CisgICAgICAgICogV2ViUHJvY2Vzcy9JY29uRGF0
YWJhc2U6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25E
YXRhYmFzZVByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFz
ZVByb3h5Ojp+V2ViSWNvbkRhdGFiYXNlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29u
RGF0YWJhc2VQcm94eTo6V2ViSWNvbkRhdGFiYXNlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJY29uRGF0YWJhc2VQcm94eTo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNv
bkRhdGFiYXNlUHJveHk6OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0
YWJhc2VQcm94eTo6aWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0
YWJhc2VQcm94eTo6cmV0YWluSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
Y29uRGF0YWJhc2VQcm94eTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6Omljb25VUkxGb3JQYWdlVVJMKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6Omljb25EYXRhS25vd25Gb3JJY29uVVJMKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OmxvYWREZWNpc2lvbkZvckljb25V
UkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VQcm94eTo6c2V0SWNvblVSTEZv
clBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VQcm94eTo6c2V0SWNv
bkRhdGFGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6
OnVybEltcG9ydEZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ljb25EYXRhYmFz
ZS9XZWJJY29uRGF0YWJhc2VQcm94eS5oOiBBZGRlZC4KKworICAgICAgICBIb29rIHVwIGluaXRp
YWxpemF0aW9uIGFuZCBtZXNzYWdpbmcgZm9yIHRoZSBpY29uIGRhdGFiYXNlIHByb3h5OgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OldlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZFJlY2VpdmVN
ZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKwogMjAxMS0wMy0x
NSAgU2lkZGhhcnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21ib3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UJKHJldmlzaW9uIDgxMTcyKQorKysgU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJj
ZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBWUEFUSCA9IFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvQ29va2llcyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0Z1bGxTY3JlZW4gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCisg
ICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0tleVZhbHVlU3RvcmFnZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1Bs
dWdpbnMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9SZXNvdXJjZUNhY2hlIFwKQEAgLTYw
LDYgKzYxLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eSBcCiAgICAgV2ViR2VvbG9jYXRpb25NYW5hZ2VyIFwKICAgICBXZWJHZW9sb2NhdGlv
bk1hbmFnZXJQcm94eSBcCisgICAgV2ViSWNvbkRhdGFiYXNlIFwKKyAgICBXZWJJY29uRGF0YWJh
c2VQcm94eSBcCiAgICAgV2ViSW5zcGVjdG9yIFwKICAgICBXZWJJbnNwZWN0b3JQcm94eSBcCiAg
ICAgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlciBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9EZXJp
dmVkU291cmNlcy5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJj
ZXMucHJvCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2Vz
LnBybwkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBWUEFUSCA9IFwKICAgICBXZWJQ
cm9jZXNzL0Nvb2tpZXMgXAogICAgIFdlYlByb2Nlc3MvRnVsbFNjcmVlbiBcCiAgICAgV2ViUHJv
Y2Vzcy9HZW9sb2NhdGlvbiBcCisgICAgV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgIFdl
YlByb2Nlc3MvS2V5VmFsdWVTdG9yYWdlIFwKICAgICBXZWJQcm9jZXNzL1BsdWdpbnMgXAogICAg
IFdlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZSBcCkBAIC0xMDcsNiArMTA4LDggQEAgTUVTU0FHRV9S
RUNFSVZFUlMgPSBcCiAgICAgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAog
ICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViR2VvbG9jYXRp
b25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAorICAgIFdlYkljb25EYXRhYmFzZS5tZXNzYWdl
cy5pbiBcCisgICAgV2ViSWNvbkRhdGFiYXNlUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4gXApJbmRleDogU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDgxMTcyKQorKysgU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0Niw2ICs0NDYs
OCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
Ykhpc3RvcnlDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSGlzdG9y
eUNsaWVudC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5jcHAgXApAQCAtNDk1LDYgKzQ5
Nyw4IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2d0ay9XZWJQcm9jZXNzR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0
ay9XZWJQcm9jZXNzTWFpbkd0ay5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25E
YXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmggXAogCVNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmggXAog
CVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmggXApAQCAtNjk4LDYgKzcwMiw3
IEBAIGxpYldlYktpdDJfbGFfQ1BQRkxBR1MgPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29u
RGF0YWJhc2UgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jIFwKQEAgLTg2Nyw2ICs4NzIsMTAgQEAgd2Via2l0Ml9idWlsdF9z
b3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkdlb2xvY2F0aW9uTWFuYWdl
ck1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dl
Ykdlb2xvY2F0aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9XZWJJY29uRGF0YWJhc2VNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKwlEZXJpdmVkU291cmNl
cy9XZWJLaXQyL1dlYkljb25EYXRhYmFzZU1lc3NhZ2VzLmggXAorCURlcml2ZWRTb3VyY2VzL1dl
YktpdDIvV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKKwlEZXJpdmVk
U291cmNlcy9XZWJLaXQyL1dlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZXMuaCBcCiAJRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rvck1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJpCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFdFQktJVDJfSU5DTFVERVBBVEgg
PSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQgXAog
ICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbiBcCiAgICAgJCRT
T1VSQ0VfRElSL1dlYktpdDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCisgICAgJCRTT1VSQ0Vf
RElSL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQkU09VUkNFX0RJUi9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUgXAogICAgICQkU09VUkNFX0RJUi9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NIFwKICAgICAkJFNPVVJDRV9ESVIvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jIFwKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJv
CShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIFdFQktJVDJfR0VORVJBVEVEX0hFQURFUlMgPSBcCiAg
ICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJH
ZW9sb2NhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NP
VVJDRVNfRElSL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBcCisgICAgJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJJY29uRGF0YWJhc2VNZXNzYWdlcy5oIFwK
KyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1dlYkljb25EYXRhYmFzZVByb3h5
TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJJbnNw
ZWN0b3JNZXNzYWdlcy5oIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1dl
Ykluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCBcCkBAIC02OCw2ICs3
MCw4IEBAIFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVMgPSBcCiAgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJHZW9sb2NhdGlv
bk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NP
VVJDRVNfRElSL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBc
CisgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJJY29uRGF0YWJhc2VNZXNz
YWdlUmVjZWl2ZXIuY3BwIFwKKyAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1dl
Ykljb25EYXRhYmFzZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dF
TkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAg
ICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL1dlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9XZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBcCkBAIC0xOTgsNiArMjAy
LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclBy
b3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggXAogICAgIFVJ
UHJvY2Vzcy9XZWJIaXN0b3J5Q2xpZW50LmggXAorICAgIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2UuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggXAogICAgIFVJUHJvY2Vz
cy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkxv
YWRlckNsaWVudC5oIFwKQEAgLTIyMiw2ICsyMjcsNyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQ
cm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuaCBcCiAgICAgV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIFwKICAg
ICBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5oIFwKKyAgICBX
ZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5oIFwKICAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZS5oIFwKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggXApA
QCAtMzkwLDYgKzM5Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2Nh
dGlvbk1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvblByb3Zp
ZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkhpc3RvcnlDbGllbnQuY3BwIFwKKyAgICBVSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5j
cHAgXAogICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwIFwKQEAgLTQxOSwxMCArNDI2
LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNz
L0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9GdWxsU2NyZWVu
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
R2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9E
b3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHAgXAorICAgIFdlYlByb2Nlc3MvSWNvbkRhdGFiYXNl
L1dlYkljb25EYXRhYmFzZVByb3h5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIFwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAkocmV2aXNpb24gODExNzIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICBNZXNzYWdlQ2xh
c3NXZWJEYXRhYmFzZU1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViRnVsbFNjcmVlbk1hbmFn
ZXIsCiAgICAgTWVzc2FnZUNsYXNzV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHksCisgICAgTWVz
c2FnZUNsYXNzV2ViSWNvbkRhdGFiYXNlUHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViSW5zcGVj
dG9yLAogICAgIE1lc3NhZ2VDbGFzc1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIsCiAgICAgTWVz
c2FnZUNsYXNzV2ViUGFnZSwKQEAgLTYxLDYgKzYyLDcgQEAgZW51bSBNZXNzYWdlQ2xhc3Mgewog
ICAgIE1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LAogICAgIE1lc3NhZ2VDbGFz
c1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViR2VvbG9jYXRp
b25NYW5hZ2VyLAorICAgIE1lc3NhZ2VDbGFzc1dlYkljb25EYXRhYmFzZSwKICAgICBNZXNzYWdl
Q2xhc3NXZWJJbnNwZWN0b3JQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViUGFnZVByb3h5LApJbmRleDogU291
cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gODExNzIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Miw2ICszNjIsOCBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZXNfaGVhZGVyKGZp
bGUpOgogCiAKIGRlZiBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKToKKyAgICBp
ZiBtZXNzYWdlLm5hbWUuZmluZCgnVVJMJykgPT0gMDoKKyAgICAgICAgcmV0dXJuICclczo6JXMn
ICUgKHJlY2VpdmVyLm5hbWUsICd1cmwnICsgbWVzc2FnZS5uYW1lWzM6XSkKICAgICByZXR1cm4g
JyVzOjolcycgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lWzBdLmxvd2VyKCkgKyBtZXNz
YWdlLm5hbWVbMTpdKQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0LmgJKHJldmlz
aW9uIDgxMTcyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgVHlwZUdlb2xvY2F0aW9u
TWFuYWdlciwKICAgICAgICAgVHlwZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsCiAgICAg
ICAgIFR5cGVHZW9sb2NhdGlvblBvc2l0aW9uLAorICAgICAgICBUeXBlSWNvbkRhdGFiYXNlLAog
ICAgICAgICBUeXBlSW5zcGVjdG9yLAogICAgICAgICBUeXBlS2V5VmFsdWVTdG9yYWdlTWFuYWdl
ciwKICAgICAgICAgVHlwZU5hdmlnYXRpb25EYXRhLApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNp
b24gODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgdm9pZCBXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVuY29kZXItPmVuY29kZShjbGVhclJl
c291cmNlQ2FjaGVzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoY2xlYXJBcHBsaWNhdGlvbkNhY2hl
KTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0
aCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGljb25EYXRhYmFzZUVuYWJsZWQpOwogICAgIGVuY29k
ZXItPmVuY29kZShsYW5ndWFnZUNvZGUpOwogICAgIGVuY29kZXItPmVuY29kZSh0ZXh0Q2hlY2tl
clN0YXRlKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2
YWwpOwpAQCAtMTEzLDYgKzExNCw4IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLmljb25E
YXRhYmFzZUVuYWJsZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocGFyYW1ldGVycy5sYW5ndWFnZUNvZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy50ZXh0Q2hlY2tlclN0YXRlKSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaAkocmV2aXNpb24gODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGJvb2wg
c2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aDsKIAorICAgIGJvb2wgaWNvbkRhdGFi
YXNlRW5hYmxlZDsKKwogICAgIFN0cmluZyBsYW5ndWFnZUNvZGU7CiAKICAgICBUZXh0Q2hlY2tl
clN0YXRlIHRleHRDaGVja2VyU3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuY3BwCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlTWFuYWdl
clByb3h5LmgiCiAjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5h
Z2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKICNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTExNiw2ICsxMTcsNyBAQCBXZWJDb250ZXh0OjpXZWJD
b250ZXh0KFByb2Nlc3NNb2RlbCBwcm9jCiAgICAgLCBtX2Nvb2tpZU1hbmFnZXJQcm94eShXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fZGF0YWJhc2VNYW5hZ2Vy
UHJveHkoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fZ2Vv
bG9jYXRpb25NYW5hZ2VyUHJveHkoV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk6OmNyZWF0ZSh0
aGlzKSkKKyAgICAsIG1faWNvbkRhdGFiYXNlKFdlYkljb25EYXRhYmFzZTo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9rZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHkoV2ViS2V5VmFsdWVTdG9yYWdl
TWFuYWdlclByb3h5OjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BsdWdpblNpdGVEYXRhTWFuYWdl
cihXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcmVzb3Vy
Y2VDYWNoZU1hbmFnZXJQcm94eShXZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5OjpjcmVhdGUo
dGhpcykpCkBAIC0xNDcsMTEgKzE0OSwxNCBAQCBXZWJDb250ZXh0Ojp+V2ViQ29udGV4dCgpCiAg
ICAgbV9jb29raWVNYW5hZ2VyUHJveHktPmludmFsaWRhdGUoKTsKICAgICBtX2Nvb2tpZU1hbmFn
ZXJQcm94eS0+Y2xlYXJDb250ZXh0KCk7CiAKKyAgICBtX2RhdGFiYXNlTWFuYWdlclByb3h5LT5p
bnZhbGlkYXRlKCk7CisgICAgbV9kYXRhYmFzZU1hbmFnZXJQcm94eS0+Y2xlYXJDb250ZXh0KCk7
CisgICAgCiAgICAgbV9nZW9sb2NhdGlvbk1hbmFnZXJQcm94eS0+aW52YWxpZGF0ZSgpOwogICAg
IG1fZ2VvbG9jYXRpb25NYW5hZ2VyUHJveHktPmNsZWFyQ29udGV4dCgpOwogCi0gICAgbV9kYXRh
YmFzZU1hbmFnZXJQcm94eS0+aW52YWxpZGF0ZSgpOwotICAgIG1fZGF0YWJhc2VNYW5hZ2VyUHJv
eHktPmNsZWFyQ29udGV4dCgpOworICAgIG1faWNvbkRhdGFiYXNlLT5pbnZhbGlkYXRlKCk7Cisg
ICAgbV9pY29uRGF0YWJhc2UtPmNsZWFyQ29udGV4dCgpOwogICAgIAogICAgIG1fa2V5VmFsdWVT
dG9yYWdlTWFuYWdlclByb3h5LT5pbnZhbGlkYXRlKCk7CiAgICAgbV9rZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUHJveHktPmNsZWFyQ29udGV4dCgpOwpAQCAtMjM3LDYgKzI0Miw4IEBAIHZvaWQgV2Vi
Q29udGV4dDo6ZW5zdXJlV2ViUHJvY2VzcygpCiAgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1Rv
U2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvciwgcGFyYW1ldGVycy51cmxTY2hlbWVzRm9y
V2hpY2hEb21haW5SZWxheGF0aW9uSXNGb3JiaWRkZW4pOwogCiAgICAgcGFyYW1ldGVycy5zaG91
bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoID0gbV9hbHdheXNVc2VzQ29tcGxleFRleHRD
b2RlUGF0aDsKKyAgICAKKyAgICBwYXJhbWV0ZXJzLmljb25EYXRhYmFzZUVuYWJsZWQgPSAhaWNv
bkRhdGFiYXNlUGF0aCgpLmlzRW1wdHkoKTsKIAogICAgIHBhcmFtZXRlcnMudGV4dENoZWNrZXJT
dGF0ZSA9IFRleHRDaGVja2VyOjpzdGF0ZSgpOwogCkBAIC01OTEsNiArNTk4LDExIEBAIHZvaWQg
V2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUkKICAgICAgICAgbV9nZW9sb2NhdGlv
bk1hbmFnZXJQcm94eS0+ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBh
cmd1bWVudHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIAorICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSWNvbkRhdGFiYXNlPigpKSB7CisgICAgICAg
IG1faWNvbkRhdGFiYXNlLT5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQs
IGFyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAobWVzc2FnZUlE
LmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eT4o
KSkgewogICAgICAgICBtX2tleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS0+ZGlkUmVjZWl2ZU1l
c3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwpAQCAtNjMyLDYgKzY0NCw5
IEBAIENvcmVJUEM6OlN5bmNSZXBseU1vZGUgV2ViQ29udGV4dDo6ZGlkUmUKICAgICAgICAgcmV0
dXJuIENvcmVJUEM6OkF1dG9tYXRpY1JlcGx5OwogICAgIH0KICAgICAKKyAgICBpZiAobWVzc2Fn
ZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkljb25EYXRhYmFzZT4oKSkKKyAgICAgICAg
cmV0dXJuIG1faWNvbkRhdGFiYXNlLT5kaWRSZWNlaXZlU3luY01lc3NhZ2UoY29ubmVjdGlvbiwg
bWVzc2FnZUlELCBhcmd1bWVudHMsIHJlcGx5KTsKKyAgICAKICAgICBzd2l0Y2ggKG1lc3NhZ2VJ
RC5nZXQ8V2ViQ29udGV4dExlZ2FjeU1lc3NhZ2U6OktpbmQ+KCkpIHsKICAgICAgICAgY2FzZSBX
ZWJDb250ZXh0TGVnYWN5TWVzc2FnZTo6UG9zdFN5bmNocm9ub3VzTWVzc2FnZTogewogICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBlbmNvZGUgc29tZXRoaW5nIGluIHRo
ZSBjYXNlIHRoYXQgdGhlIGFyZ3VtZW50cyBkbyBub3QgZGVjb2RlIGNvcnJlY3RseS4KQEAgLTcz
MCw2ICs3NDUsMTQgQEAgU3RyaW5nIFdlYkNvbnRleHQ6OmRhdGFiYXNlRGlyZWN0b3J5KCkgYwog
ICAgIHJldHVybiBwbGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpOwogfQogCitTdHJp
bmcgV2ViQ29udGV4dDo6aWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX292
ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX292ZXJy
aWRlSWNvbkRhdGFiYXNlUGF0aDsKKworICAgIHJldHVybiBwbGF0Zm9ybURlZmF1bHRJY29uRGF0
YWJhc2VQYXRoKCk7Cit9CisKIFN0cmluZyBXZWJDb250ZXh0Ojpsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkoKSBjb25zdAogewogICAgIGlmICghbV9vdmVycmlkZUxvY2FsU3RvcmFnZURpcmVjdG9yeS5p
c0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHJldmlz
aW9uIDgxMTcyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlclByb3h5OwogY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5OwogY2xhc3MgV2ViRGF0YWJh
c2VNYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTsKK2NsYXNz
IFdlYkljb25EYXRhYmFzZTsKIGNsYXNzIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eTsK
IGNsYXNzIFdlYlBhZ2VHcm91cDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTE1Myw2ICsxNTQs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsKIAogICAg
IHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXIpIHsgbV9vdmVycmlk
ZURhdGFiYXNlRGlyZWN0b3J5ID0gZGlyOyB9CisgICAgdm9pZCBzZXRJY29uRGF0YWJhc2VQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkgeyBtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aCA9IHBhdGg7
IH0KICAgICB2b2lkIHNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikg
eyBtX292ZXJyaWRlTG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKICAgICB2b2lkIGVu
c3VyZVdlYlByb2Nlc3MoKTsKQEAgLTE5MCw2ICsxOTIsOSBAQCBwcml2YXRlOgogICAgIFN0cmlu
ZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRE
YXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogCisgICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgo
KSBjb25zdDsKKyAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNv
bnN0OworCiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0
cmluZyBwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdDsKICAgICAK
QEAgLTIzMiw2ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IG1fY29va2llTWFuYWdlclByb3h5OwogICAgIFJlZlB0cjxXZWJEYXRhYmFzZU1hbmFn
ZXJQcm94eT4gbV9kYXRhYmFzZU1hbmFnZXJQcm94eTsKICAgICBSZWZQdHI8V2ViR2VvbG9jYXRp
b25NYW5hZ2VyUHJveHk+IG1fZ2VvbG9jYXRpb25NYW5hZ2VyUHJveHk7CisgICAgUmVmUHRyPFdl
Ykljb25EYXRhYmFzZT4gbV9pY29uRGF0YWJhc2U7CiAgICAgUmVmUHRyPFdlYktleVZhbHVlU3Rv
cmFnZU1hbmFnZXJQcm94eT4gbV9rZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHk7CiAgICAgUmVm
UHRyPFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcj4gbV9wbHVnaW5TaXRlRGF0YU1hbmFnZXI7CiAg
ICAgUmVmUHRyPFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk+IG1fcmVzb3VyY2VDYWNoZU1h
bmFnZXJQcm94eTsKQEAgLTI0MSw2ICsyNDcsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBT
dHJpbmcgbV9vdmVycmlkZURhdGFiYXNlRGlyZWN0b3J5OworICAgIFN0cmluZyBtX292ZXJyaWRl
SWNvbkRhdGFiYXNlUGF0aDsKICAgICBTdHJpbmcgbV9vdmVycmlkZUxvY2FsU3RvcmFnZURpcmVj
dG9yeTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisKKyNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkljb25EYXRhYmFzZT4gV2Vi
SWNvbkRhdGFiYXNlOjpjcmVhdGUoV2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkljb25EYXRhYmFzZShjb250ZXh0KSk7Cit9CisKK1dlYkljb25EYXRh
YmFzZTo6fldlYkljb25EYXRhYmFzZSgpCit7Cit9CisKK1dlYkljb25EYXRhYmFzZTo6V2ViSWNv
bkRhdGFiYXNlKFdlYkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX3dlYkNvbnRleHQoY29udGV4
dCkKK3sKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6OmludmFsaWRhdGUoKQoreworfQorCit2
b2lkIFdlYkljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikK
K3sKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmKQoreworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZTo6c2V0SWNvblVSTEZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBXZWJJY29u
RGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNvblVSTChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6Omljb25E
YXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBpY29u
RGF0YSkKK3sKKyAgICBpY29uRGF0YSA9IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UoKTsKK30KKwor
dm9pZCBXZWJJY29uRGF0YWJhc2U6Omljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIFN0
cmluZyYgaWNvblVSTCkKK3sKKyAgICBpY29uVVJMID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2Vi
SWNvbkRhdGFiYXNlOjppY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBib29s
JiBpY29uRGF0YUtub3duKSBjb25zdAoreworICAgIGljb25EYXRhS25vd24gPSBmYWxzZTsKK30K
Kwordm9pZCBXZWJJY29uRGF0YWJhc2U6OmxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3Ry
aW5nJiwgaW50JiBsb2FkRGVjaXNpb24pIGNvbnN0Cit7CisgICAgbG9hZERlY2lzaW9uID0gKGlu
dClXZWJDb3JlOjpJY29uTG9hZE5vOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVz
c2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyKQorewor
ICAgIGRpZFJlY2VpdmVXZWJJY29uRGF0YWJhc2VNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJ
RCwgZGVjb2Rlcik7Cit9CisKK0NvcmVJUEM6OlN5bmNSZXBseU1vZGUgV2ViSWNvbkRhdGFiYXNl
OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Q29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIHJlcGx5KQoreworICAgIHJldHVybiBk
aWRSZWNlaXZlU3luY1dlYkljb25EYXRhYmFzZU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlE
LCBkZWNvZGVyLCByZXBseSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSWNvbkRhdGFiYXNlX2gK
KyNkZWZpbmUgV2ViSWNvbkRhdGFiYXNlX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2VCYXNlLmg+CisK
K25hbWVzcGFjZSBDb3JlSVBDIHsKKyAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7CisgICAgY2xh
c3MgRGF0YVJlZmVyZW5jZTsKKyAgICBjbGFzcyBNZXNzYWdlSUQ7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJDb250ZXh0OworCitjbGFzcyBXZWJJY29uRGF0YWJhc2UgOiBw
dWJsaWMgQVBJT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBl
ID0gVHlwZUljb25EYXRhYmFzZTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkljb25EYXRh
YmFzZT4gY3JlYXRlKFdlYkNvbnRleHQqKTsKKyAgICB2aXJ0dWFsIH5XZWJJY29uRGF0YWJhc2Uo
KTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZvaWQgY2xlYXJDb250ZXh0KCkgeyBt
X3dlYkNvbnRleHQgPSAwOyB9CisKKyAgICB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgc2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoY29uc3QgQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgaWNvbkRhdGFGb3JQYWdlVVJM
KGNvbnN0IFN0cmluZyYsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGljb25V
UkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIFN0cmluZyYpOworICAgIHZvaWQgaWNvbkRhdGFL
bm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0OworICAgIHZvaWQgbG9h
ZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBpbnQmKSBjb25zdDsKKworICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgQ29yZUlQQzo6U3luY1JlcGx5
TW9kZSBkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyKik7CisKK3ByaXZhdGU6CisgICAgV2ViSWNvbkRhdGFiYXNlKFdlYkNvbnRleHQqKTsK
KworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisg
ICAgdm9pZCBkaWRSZWNlaXZlV2ViSWNvbkRhdGFiYXNlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAg
ICBDb3JlSVBDOjpTeW5jUmVwbHlNb2RlIGRpZFJlY2VpdmVTeW5jV2ViSWNvbkRhdGFiYXNlTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqLCBDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKTsKKworICAgIFdlYkNv
bnRleHQqIG1fd2ViQ29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViSWNvbkRhdGFiYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSWNvbkRhdGFiYXNlIHsKKyAgICBJY29uRGF0YUZvclBh
Z2VVUkwoV1RGOjpTdHJpbmcgcGFnZVVSTCkgLT4gKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgaWNv
bkRhdGEpCisgICAgCisgICAgUmV0YWluSWNvbkZvclBhZ2VVUkwoV1RGOjpTdHJpbmcgcGFnZVVS
TCkKKyAgICBSZWxlYXNlSWNvbkZvclBhZ2VVUkwoV1RGOjpTdHJpbmcgcGFnZVVSTCkKKyAgICAK
KyAgICBJY29uVVJMRm9yUGFnZVVSTChXVEY6OlN0cmluZyBwYWdlVVJMKSAtPiAoV1RGOjpTdHJp
bmcgaWNvblVSTCkKKyAgICBJY29uRGF0YUtub3duRm9ySWNvblVSTChXVEY6OlN0cmluZyBpY29u
VVJMKSAtPiAoYm9vbCBkYXRhS25vd24pCisgICAgTG9hZERlY2lzaW9uRm9ySWNvblVSTChXVEY6
OlN0cmluZyBpY29uVVJMKSAtPiAoaW50IGxvYWREZWNpc2lvbikKKyAgICAKKyAgICBTZXRJY29u
VVJMRm9yUGFnZVVSTChXVEY6OlN0cmluZyBpY29uVVJMLCBXVEY6OlN0cmluZyBwYWdlVVJMKQor
ICAgIFNldEljb25EYXRhRm9ySWNvblVSTChDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGljb25EYXRh
LCBXVEY6OlN0cmluZyBpY29uVVJMKQorfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDgxMTcyKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2
ICsyNTIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoCiAgICAg
ICAgIHx8IG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCkKICAgICAgICAgfHwgbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dl
YkRhdGFiYXNlTWFuYWdlclByb3h5PigpCiAgICAgICAgIHx8IG1lc3NhZ2VJRC5pczxDb3JlSVBD
OjpNZXNzYWdlQ2xhc3NXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKQorICAgICAgICB8fCBt
ZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzV2ViSWNvbkRhdGFiYXNlPigpCiAgICAg
ICAgIHx8IG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyUHJveHk+KCkKICAgICAgICAgfHwgbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3Nh
Z2VDbGFzc1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk+KCkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7
CkBAIC0yOTAsNyArMjkxLDggQEAgQ29yZUlQQzo6U3luY1JlcGx5TW9kZSBXZWJQcm9jZXNzUHJv
eHk6OgogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNz
YWdlQ2xhc3NXZWJDb250ZXh0PigpIHx8IG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xh
c3NXZWJDb250ZXh0TGVnYWN5PigpICB8fCBtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNs
YXNzRG93bmxvYWRQcm94eT4oKSkKKyAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3Nh
Z2VDbGFzc1dlYkNvbnRleHQ+KCkgfHwgbWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFz
c1dlYkNvbnRleHRMZWdhY3k+KCkgfHwgCisgICAgICAgIG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpN
ZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5PigpIHx8IG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNz
YWdlQ2xhc3NXZWJJY29uRGF0YWJhc2U+KCkpCiAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywgcmVw
bHkpOwogCiAgICAgdWludDY0X3QgcGFnZUlEID0gYXJndW1lbnRzLT5kZXN0aW5hdGlvbklEKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAko
cmV2aXNpb24gODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMywxMSBAQCB2b2lkIFdLQ29udGV4
dFN0b3BNZW1vcnlTYW1wbGVyKFdLQ29udGV4CiAgICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zdG9w
TWVtb3J5U2FtcGxlcigpOwogfQogCit2b2lkIFdLQ29udGV4dFNldEljb25EYXRhYmFzZVBhdGgo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGljb25EYXRhYmFzZVBhdGgpCit7
CisgICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zZXRJY29uRGF0YWJhc2VQYXRoKHRvSW1wbChpY29u
RGF0YWJhc2VQYXRoKS0+c3RyaW5nKCkpOworfQorCiB2b2lkIFdLQ29udGV4dFNldERhdGFiYXNl
RGlyZWN0b3J5KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURp
cmVjdG9yeSkKIHsKICAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldERhdGFiYXNlRGlyZWN0b3J5
KHRvSW1wbChkYXRhYmFzZURpcmVjdG9yeSktPnN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24g
ODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFJlZ2lzdGVyVVJMU2NoZW0KIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0RG9tYWlu
UmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tT
dHJpbmdSZWYgdXJsU2NoZW1lKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0SWNvbkRh
dGFiYXNlUGF0aChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tTdHJpbmdSZWYgaWNvbkRhdGFiYXNl
UGF0aCk7CisKIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgZWZmZWN0aXZlIGlm
IGNhbGxlZCBiZWZvcmUgdGhlIFdlYiBwcm9jZXNzIGlzIGxhdW5jaGVkLiBCdXQKIC8vIHdlIHNo
b3VsZCByZWFsbHkgY2hhbmdlIHRoZXNlIHNldHRpbmdzIHRvIGJlIG9uIFdlYlByZWZlcmVuY2Vz
IGFuZCBjaGFuZ2VhYmxlIGF0IHJ1bnRpbWUuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRE
YXRhYmFzZURpcmVjdG9yeShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tTdHJpbmdSZWYgZGF0YWJh
c2VEaXJlY3RvcnkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YkNvbnRleHRHdGsuY3BwCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDEy
IEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHREYXRhYmEKICAgICByZXR1cm4g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2Rp
cigpLCAid2Via2l0IiwgImRhdGFiYXNlcyIsIE5VTEwpKTsKIH0KIAorU3RyaW5nIFdlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIFdURjo6U3RyaW5nKCk7Cit9CisKIFN0cmluZyBX
ZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAog
ewogICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ19idWlsZF9maWxlbmFtZShnX2dl
dF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAibG9jYWxzdG9yYWdlIiwgTlVMTCkpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQkocmV2
aXNpb24gODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDkgQEAgTlNTdHJpbmcgKldlYkRhdGFi
YXNlRGlyZWN0b3J5RGVmYXVsdHNLZQogTlNTdHJpbmcgKldlYktpdExvY2FsQ2FjaGVEZWZhdWx0
c0tleSA9IEAiV2ViS2l0TG9jYWxDYWNoZSI7CiBOU1N0cmluZyAqV2ViU3RvcmFnZURpcmVjdG9y
eURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGhQcmVmZXJlbmNl
S2V5IjsKIAorLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS85MTM4ODE3PiAtIEFmdGVyIHRoaXMg
ImJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IiByYWRhciBpcyByZW1vdmVkLCB0aGlzIGNvZGUgc2hv
dWxkIGJlIHJlbW92ZWQgdG8gb25seSByZXR1cm4gYW4gZW1wdHkgU3RyaW5nLgorTlNTdHJpbmcg
KldlYkljb25EYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJJY29uRGF0YWJhc2VE
aXJlY3RvcnlEZWZhdWx0c0tleSI7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBTdHJpbmcgV2Vi
Q29udGV4dDo6YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpCkBAIC0xMDgsNiArMTExLDE1IEBA
IFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHREYXRhYmEKICAgICByZXR1cm4gW2Rh
dGFiYXNlc0RpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKIH0KIAorU3RyaW5n
IFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vOTEzODgxNz4gLSBBZnRlciB0aGlzICJiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSIgcmFkYXIgaXMgcmVtb3ZlZCwgdGhpcyBjb2RlIHNob3VsZCBi
ZSByZW1vdmVkIHRvIG9ubHkgcmV0dXJuIGFuIGVtcHR5IFN0cmluZy4KKyAgICBOU1N0cmluZyAq
ZGF0YWJhc2VzRGlyZWN0b3J5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gb2JqZWN0Rm9yS2V5OldlYkljb25EYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAg
ICBpZiAoIWRhdGFiYXNlc0RpcmVjdG9yeSB8fCAhW2RhdGFiYXNlc0RpcmVjdG9yeSBpc0tpbmRP
ZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICBkYXRhYmFzZXNEaXJlY3RvcnkgPSBA
In4vTGlicmFyeS9JY29ucy9XZWJwYWdlSWNvbnMuZGIiOworICAgIHJldHVybiBbZGF0YWJhc2Vz
RGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdOworfQorCiBTdHJpbmcgV2ViQ29u
dGV4dDo6cGxhdGZvcm1EZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKIHsKICAg
ICBOU1N0cmluZyAqbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OldlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0
c0tleV07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0
LmNwcAkocmV2aXNpb24gODExNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2Vi
Q29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTIgQEAgU3RyaW5nIFdl
YkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdERhdGFiYQogICAgIHJldHVybiAiIjsKIH0KIAorU3Ry
aW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuICIiOworfQorCiBTdHJpbmcg
V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYkNvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDYgKzgxLDEyIEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHREYXRh
YmEKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6
OmxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpLCAiRGF0YWJhc2VzIik7CiB9CiAK
K1N0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29u
c3QKK3sKKyAgICAvLyBJY29uRGF0YWJhc2Ugc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQg
b24gV2luZG93cywgYW5kIHNob3VsZCB0aGVyZWZvcmUgaGF2ZSBubyBkZWZhdWx0IHBhdGguCisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCiBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZh
dWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6OmxvY2FsVXNlclNwZWNpZmljU3RvcmFn
ZURpcmVjdG9yeSgpLCAiTG9jYWxTdG9yYWdlIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MTE3MikKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjY2LDYgKzI2NiwxMCBAQAogCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0Mg
LyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4
dE1lbnVDbGllbnRNYWMubW0gKi87IH07CiAJCTUxMEZCQjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMEZCQjk4MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhLmNwcCAqLzsgfTsKIAkJNTEwRkJCOUIxMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNv
bnRleHRNZW51SXRlbURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMEZCQjk5MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1E
YXRhLmggKi87IH07CisJCTUxMUIyNEE2MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJh
c2VQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTFCMjRBNDEzMkUwOTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwICov
OyB9OworCQk1MTFCMjRBNzEzMkUwOTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUIyNEE1
MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5oICovOyB9OworCQk1MTFC
MjRBQTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUIyNEE4MTMyRTA5NzIwMDA2NUEw
QyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwICovOyB9OworCQk1MTFCMjRBQjEzMkUwOTcyMDAwNjVB
MEMgLyogV2ViSWNvbkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFCMjRBOTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNl
LmggKi87IH07CiAJCTUxMjkzNUQ3MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0
ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
OTM1RDUxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5jcHAgKi87IH07CiAJ
CTUxMjkzNUQ4MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUQ2MTI4OEQxOTQw
MEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCAqLzsgfTsKIAkJNTEyOTM1RTMxMjg4RDk3
ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUUxMTI4OEQ5
NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgKi87
IH07CkBAIC0zMzMsNiArMzM3LDEwIEBACiAJCTUxQUNCQkExMTI3QThGMkMwMEQyMDNCOSAvKiBX
ZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFBQ0JCOUYxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51
UHJveHlNYWMubW0gKi87IH07CiAJCTUxQjMwMDUwMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNr
Rm9yd2FyZExpc3RDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0Yu
Y3BwICovOyB9OwogCQk1MUIzMDA1MTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMzAw
NEYxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCAqLzsgfTsKKwkJNTFEMDJG
NjQxMzJFQzVCOTAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwMkY2MzEz
MkVDNUI5MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsg
fTsKKwkJNTFEMDJGNkExMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwMkY2
NzEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCAqLzsgfTsKKwkJ
NTFEMDJGNkIxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRDAyRjY4MTMyRUM3MzcwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CisJCTUxRDAyRjZDMTMyRUM3MzcwMEJFQUE5NiAvKiBXZWJJY29u
RGF0YWJhc2VQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUQwMkY2OTEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNl
UHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDggLyogV0tC
dW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNw
cCAqLzsgfTsKIAkJNjU5QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIEluamVjdGVkQnVuZGxlUGFn
ZVJlc291cmNlTG9hZENsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQ
YWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCAqLzsgfTsKIAkJNjVCODZGMUUxMkYxMURFMzAwQjdE
RDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNw
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CkBA
IC0xMTEyLDYgKzExMjAsMTAgQEAKIAkJNTEwMjFFOUIxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNv
bnRleHRNZW51Q2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMEZCQjk4MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51
SXRlbURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBGQkI5OTEyODhD
OTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxMUIyNEE0MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJh
c2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJJY29u
RGF0YWJhc2VQcm94eS5jcHA7IHBhdGggPSBJY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFCMjRBNTEzMkUwOTU3MDAw
NjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViSWNvbkRhdGFiYXNlUHJveHkuaDsgcGF0aCA9IEljb25EYXRhYmFzZS9XZWJJ
Y29uRGF0YWJhc2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFCMjRB
ODEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxMUIyNEE5MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAv
KiBXZWJDb250ZXh0TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQ29udGV4dE1lbnVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTEyOTM1RDYxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVudUl0ZW0uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyOTM1RTExMjg4RDk3ODAwQTRCNjk1IC8qIEluamVj
dGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTMsNiArMTE2NSw3IEBACiAJCTUxNkE0
QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdB
MzNCMzEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3QTMzQjQxMzBCMzA4QzAw
RjgwQ0I1IC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTg0QkM0QTEzMkU5MDdBMDA2QjlFMjggLyogV2ViSWNvbkRhdGFi
YXNlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4NzFCNTkxMjdDQjg5
RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvbnRleHRNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE4NzFCNUExMjdDQjg5RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxOEFDQUU5MTJBRUU2QkIwMEIwNEI4MyAvKiBXS1Byb3RlY3Rp
b25TcGFjZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJvdGVj
dGlvblNwYWNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExODQsNiAr
MTE5NywxMSBAQAogCQk1MUFDQkI5RjEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQ
cm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
bnRleHRNZW51UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjMw
MDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHBh
dGggPSBjZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQYWdlUHJveHlDRi5jcHA7IHBh
dGggPSBjZi9XZWJQYWdlUHJveHlDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxRDAyRjYzMTMyRUM1QjkwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSWNvbkRhdGFi
YXNlTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFE
MDJGNjUxMzJFQzZEMzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkljb25EYXRhYmFzZVByb3h5Lm1lc3NhZ2VzLmlu
OyBwYXRoID0gSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUQwMkY2NzEzMkVDNzM3MDBCRUFBOTYgLyog
V2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTFEMDJGNjgxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklj
b25EYXRhYmFzZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFEMDJGNjkxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFi
YXNlUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1REFENzI5
NDExNkZGNzBCMDBFRTUzOTYgLyogV2ViUHJvY2Vzcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
eGNjb25maWc7IHBhdGggPSBXZWJQcm9jZXNzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1REFENzNGMTExNkZGOTBDMDBFRTUzOTYgLyogQmFzZVRhcmdldC54Y2NvbmZp
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlVGFyZ2V0LnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQ2QTgyOTEzMDAwMTY0MDAwQ0VCMUMgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjU4LDYgKzIyNzYsMTYgQEAK
IAkJCW5hbWUgPSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxRkJC
OUMxMTMyRTA3OTIwMEYzMjdCNCAvKiBJY29uRGF0YWJhc2UgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxMUIyNEE0MTMyRTA5NTcwMDA2NUEwQyAvKiBX
ZWJJY29uRGF0YWJhc2VQcm94eS5jcHAgKi8sCisJCQkJNTExQjI0QTUxMzJFMDk1NzAwMDY1QTBD
IC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggKi8sCisJCQkJNTFEMDJGNjUxMzJFQzZEMzAwQkVB
QTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCW5h
bWUgPSBJY29uRGF0YWJhc2U7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlC
QzAzMkQ1QzEwRjQzNkQ1MDA1OEMxNUEgLyogV2ViUHJvY2VzcyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjY3LDYgKzIyOTUsNyBAQAogCQkJCTMzMDkz
NDRCMTMxNUI5M0EwMDk3QTdCQyAvKiBDb29raWVzICovLAogCQkJCTFBNjE2MTRDMTI3Nzk4QjUw
MDNBQ0Q4NiAvKiBEb3dubG9hZHMgKi8sCiAJCQkJQkMwRTVGQ0IxMkQ2OTZERDAwMTJBNzJBIC8q
IEdlb2xvY2F0aW9uICovLAorCQkJCTUxRkJCOUMxMTMyRTA3OTIwMEYzMjdCNCAvKiBJY29uRGF0
YWJhc2UgKi8sCiAJCQkJQkMyMDRFREYxMUM4M0U3MjAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxl
ICovLAogCQkJCTUxQTlFMEZCMTMxNUNDMEUwMDlFNzAzMSAvKiBLZXlWYWx1ZVN0b3JhZ2UgKi8s
CiAJCQkJMUE2RkEwMUMxMUUxNTI2MzAwREIxMzcxIC8qIG1hYyAqLywKQEAgLTIzNjUsOSArMjM5
NCw2IEBACiAJCUJDMDMyREMzMTBGNDM4MjYwMDU4QzE1QSAvKiBVSVByb2Nlc3MgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUNENzNCQTNFMTMxQTJFOEEw
MEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmNwcCAqLywKLQkJCQlDRDczQkEz
RjEzMUEyRThBMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oICovLAotCQkJ
CUNENzNCQTQwMTMxQTJFOEEwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluICovLAogCQkJCUJDMDMyREM0MTBGNDM4N0MwMDU4QzE1QSAvKiBBUEkgKi8sCiAJ
CQkJNTEyRjU4OEQxMkE4ODM2RjAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uICovLAogCQkJCTUx
QjMwMDREMTI1MjlDRjUwMDBCNUNBMCAvKiBjZiAqLywKQEAgLTI0MzcsNiArMjQ2Myw5IEBACiAJ
CQkJQkNCOUY2OUUxMTIzQTg0QjAwQTEzN0UwIC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eS5oICovLAogCQkJCUJDMTExQjBBMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJGcmFtZVByb3h5LmNw
cCAqLywKIAkJCQlCQzlCMzg5RjEwRjUzOEJFMDA0NDNBMTUgLyogV2ViRnJhbWVQcm94eS5oICov
LAorCQkJCUNENzNCQTNFMTMxQTJFOEEwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmNwcCAqLywKKwkJCQlDRDczQkEzRjEzMUEyRThBMDBFRURFRDIgLyogV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eS5oICovLAorCQkJCUNENzNCQTQwMTMxQTJFOEEwMEVFREVEMiAvKiBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUJDNTRDQUNBMTJENjQy
OTEwMDVDNjdCMCAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJQkM1
NENBQzkxMkQ2NDI5MTAwNUM2N0IwIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmggKi8s
CiAJCQkJQkMwRTYxNTIxMkQ2Q0FDODAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluICovLApAQCAtMjQ0NCw2ICsyNDczLDkgQEAKIAkJCQlCQzFCRTFGMDEy
RDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5oICovLAogCQkJCUJDRjY5
Rjg0MTE3NkNENkYwMDQ3MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmNwcCAqLywKIAkJCQlCQ0Y2
OUY4NTExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5oICovLAorCQkJCTUxMUIy
NEE4MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwICovLAorCQkJCTUxMUIy
NEE5MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCAqLywKKwkJCQk1MTg0QkM0
QTEzMkU5MDdBMDA2QjlFMjggLyogV2ViSWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmluICovLAogCQkJ
CTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCiAJ
CQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCiAJ
CQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2Vz
LmluICovLApAQCAtMjk5NCwxMCArMzAyNiw2IEBACiAJCUMwQ0U3MjlEMTI0N0U3MUQwMEJDMEVD
NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCUNENzNCQTQ4MTMxQUNEOEUwMEVFREVEMiAvKiBXZWJGdWxsU2NyZWVuTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJQ0Q3M0JBNDkxMzFBQ0Q4RTAwRUVERUQy
IC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKLQkJCQlDRDczQkE0QTEzMUFD
RDhGMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi8sCi0J
CQkJQ0Q3M0JBNDUxMzFBQ0M4ODAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBNjQyMzA2MTJERDA5RUIwMENBQUUyQyAvKiBE
cmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQTY0MjMwNzEyREQw
OUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJNTEyRjU4
QTAxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCkBAIC0zMDMwLDEwICszMDU4LDE4IEBACiAJCQkJRjYyQTc2QjMxMkIxQjI1RjAw
MDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VzLmggKi8sCiAJCQkJRjYyQTc2QjQx
MkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLywKIAkJCQlGNjJBNzZCNTEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5h
Z2VyUHJveHlNZXNzYWdlcy5oICovLAorCQkJCUNENzNCQTQ4MTMxQUNEOEUwMEVFREVEMiAvKiBX
ZWJGdWxsU2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQ0Q3M0JBNDkx
MzFBQ0Q4RTAwRUVERUQyIC8qIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCAqLywKKwkJ
CQlDRDczQkE0QTEzMUFDRDhGMDBFRURFRDIgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1l
c3NhZ2VzLmggKi8sCisJCQkJQ0Q3M0JBNDUxMzFBQ0M4ODAwRUVERUQyIC8qIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUJDMEU2MDVGMTJENkJB
OTEwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAogCQkJCUJDMEU2MDYwMTJENkJBOTEwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJN
ZXNzYWdlcy5oICovLAogCQkJCUJDMEU2MTgwMTJENkNCMUQwMDEyQTcyQSAvKiBXZWJHZW9sb2Nh
dGlvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQkMwRTYxODExMkQ2
Q0IxRDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywK
KwkJCQk1MUQwMkY2MzEzMkVDNUI5MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKKwkJCQk1MUQwMkY2NzEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRh
dGFiYXNlTWVzc2FnZXMuaCAqLywKKwkJCQk1MUQwMkY2ODEzMkVDNzM3MDBCRUFBOTYgLyogV2Vi
SWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTUxRDAyRjY5MTMy
RUM3MzcwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJ
MUM4RTJBMzExMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8sCiAJCQkJMUM4RTJBMzIxMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3Nh
Z2VzLmggKi8sCiAJCQkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTM0OTAsNiArMzUyNiwxMCBAQAogCQkJCTMz
QUExMDY3MTMxRjA2MDAwMEQ0QTU3NSAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQ0E4NUM5MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZENTQ4QzEzMkQ4MjY4
MDA1NUQ4MTYgLyogV0tFcnJvckNGLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTFCMjRBNzEzMkUw
OTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMUIyNEFCMTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxRDAyRjZBMTMyRUM3MzcwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFEMDJGNkMxMzJFQzczNzAwQkVBQTk2IC8qIFdl
Ykljb25EYXRhYmFzZVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNDA5OCw2ICs0
MTM4LDEwIEBACiAJCQkJQ0RDQTg1RUUxMzJBRDcwMTAwRTk2MURGIC8qIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRENBODYwMzEzMkFEQzA1MDBF
OTYxREYgLyogV2ViRnVsbFNjcmVlbk1hbmFnZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0ZENTQ4QjEzMkQ4MjY4MDA1NUQ4MTYgLyogV0tFcnJvckNGLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxMUIyNEE2MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTFCMjRBQTEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRDAyRjY0MTMyRUM1QjkwMEJFQUE5NiAv
KiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTFEMDJGNkIxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBX
ZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICNlbmRpZgogICAgICwgbV90ZXh0Q2hlY2tlclN0YXRl
KCkKICAgICAsIG1fZ2VvbG9jYXRpb25NYW5hZ2VyKHRoaXMpCisgICAgLCBtX2ljb25EYXRhYmFz
ZVByb3h5KHRoaXMpCiB7CiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAgICAgLy8gSW5p
dGlhbGl6ZSBvdXIgcGxhdGZvcm0gc3RyYXRlZ2llcy4KQEAgLTE3Niw2ICsxNzcsMTAgQEAgdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhjbwogICAgIFdlYkRhdGFiYXNlTWFu
YWdlcjo6aW5pdGlhbGl6ZShwYXJhbWV0ZXJzLmRhdGFiYXNlRGlyZWN0b3J5KTsKICNlbmRpZgog
CisjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKKyAgICBtX2ljb25EYXRhYmFzZVByb3h5LnNldEVu
YWJsZWQocGFyYW1ldGVycy5pY29uRGF0YWJhc2VFbmFibGVkKTsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQogICAgIFN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihw
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSk7CiAgICAgbV9sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPSBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeTsKQEAgLTU4Miw2ICs1ODcs
MTEgQEAgdm9pZCBXZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xh
c3NXZWJJY29uRGF0YWJhc2VQcm94eT4oKSkgeworICAgICAgICBtX2ljb25EYXRhYmFzZVByb3h5
LmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVz
c2FnZUNsYXNzV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcj4oKSkgewogICAgICAgICBXZWJLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyOjpzaGFyZWQoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9u
LCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRM
aW5rVGFibGUuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbk1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJXZWJJY29uRGF0YWJhc2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC0yMDYsNiArMjA3LDcgQEAgcHJpdmF0ZToKIAogICAgIFRleHRDaGVja2VyU3RhdGUgbV90
ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0aW9u
TWFuYWdlcjsKKyAgICBXZWJJY29uRGF0YWJhc2VQcm94eSBtX2ljb25EYXRhYmFzZVByb3h5Owog
ICAgIAogICAgIFN0cmluZyBtX2xvY2FsU3RvcmFnZURpcmVjdG9yeTsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2Uv
V2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2VQcm94eS5oIgorCisjaW5jbHVkZSAiRGF0YVJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFz
ZU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSWNvbkRhdGFi
YXNlUHJveHk6On5XZWJJY29uRGF0YWJhc2VQcm94eSgpCit7Cit9CisKK1dlYkljb25EYXRhYmFz
ZVByb3h5OjpXZWJJY29uRGF0YWJhc2VQcm94eShXZWJQcm9jZXNzKiBwcm9jZXNzKQorICAgIDog
bV9pc0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX3Byb2Nlc3MocHJvY2VzcykKK3sKK30KKworYm9v
bCBXZWJJY29uRGF0YWJhc2VQcm94eTo6aXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pc0VuYWJsZWQ7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlUHJveHk6OnNldEVuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIGlmIChlbmFibGVkID09IG1faXNFbmFibGVkKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOworICAgIHNldEdsb2Jh
bEljb25EYXRhYmFzZShlbmFibGVkID8gdGhpcyA6IDApOworfQorCitJbWFnZSogV2ViSWNvbkRh
dGFiYXNlUHJveHk6Omljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VsdDsKKyAg
ICBpZiAoIW1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViSWNv
bkRhdGFiYXNlOjpJY29uRGF0YUZvclBhZ2VVUkwocGFnZVVSTCksIE1lc3NhZ2VzOjpXZWJJY29u
RGF0YWJhc2U6Okljb25EYXRhRm9yUGFnZVVSTDo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIC8vIEZJWE1FOiBSZXR1cm4gSW1hZ2UgY3JlYXRlZCB3aXRo
IHRoZSBhYm92ZSBkYXRhLgorICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkljb25EYXRhYmFz
ZVByb3h5OjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7Cisg
ICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFz
ZTo6UmV0YWluSWNvbkZvclBhZ2VVUkwocGFnZVVSTCksIDApOworfQorCit2b2lkIFdlYkljb25E
YXRhYmFzZVByb3h5OjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJM
KQoreworICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJY29u
RGF0YWJhc2U6OlJlbGVhc2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKSwgMCk7Cit9CisKK1N0cmlu
ZyBXZWJJY29uRGF0YWJhc2VQcm94eTo6aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBw
YWdlVVJMKQoreworICAgIFN0cmluZyByZXN1bHQ7CisgICAgaWYgKCFtX3Byb2Nlc3MtPmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6SWNvblVSTEZvclBh
Z2VVUkwocGFnZVVSTCksIE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6Okljb25VUkxGb3JQYWdl
VVJMOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgV2ViSWNvbkRhdGFiYXNlUHJveHk6Omljb25E
YXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCkKK3sKKyAgICBib29sIHJl
c3VsdDsKKyAgICBpZiAoIW1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViSWNvbkRhdGFiYXNlOjpJY29uRGF0YUtub3duRm9ySWNvblVSTChpY29uVVJMKSwgTWVz
c2FnZXM6OldlYkljb25EYXRhYmFzZTo6SWNvbkRhdGFLbm93bkZvckljb25VUkw6OlJlcGx5KHJl
c3VsdCksIDApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSWNvbkxvYWREZWNpc2lvbiBXZWJJY29uRGF0YWJhc2VQcm94eTo6bG9hZERlY2lz
aW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlcikKK3sKKyAgICBJY29uTG9hZERlY2lzaW9uIHJlc3VsdDsKKyAgICBpZiAoIW1f
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNl
OjpMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGljb25VUkwpLCBNZXNzYWdlczo6V2ViSWNvbkRhdGFi
YXNlOjpMb2FkRGVjaXNpb25Gb3JJY29uVVJMOjpSZXBseSgoaW50JilyZXN1bHQpLCAwKSkKKyAg
ICAgICAgcmV0dXJuIEljb25Mb2FkTm87CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgbV9wcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6U2V0SWNvblVSTEZv
clBhZ2VVUkwoaWNvblVSTCwgcGFnZVVSTCksIDApOworfQorCit2b2lkIFdlYkljb25EYXRhYmFz
ZVByb3h5OjpzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGlj
b25EYXRhLCBjb25zdCBTdHJpbmcmIGljb25VUkwpCit7CisgICAgQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZSBkYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGljb25EYXRhLT5kYXRh
KCkpLCBpY29uRGF0YS0+c2l6ZSgpKTsKKyAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlOjpTZXRJY29uRGF0YUZvckljb25VUkwoZGF0YSwg
aWNvblVSTCksIDApOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZVByb3h5Ojp1cmxJbXBvcnRG
aW5pc2hlZCgpCit7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlUHJveHk6OmRpZFJlY2VpdmVN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJ
RCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQoreworICAg
IGRpZFJlY2VpdmVXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2Fn
ZUlELCBhcmd1bWVudHMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2Vi
SWNvbkRhdGFiYXNlUHJveHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkljb25EYXRhYmFzZVByb3h5
X2gKKyNkZWZpbmUgV2ViSWNvbkRhdGFiYXNlUHJveHlfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZUJhc2UuaD4KKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgeworICAgIGNsYXNzIEFyZ3VtZW50RGVj
b2RlcjsKKyAgICBjbGFzcyBDb25uZWN0aW9uOworICAgIGNsYXNzIE1lc3NhZ2VJRDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlByb2Nlc3M7CisKK2NsYXNzIFdlYkljb25E
YXRhYmFzZVByb3h5IDogcHVibGljIFdlYkNvcmU6Okljb25EYXRhYmFzZUJhc2UgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFdlYkljb25EYXRhYmFzZVByb3h5KFdlYlByb2Nlc3MqKTsKKyAgICB2
aXJ0dWFsIH5XZWJJY29uRGF0YWJhc2VQcm94eSgpOworCisgICAgdmlydHVhbCBib29sIGlzRW5h
YmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICAKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkltYWdlKiBpY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHJldGFpbkljb25Gb3JQ
YWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSWNvbkZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBpY29uVVJMRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaWNvbkRhdGFLbm93bkZvcklj
b25VUkwoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJY29uTG9hZERlY2lz
aW9uIGxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblVSTEZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEljb25E
YXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0
cmluZyYpOworICAgICAgICAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRpZFJlY2VpdmVXZWJJY29uRGF0YWJhc2VQcm94
eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgCisgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIFVJ
UHJvY2VzcworICAgIHZvaWQgdXJsSW1wb3J0RmluaXNoZWQoKTsKKworICAgIGJvb2wgbV9pc0Vu
YWJsZWQ7CisgICAgV2ViUHJvY2VzcyogbV9wcm9jZXNzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJJY29uRGF0YWJhc2VQcm94eV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRh
YmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkljb25EYXRhYmFzZVBy
b3h5IHsKKyAgICBVUkxJbXBvcnRGaW5pc2hlZCgpCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi93
aW4vV2ViS2l0Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvd2luL1dlYktp
dDIudmNwcm9qCShyZXZpc2lvbiA4MTE3MikKKysrIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQy
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ0Myw2ICsxNDQzLDIyIEBACiAJCQkJPC9GaWxl
PgogCQkJPC9GaWx0ZXI+CiAJCQk8RmlsdGVyCisJCQkJTmFtZT0iSWNvbkRhdGFiYXNlIgorCQkJ
CT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcSWNvbkRhdGFi
YXNlXFdlYkljb25EYXRhYmFzZVByb3h5LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcSWNvbkRhdGFiYXNlXFdlYklj
b25EYXRhYmFzZVByb3h5LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9jZXNzXEljb25EYXRhYmFzZVxXZWJJY29uRGF0YWJhc2VQ
cm94eS5tZXNzYWdlcy5pbiIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCTwvRmlsdGVyPgorCQkJ
PEZpbHRlcgogCQkJCU5hbWU9IktleVZhbHVlU3RvcmFnZSIKIAkJCQk+CiAJCQkJPEZpbGUKQEAg
LTI1NzksNiArMjU5NSwxOCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViSWNvbkRhdGFiYXNlLmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkljb25E
YXRhYmFzZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxVSVByb2Nlc3NcV2ViSWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmluIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViSW5zcGVj
dG9yUHJveHkuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTM2MjMsNiArMzY1MSwyMiBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFdlYkljb25E
YXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0
TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xXZWJJY29uRGF0YWJhc2VQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlcy5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFdlYkluc3BlY3Rvck1l
c3NhZ2VSZWNlaXZlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgo=
</data>
<flag name="review"
          id="78075"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="78076"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86128</attachid>
            <date>2011-03-17 18:15:34 -0700</date>
            <delta_ts>2011-03-22 10:36:44 -0700</delta_ts>
            <desc>Patch #2, v1 - Change IconDatabaseBase and FrameLoader icon logic to support an asynchronous mode.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>44917</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNDE5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDMtMTcgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NjQyNQorICAgICAgICBNb3JlIGdyb3VuZHdvcmsgZm9yIFdlYktpdDIgSWNvbkRhdGFiYXNl
CisKKyAgICAgICAgLVVwZGF0ZSB0aGUgc3luY2hyb25vdXMgbWV0aG9kIG5hbWVzIHRvIGJlIHBy
ZWZpeGVkIHdpdGggInN5bmNocm9ub3VzLiIKKyAgICAgICAgLUNhbGwgYXN5bmNocm9ub3VzIHZl
cnNpb25zIG9mIHRoZSBhcHByb3ByaWF0ZSBtZXRob2RzIGlmIHRoZSBJY29uRGF0YWJhc2Ugc3Vw
cG9ydHMgdGhlbS4KKworICAgICAgICBVcGRhdGUgaWNvbiBkYXRhYmFzZSBjYWxscyB0byBiZSBw
cmVmaXhlZCB3aXRoICJzeW5jaHJvbm91cyI6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvY2Yv
TGVnYWN5V2ViQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZUJhc2U6OnN5bmNocm9ub3VzSWNvbkRhdGFLbm93
bkZvckljb25VUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6c3luY2hy
b25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRh
YmFzZUJhc2U6OnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAqIGxvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OnN5
bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjpyZWFkSWNvbkZvclBhZ2VVUkxGcm9tRGlzayk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0
YWJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29u
VVJMKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZUJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwpOgorCisgICAgICAgIEFk
ZCBuYXNjZW50IHN1cHBvcnQgZm9yIGFuIGFzeW5jaHJvbm91cyBpY29uIGRhdGFiYXNlIG1vZGU6
CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RW51bUNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RW51bUNhbGxi
YWNrOjp+RW51bUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkVudW1DYWxsYmFjazo6cGVy
Zm9ybUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkVudW1DYWxsYmFjazo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbnVtQ2FsbGJhY2s6OkVudW1DYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9iamVjdENhbGxiYWNrOjp+T2JqZWN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6T2Jq
ZWN0Q2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RD
YWxsYmFjazo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RDYWxsYmFjazo6
T2JqZWN0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6c3Vw
cG9ydHNBc3luY2hyb25vdXNNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZUJh
c2U6OmxvYWREZWNpc2lvbkZvckljb25VUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlQmFzZTo6aWNvbkRhdGFGb3JJY29uVVJMKToKKworICAgICAgICBBZGQgaW50ZXJmYWNlcyB0
byB1c2UgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9ucyBvZiBjZXJ0YWluIEljb25EYXRhYmFzZSBj
YWxsczoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXI6On5Eb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcjo6aWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjppY29uTG9hZERlY2lzaW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OmdldEljb25Mb2FkRGVjaXNpb25Gb3JJY29uVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Omljb25EYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OmdldEljb25EYXRhRm9ySWNvblVSTCk6CisgICAgICAgICogbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmg6CisKKyAgICAgICAgQnJlYWsgInN0YXJ0SWNvbkxvYWRlciIgaW50byB0
d28gcGllY2VzIHNvIGl0IGNhbiBiZSB1c2VkIGZyb20gYm90aCB0aGUgc3luY2hyb25vdXMgYW5k
IGFzeW5jaHJvbm91cyAKKyAgICAgICAgaWNvbiBkYXRhYmFzZSBtb2RlczoKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omlj
b25Mb2FkRGVjaXNpb25SZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
c3RhcnRJY29uTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51
ZUljb25Mb2FkV2l0aERlY2lzaW9uKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDExLTAzLTE3ICBWaWN0b3JpYSBLaXJz
dCAgPHZya0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2Vs
bC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTAgKzI0NSw4IEBA
IF9fWk43V2ViQ29yZTEyR0NDb250cm9sbGVyMTdnYXJiYWdlQ29sbGUKIF9fWk43V2ViQ29yZTEy
R0NDb250cm9sbGVyNDNnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5n
RWIKIF9fWk43V2ViQ29yZTEySWNvbkRhdGFiYXNlMTBzZXRFbmFibGVkRWIKIF9fWk43V2ViQ29y
ZTEySWNvbkRhdGFiYXNlMTFkZWZhdWx0SWNvbkVSS05TXzdJbnRTaXplRQotX19aTjdXZWJDb3Jl
MTJJY29uRGF0YWJhc2UxNGljb25Gb3JQYWdlVVJMRVJLTjNXVEY2U3RyaW5nRVJLTlNfN0ludFNp
emVFCiBfX1pON1dlYkNvcmUxMkljb25EYXRhYmFzZTE0cmVtb3ZlQWxsSWNvbnNFdgogX19aTjdX
ZWJDb3JlMTJJY29uRGF0YWJhc2UxNWljb25SZWNvcmRDb3VudEV2Ci1fX1pON1dlYkNvcmUxMklj
b25EYXRhYmFzZTE3aWNvblVSTEZvclBhZ2VVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNv
cmUxMkljb25EYXRhYmFzZTE5cGFnZVVSTE1hcHBpbmdDb3VudEV2CiBfX1pON1dlYkNvcmUxMklj
b25EYXRhYmFzZTIwYWxsb3dEYXRhYmFzZUNsZWFudXBFdgogX19aTjdXZWJDb3JlMTJJY29uRGF0
YWJhc2UyMGRlbGF5RGF0YWJhc2VDbGVhbnVwRXYgICAKQEAgLTQyNiw2ICs0MjQsNyBAQCBfX1pO
N1dlYkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGCiBfX1pON1dlYkNvcmUxNkZvbnRQ
bGF0Zm9ybURhdGFDMUVQNk5TRm9udGZiYk5TXzE1Rm9udE9yaWVudGF0aW9uRU5TXzE1VGV4dE9y
aWVudGF0aW9uRU5TXzE2Rm9udFdpZHRoVmFyaWFudEUKIF9fWk43V2ViQ29yZTE2Rm9udFBsYXRm
b3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDEzc2V0QXV0b2ZpbGxl
ZEViCitfX1pON1dlYkNvcmUxNkljb25EYXRhYmFzZUJhc2UyOHN5bmNocm9ub3VzSWNvblVSTEZv
clBhZ2VVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNkxlZ2FjeVdlYkFyY2hpdmUx
OWNyZWF0ZUZyb21TZWxlY3Rpb25FUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTE2TGVnYWN5V2Vi
QXJjaGl2ZTIxcmF3RGF0YVJlcHJlc2VudGF0aW9uRXYKIF9fWk43V2ViQ29yZTE2TGVnYWN5V2Vi
QXJjaGl2ZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTVBcmNoaXZlUmVzb3VyY2VFRUVS
TlMxXzZWZWN0b3JJUzRfTG0wRUVFUk5TNV9JTlMyX0lTMF9FRUxtMEVFRQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA4MTQwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiw2ICsxMTIsMTAgQEAgRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRl
cgogRG9jdW1lbnRMb2FkZXI6On5Eb2N1bWVudExvYWRlcigpCiB7CiAgICAgQVNTRVJUKCFtX2Zy
YW1lIHx8IGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgIT0gdGhpcyB8fCAh
ZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nKCkpOworICAgIGlmIChtX2ljb25Mb2FkRGVjaXNpb25D
YWxsYmFjaykKKyAgICAgICAgbV9pY29uTG9hZERlY2lzaW9uQ2FsbGJhY2stPmludmFsaWRhdGUo
KTsKKyAgICBpZiAobV9pY29uRGF0YUNhbGxiYWNrKQorICAgICAgICBtX2ljb25EYXRhQ2FsbGJh
Y2stPmludmFsaWRhdGUoKTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IERvY3VtZW50
TG9hZGVyOjptYWluUmVzb3VyY2VEYXRhKCkgY29uc3QKQEAgLTgzNiw3ICs4NDAsMzkgQEAgdm9p
ZCBEb2N1bWVudExvYWRlcjo6dHJhbnNmZXJMb2FkaW5nUmVzbwogdm9pZCBEb2N1bWVudExvYWRl
cjo6aWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgpCiB7CiAgICAgaWYgKG1fZnJhbWUpCi0gICAg
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uTG9hZERlY2lzaW9uQXZhaWxhYmxlKCk7CisgICAg
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5pY29uTG9hZERlY2lzaW9uUmVjZWl2ZWQoaWNvbkRhdGFi
YXNlKCkuc3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKEtVUkwoZnJhbWVMb2FkZXIo
KS0+aWNvblVSTCgpKSwgdGhpcykpOwogfQogCitzdGF0aWMgdm9pZCBpY29uTG9hZERlY2lzaW9u
Q2FsbGJhY2soSWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiwgdm9pZCogY29udGV4dCkKK3sKKyAg
ICBzdGF0aWNfY2FzdDxEb2N1bWVudExvYWRlcio+KGNvbnRleHQpLT5jb250aW51ZUljb25Mb2Fk
V2l0aERlY2lzaW9uKGRlY2lzaW9uKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6Z2V0SWNv
bkxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAg
aWYgKG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrKQorICAgICAgICBtX2ljb25Mb2FkRGVjaXNp
b25DYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAgIG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNr
ID0gSWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrOjpjcmVhdGUodGhpcywgaWNvbkxvYWREZWNpc2lv
bkNhbGxiYWNrKTsKKyAgICBpY29uRGF0YWJhc2UoKS5sb2FkRGVjaXNpb25Gb3JJY29uVVJMKHVy
bFN0cmluZywgbV9pY29uTG9hZERlY2lzaW9uQ2FsbGJhY2spOworfQorCit2b2lkIERvY3VtZW50
TG9hZGVyOjpjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKEljb25Mb2FkRGVjaXNpb24gZGVj
aXNpb24pCit7CisgICAgaWYgKG1fZnJhbWUpCisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5j
b250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKGRlY2lzaW9uKTsKK30KKworc3RhdGljIHZvaWQg
aWNvbkRhdGFDYWxsYmFjayhTaGFyZWRCdWZmZXIqLCB2b2lkKikKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgb25jZSB3ZSBrbm93IHdoYXQgcGFydHMgb2YgV2ViQ29yZSBhY3R1YWxs
eSBuZWVkIHRoZSBpY29uIGRhdGEgcmV0dXJuZWQuCiB9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6
OmdldEljb25EYXRhRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sgICAKKyAg
ICBpZiAobV9pY29uRGF0YUNhbGxiYWNrKQorICAgICAgICBtX2ljb25EYXRhQ2FsbGJhY2stPmlu
dmFsaWRhdGUoKTsKKyAgICBtX2ljb25EYXRhQ2FsbGJhY2sgPSBJY29uRGF0YUNhbGxiYWNrOjpj
cmVhdGUodGhpcywgaWNvbkRhdGFDYWxsYmFjayk7CisgICAgaWNvbkRhdGFiYXNlKCkuaWNvbkRh
dGFGb3JJY29uVVJMKHVybFN0cmluZywgbV9pY29uRGF0YUNhbGxiYWNrKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmgJKHJldmlzaW9uIDgxNDA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZFRpbWluZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCisjaW5jbHVkZSAi
SWNvbkRhdGFiYXNlQmFzZS5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0x
OTMsOCArMTk0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzdGFydExv
YWRpbmdNYWluUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKICAgICAgICAgdm9p
ZCBjYW5jZWxNYWluUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAg
CisgICAgICAgIC8vIFN1cHBvcnQgaWNvbkRhdGFiYXNlIGluIHN5bmNocm9ub3VzIG1vZGUuCiAg
ICAgICAgIHZvaWQgaWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgpOwogICAgICAgICAKKyAgICAg
ICAgLy8gU3VwcG9ydCBpY29uRGF0YWJhc2UgaW4gYXN5bmNocm9ub3VzIG1vZGUuCisgICAgICAg
IHZvaWQgY29udGludWVJY29uTG9hZFdpdGhEZWNpc2lvbihJY29uTG9hZERlY2lzaW9uKTsKKyAg
ICAgICAgdm9pZCBnZXRJY29uTG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKTsK
KyAgICAgICAgdm9pZCBnZXRJY29uRGF0YUZvckljb25VUkwoY29uc3QgU3RyaW5nJik7CisgICAg
ICAgIAogICAgICAgICBib29sIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIGNvbnN0OwogICAgICAg
ICBib29sIGlzTG9hZGluZ1N1YnJlc291cmNlcygpIGNvbnN0OwogICAgICAgICBib29sIGlzTG9h
ZGluZ1BsdWdJbnMoKSBjb25zdDsKQEAgLTMyNiw2ICszMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnk7CiAKICAgICAg
ICAgRG9jdW1lbnRMb2FkVGltaW5nIG1fZG9jdW1lbnRMb2FkVGltaW5nOworICAgIAorICAgICAg
ICBSZWZQdHI8SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiBtX2ljb25Mb2FkRGVjaXNpb25DYWxs
YmFjazsKKyAgICAgICAgUmVmUHRyPEljb25EYXRhQ2FsbGJhY2s+IG1faWNvbkRhdGFDYWxsYmFj
azsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBzdWJzdGl0dXRlIHJlc291cmNl
IGRlbGl2ZXJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlz
aW9uIDgxNDA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjc4LDEyICs2NzgsMTMgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlkRW5k
RG9jdW1lbnQoKQogICAgIG1faXNMb2FkaW5nTWFpblJlc291cmNlID0gZmFsc2U7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXI6Omljb25Mb2FkRGVjaXNpb25BdmFpbGFibGUoKQorLy8gQ2FsbGJhY2sg
Zm9yIHRoZSBvbGQtc3R5bGUgc3luY2hyb25vdXMgSWNvbkRhdGFiYXNlIGludGVyZmFjZS4KK3Zv
aWQgRnJhbWVMb2FkZXI6Omljb25Mb2FkRGVjaXNpb25SZWNlaXZlZChJY29uTG9hZERlY2lzaW9u
IGljb25Mb2FkRGVjaXNpb24pCiB7CiAgICAgaWYgKCFtX21heUxvYWRJY29uTGF0ZXIpCiAgICAg
ICAgIHJldHVybjsKICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRnJhbWVMb2FkZXIgJXAgd2FzIHRv
bGQgYSBsb2FkIGRlY2lzaW9uIGlzIGF2YWlsYWJsZSBmb3IgaXRzIGljb24iLCB0aGlzKTsKLSAg
ICBzdGFydEljb25Mb2FkZXIoKTsKKyAgICBjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKGlj
b25Mb2FkRGVjaXNpb24pOwogICAgIG1fbWF5TG9hZEljb25MYXRlciA9IGZhbHNlOwogfQogCkBA
IC03MDIsNDggKzcwMyw3MyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydEljb25Mb2FkZXIoKQog
ICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJ
ZiB3ZSdyZSBub3QgcmVsb2FkaW5nIGFuZCB0aGUgaWNvbiBkYXRhYmFzZSBkb2Vzbid0IHNheSB0
byBsb2FkIG5vdyB0aGVuIGJhaWwgYmVmb3JlIHdlIGFjdHVhbGx5IHN0YXJ0IHRoZSBsb2FkCi0g
ICAgaWYgKGxvYWRUeXBlKCkgIT0gRnJhbWVMb2FkVHlwZVJlbG9hZCAmJiBsb2FkVHlwZSgpICE9
IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSB7Ci0gICAgICAgIEljb25Mb2FkRGVjaXNp
b24gZGVjaXNpb24gPSBpY29uRGF0YWJhc2UoKS5sb2FkRGVjaXNpb25Gb3JJY29uVVJMKHVybFN0
cmluZywgbV9kb2N1bWVudExvYWRlci5nZXQoKSk7Ci0gICAgICAgIGlmIChkZWNpc2lvbiA9PSBJ
Y29uTG9hZE5vKSB7Ci0gICAgICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRnJhbWVMb2FkZXI6
OnN0YXJ0SWNvbkxvYWRlcigpIC0gVG9sZCBub3QgdG8gbG9hZCB0aGlzIGljb24sIGNvbW1pdHRp
bmcgaWNvblVSTCAlcyB0byBkYXRhYmFzZSBmb3IgcGFnZVVSTCBtYXBwaW5nIiwgdXJsU3RyaW5n
LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGNvbW1pdEljb25VUkxUb0ljb25EYXRhYmFz
ZSh1cmwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3ZXJlIHRvbGQgbm90IHRv
IGxvYWQgdGhpcyBpY29uIC0gdGhhdCBtZWFucyB0aGlzIGljb24gaXMgYWxyZWFkeSBrbm93biBi
eSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgIC8vIElmIHRoZSBpY29uIGRhdGEgaGFzbid0IGJl
ZW4gcmVhZCBpbiBmcm9tIGRpc2sgeWV0LCBraWNrIG9mZiB0aGUgcmVhZCBvZiB0aGUgaWNvbiBm
cm9tIHRoZSBkYXRhYmFzZSB0byBtYWtlIHN1cmUgc29tZW9uZQotICAgICAgICAgICAgLy8gaGFz
IGRvbmUgaXQuICBUaGlzIGlzIGFmdGVyIHJlZ2lzdGVyaW5nIGZvciB0aGUgbm90aWZpY2F0aW9u
IHNvIHRoZSBXZWJWaWV3IGNhbiBjYWxsIHRoZSBhcHByb3ByaWF0ZSBkZWxlZ2F0ZSBtZXRob2Qu
Ci0gICAgICAgICAgICAvLyBPdGhlcndpc2UgaWYgdGhlIGljb24gZGF0YSAqaXMqIGF2YWlsYWJs
ZSwgbm90aWZ5IHRoZSBkZWxlZ2F0ZQotICAgICAgICAgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5p
Y29uRGF0YUtub3duRm9ySWNvblVSTCh1cmxTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgTE9H
KEljb25EYXRhYmFzZSwgIlRvbGQgbm90IHRvIGxvYWQgaWNvbiAlcyBidXQgaWNvbiBkYXRhIGlz
IG5vdCB5ZXQgYXZhaWxhYmxlIC0gcmVnaXN0ZXJpbmcgZm9yIG5vdGlmaWNhdGlvbiBhbmQgcmVx
dWVzdGluZyBsb2FkIGZyb20gZGlzayIsIHVybFN0cmluZy5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9jbGllbnQtPnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbigpOwotICAg
ICAgICAgICAgICAgIGljb25EYXRhYmFzZSgpLmljb25Gb3JQYWdlVVJMKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpLCBJbnRTaXplKDAsIDApKTsKLSAgICAgICAgICAgICAgICBp
Y29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVSTChvcmlnaW5hbFJlcXVlc3RVUkwoKS5zdHJpbmco
KSwgSW50U2l6ZSgwLCAwKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAgaWYgKGRlY2lz
aW9uID09IEljb25Mb2FkVW5rbm93bikgewotICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3
ZSBtYXkgZW5kIHVwIGxvYWRpbmcgdGhlIGljb24gbGF0ZXIsIGJ1dCB3ZSBzdGlsbCB3YW50IHRv
IGNvbW1pdCB0aGUgaWNvbiB1cmwgbWFwcGluZyB0byB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAg
IC8vIGp1c3QgaW4gY2FzZSB3ZSBkb24ndCBlbmQgdXAgbG9hZGluZyBsYXRlciAtIGlmIHdlIGNv
bW1pdCB0aGUgbWFwcGluZyBhIHNlY29uZCB0aW1lIGFmdGVyIHRoZSBsb2FkLCB0aGF0J3Mgbm8g
YmlnIGRlYWwKLSAgICAgICAgICAgIC8vIFdlIGFsc28gdGVsbCB0aGUgY2xpZW50IHRvIHJlZ2lz
dGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGljb24gaXMgcmVjZWl2ZWQgbm93IHNv
IGl0IGlzbid0IG1pc3NlZCBpbiBjYXNlIHRoZSAKLSAgICAgICAgICAgIC8vIGljb24gaXMgbGF0
ZXIgcmVhZCBpbiBmcm9tIGRpc2sKLSAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJGcmFt
ZUxvYWRlciAlcCBtaWdodCBsb2FkIGljb24gJXMgbGF0ZXIiLCB0aGlzLCB1cmxTdHJpbmcuYXNj
aWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9tYXlMb2FkSWNvbkxhdGVyID0gdHJ1ZTsgICAg
Ci0gICAgICAgICAgICBtX2NsaWVudC0+cmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKCk7Ci0g
ICAgICAgICAgICBjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UodXJsKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFBlb3BsZSB3aG8gd2FudCB0byBh
dm9pZCBsb2FkaW5nIGltYWdlcyBnZW5lcmFsbHkgd2FudCB0byBhdm9pZCBsb2FkaW5nIGFsbCBp
bWFnZXMuCiAgICAgLy8gTm93IHRoYXQgd2UndmUgYWNjb3VudGVkIGZvciBVUkwgbWFwcGluZywg
YXZvaWQgc3RhcnRpbmcgdGhlIG5ldHdvcmsgbG9hZCBpZiBpbWFnZXMgYXJlbid0IHNldCB0byBk
aXNwbGF5IGF1dG9tYXRpY2FsbHkuCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+
c2V0dGluZ3MoKTsKICAgICBpZiAoc2V0dGluZ3MgJiYgIXNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhpcyBpcyBlaXRoZXIg
YSByZWxvYWQgb3IgdGhlIGljb24gZGF0YWJhc2Ugc2FpZCAieWVzLCBsb2FkIHRoZSBpY29uIiwg
c28ga2ljayBvZmYgdGhlIGxvYWQhCisgICAgLy8gSWYgd2UncmUgcmVsb2FkaW5nIHRoZSBwYWdl
LCBhbHdheXMgc3RhcnQgdGhlIGljb24gbG9hZCBub3cuCisgICAgaWYgKGxvYWRUeXBlKCkgPT0g
RnJhbWVMb2FkVHlwZVJlbG9hZCAmJiBsb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRG
cm9tT3JpZ2luKSB7CisgICAgICAgIGNvbnRpbnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oSWNvbkxv
YWRZZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGljb25EYXRhYmFzZSgp
LnN1cHBvcnRzQXN5bmNocm9ub3VzTW9kZSgpKSB7CisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXIt
PmdldEljb25Mb2FkRGVjaXNpb25Gb3JJY29uVVJMKHVybFN0cmluZyk7CisgICAgICAgIC8vIENv
bW1pdCB0aGUgaWNvbiB1cmwgbWFwcGluZyB0byB0aGUgZGF0YWJhc2UganVzdCBpbiBjYXNlIHdl
IGRvbid0IGVuZCB1cCBsb2FkaW5nIGxhdGVyLgorICAgICAgICBjb21taXRJY29uVVJMVG9JY29u
RGF0YWJhc2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBJY29uTG9h
ZERlY2lzaW9uIGRlY2lzaW9uID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNMb2FkRGVjaXNp
b25Gb3JJY29uVVJMKHVybFN0cmluZywgbV9kb2N1bWVudExvYWRlci5nZXQoKSk7CisKKyAgICBp
ZiAoZGVjaXNpb24gPT0gSWNvbkxvYWRVbmtub3duKSB7CisgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgd2UgbWF5IGVuZCB1cCBsb2FkaW5nIHRoZSBpY29uIGxhdGVyLCBidXQgd2Ugc3RpbGwgd2Fu
dCB0byBjb21taXQgdGhlIGljb24gdXJsIG1hcHBpbmcgdG8gdGhlIGRhdGFiYXNlCisgICAgICAg
IC8vIGp1c3QgaW4gY2FzZSB3ZSBkb24ndCBlbmQgdXAgbG9hZGluZyBsYXRlciAtIGlmIHdlIGNv
bW1pdCB0aGUgbWFwcGluZyBhIHNlY29uZCB0aW1lIGFmdGVyIHRoZSBsb2FkLCB0aGF0J3Mgbm8g
YmlnIGRlYWwKKyAgICAgICAgLy8gV2UgYWxzbyB0ZWxsIHRoZSBjbGllbnQgdG8gcmVnaXN0ZXIg
Zm9yIHRoZSBub3RpZmljYXRpb24gdGhhdCB0aGUgaWNvbiBpcyByZWNlaXZlZCBub3cgc28gaXQg
aXNuJ3QgbWlzc2VkIGluIGNhc2UgdGhlIAorICAgICAgICAvLyBpY29uIGlzIGxhdGVyIHJlYWQg
aW4gZnJvbSBkaXNrCisgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJGcmFtZUxvYWRlciAlcCBt
aWdodCBsb2FkIGljb24gJXMgbGF0ZXIiLCB0aGlzLCB1cmxTdHJpbmcuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICBtX21heUxvYWRJY29uTGF0ZXIgPSB0cnVlOyAgICAKKyAgICAgICAgbV9jbGll
bnQtPnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbigpOworICAgICAgICBjb21taXRJY29uVVJM
VG9JY29uRGF0YWJhc2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRp
bnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oZGVjaXNpb24pOworfQorCit2b2lkIEZyYW1lTG9hZGVy
Ojpjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKEljb25Mb2FkRGVjaXNpb24gaWNvbkxvYWRE
ZWNpc2lvbikKK3sKKyAgICBBU1NFUlQoaWNvbkxvYWREZWNpc2lvbiAhPSBJY29uTG9hZFVua25v
d24pOworICAgIAorICAgIGlmIChpY29uTG9hZERlY2lzaW9uID09IEljb25Mb2FkTm8pIHsKKyAg
ICAgICAgS1VSTCB1cmwoaWNvblVSTCgpKTsKKyAgICAgICAgU3RyaW5nIHVybFN0cmluZyh1cmwu
c3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkZyYW1lTG9h
ZGVyOjpzdGFydEljb25Mb2FkZXIoKSAtIFRvbGQgbm90IHRvIGxvYWQgdGhpcyBpY29uLCBjb21t
aXR0aW5nIGljb25VUkwgJXMgdG8gZGF0YWJhc2UgZm9yIHBhZ2VVUkwgbWFwcGluZyIsIHVybFN0
cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGNvbW1pdEljb25VUkxUb0ljb25EYXRhYmFz
ZSh1cmwpOworICAgICAgICAKKyAgICAgICAgaWYgKGljb25EYXRhYmFzZSgpLnN1cHBvcnRzQXN5
bmNocm9ub3VzTW9kZSgpKSB7CisgICAgICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5nZXRJY29u
RGF0YUZvckljb25VUkwodXJsU3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2VyZSB0b2xkIG5vdCB0byBsb2FkIHRoaXMgaWNv
biAtIHRoYXQgbWVhbnMgdGhpcyBpY29uIGlzIGFscmVhZHkga25vd24gYnkgdGhlIGRhdGFiYXNl
CisgICAgICAgIC8vIElmIHRoZSBpY29uIGRhdGEgaGFzbid0IGJlZW4gcmVhZCBpbiBmcm9tIGRp
c2sgeWV0LCBraWNrIG9mZiB0aGUgcmVhZCBvZiB0aGUgaWNvbiBmcm9tIHRoZSBkYXRhYmFzZSB0
byBtYWtlIHN1cmUgc29tZW9uZQorICAgICAgICAvLyBoYXMgZG9uZSBpdC4gIFRoaXMgaXMgYWZ0
ZXIgcmVnaXN0ZXJpbmcgZm9yIHRoZSBub3RpZmljYXRpb24gc28gdGhlIFdlYlZpZXcgY2FuIGNh
bGwgdGhlIGFwcHJvcHJpYXRlIGRlbGVnYXRlIG1ldGhvZC4KKyAgICAgICAgLy8gT3RoZXJ3aXNl
IGlmIHRoZSBpY29uIGRhdGEgKmlzKiBhdmFpbGFibGUsIG5vdGlmeSB0aGUgZGVsZWdhdGUKKyAg
ICAgICAgaWYgKCFpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29u
VVJMKHVybFN0cmluZykpIHsKKyAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJUb2xkIG5v
dCB0byBsb2FkIGljb24gJXMgYnV0IGljb24gZGF0YSBpcyBub3QgeWV0IGF2YWlsYWJsZSAtIHJl
Z2lzdGVyaW5nIGZvciBub3RpZmljYXRpb24gYW5kIHJlcXVlc3RpbmcgbG9hZCBmcm9tIGRpc2si
LCB1cmxTdHJpbmcuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9jbGllbnQtPnJlZ2lz
dGVyRm9ySWNvbk5vdGlmaWNhdGlvbigpOworICAgICAgICAgICAgaWNvbkRhdGFiYXNlKCkuc3lu
Y2hyb25vdXNJY29uRm9yUGFnZVVSTChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KSwgSW50U2l6ZSgwLCAwKSk7CisgICAgICAgICAgICBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91
c0ljb25Gb3JQYWdlVVJMKG9yaWdpbmFsUmVxdWVzdFVSTCgpLnN0cmluZygpLCBJbnRTaXplKDAs
IDApKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRS
ZWNlaXZlSWNvbigpOworICAgICAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAg
IAogICAgIGlmICghbV9pY29uTG9hZGVyKQogICAgICAgICBtX2ljb25Mb2FkZXIgPSBJY29uTG9h
ZGVyOjpjcmVhdGUobV9mcmFtZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHJldmlzaW9uIDgxNDA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJG
cmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
ICNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZUJh
c2UuaCIKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
Tm90aWZpZXIuaCIKICNpbmNsdWRlICJTdWJmcmFtZUxvYWRlci5oIgpAQCAtMjg5LDEzICsyOTAs
MTMgQEAgcHVibGljOgogCiAgICAgRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUqIHN0YXRlTWFjaGlu
ZSgpIGNvbnN0IHsgcmV0dXJuICZtX3N0YXRlTWFjaGluZTsgfQogCi0gICAgdm9pZCBpY29uTG9h
ZERlY2lzaW9uQXZhaWxhYmxlKCk7CisgICAgdm9pZCBzdGFydEljb25Mb2FkZXIoKTsKKyAgICB2
b2lkIGljb25Mb2FkRGVjaXNpb25SZWNlaXZlZChJY29uTG9hZERlY2lzaW9uKTsKKyAgICB2b2lk
IGNvbnRpbnVlSWNvbkxvYWRXaXRoRGVjaXNpb24oSWNvbkxvYWREZWNpc2lvbik7CiAKICAgICBi
b29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUpIGNvbnN0OwogICAg
IEZyYW1lKiBmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7
CiAKLSAgICB2b2lkIHN0YXJ0SWNvbkxvYWRlcigpOwotCiAgICAgdm9pZCBhcHBseVVzZXJBZ2Vu
dChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogCiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRM
b2FkRm9yWEZyYW1lT3B0aW9ucyhjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNo
aXZlLmNwcAkocmV2aXNpb24gODE0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ2LDkgKzU0Niw5
IEBAIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXIKIAogICAgIC8vIEFk
ZCBmYXZpY29uIGlmIG9uZSBleGlzdHMgZm9yIHRoaXMgcGFnZSwgaWYgd2UgYXJlIGFyY2hpdmlu
ZyB0aGUgZW50aXJlIHBhZ2UuCiAgICAgaWYgKG5vZGVzU2l6ZSAmJiBub2Rlc1swXS0+aXNEb2N1
bWVudE5vZGUoKSAmJiBpY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQoKSkgewotICAgICAgICBjb25z
dCBTdHJpbmcmIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5pY29uVVJMRm9yUGFnZVVSTChyZXNw
b25zZVVSTCk7Ci0gICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkgJiYgaWNvbkRhdGFiYXNl
KCkuaWNvbkRhdGFLbm93bkZvckljb25VUkwoaWNvblVSTCkpIHsKLSAgICAgICAgICAgIGlmIChJ
bWFnZSogaWNvbkltYWdlID0gaWNvbkRhdGFiYXNlKCkuaWNvbkZvclBhZ2VVUkwocmVzcG9uc2VV
UkwsIEludFNpemUoMTYsIDE2KSkpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBpY29uVVJMID0g
aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChyZXNwb25zZVVSTCk7
CisgICAgICAgIGlmICghaWNvblVSTC5pc0VtcHR5KCkgJiYgaWNvbkRhdGFiYXNlKCkuc3luY2hy
b25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTChpY29uVVJMKSkgeworICAgICAgICAgICAgaWYg
KEltYWdlKiBpY29uSW1hZ2UgPSBpY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdl
VVJMKHJlc3BvbnNlVVJMLCBJbnRTaXplKDE2LCAxNikpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVh
dGUoaWNvbkltYWdlLT5kYXRhKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpY29uVVJMKSwgImlt
YWdlL3gtaWNvbiIsICIiLCAiIikpCiAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlcy5h
cHBlbmQocmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gODE0MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25z
KCkKICAgICB3YWtlU3luY1RocmVhZCgpOwogfQogCi1JbWFnZSogSWNvbkRhdGFiYXNlOjppY29u
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK0ltYWdlKiBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29u
c3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWwsIGNvbnN0IEludFNpemUmIHNpemUpCiB7ICAgCiAg
ICAgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpOwogCkBAIC0yODYsMTAgKzI4NiwxMCBAQCB2b2lk
IEljb25EYXRhYmFzZTo6cmVhZEljb25Gb3JQYWdlVVJMRnJvCiAgICAgLy8gVGhlIGVmZmVjdCBv
ZiBhc2tpbmcgZm9yIGFuIEljb24gZm9yIGEgcGFnZVVSTCBhdXRvbWF0aWNhbGx5IHF1ZXVlcyBp
dCB0byBiZSByZWFkIGZyb20gZGlzawogICAgIC8vIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4g
c2V0IGluIG1lbW9yeS4gIFRoZSBzcGVjaWFsIEludFNpemUgKDAsIDApIGlzIGEgc3BlY2lhbCB3
YXkgb2YgdGVsbGluZyAKICAgICAvLyB0aGF0IG1ldGhvZCAiSSBkb24ndCBjYXJlIGFib3V0IHRo
ZSBhY3R1YWwgSW1hZ2UsIGkganVzdCB3YW50IHlvdSB0byBtYWtlIHN1cmUgeW91J3JlIGdldHRp
bmcgaXQgZnJvbSBkaXNrLgotICAgIGljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIEludFNpemUoMCww
KSk7CisgICAgc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBJbnRTaXplKDAsMCkp
OwogfQogCi1TdHJpbmcgSWNvbkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmIHBhZ2VVUkxPcmlnaW5hbCkKK1N0cmluZyBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNv
blVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWwpCiB7ICAgIAogICAg
IEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsgCiAgICAgICAgIApAQCAtNjI2LDcgKzYyNiw3IEBA
IHZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTCgKICAgICB9CiB9CiAKLUlj
b25Mb2FkRGVjaXNpb24gSWNvbkRhdGFiYXNlOjpsb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0
IFN0cmluZyYgaWNvblVSTCwgRG9jdW1lbnRMb2FkZXIqIG5vdGlmaWNhdGlvbkRvY3VtZW50TG9h
ZGVyKQorSWNvbkxvYWREZWNpc2lvbiBJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzTG9hZERlY2lz
aW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIERvY3VtZW50TG9hZGVyKiBub3Rp
ZmljYXRpb25Eb2N1bWVudExvYWRlcikKIHsKICAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFEKCk7
CiAKQEAgLTY1Nyw3ICs2NTcsNyBAQCBJY29uTG9hZERlY2lzaW9uIEljb25EYXRhYmFzZTo6bG9h
ZERlY2lzCiAgICAgcmV0dXJuIEljb25Mb2FkVW5rbm93bjsKIH0KIAotYm9vbCBJY29uRGF0YWJh
c2U6Omljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCkKK2Jvb2wg
SWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0
cmluZyYgaWNvblVSTCkKIHsKICAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFEKCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAkocmV2aXNpb24g
ODE0MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsMTQgKzg0LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdmlydHVhbCBJbWFn
ZSogaWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgSW50U2l6ZSYpOwotICAgIHZp
cnR1YWwgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEsIGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uVVJMRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0SWNvbkRhdGFGb3JJY29uVVJMKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaWNvbkRhdGFLbm93bkZv
ckljb25VUkwoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBJY29uTG9hZERlY2lzaW9uIGxv
YWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKTsgICAg
CisgICAgdmlydHVhbCBJbWFnZSogc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmLCBjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCBTdHJpbmcgc3luY2hyb25vdXNJY29u
VVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3luY2hyb25v
dXNJY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIElj
b25Mb2FkRGVjaXNpb24gc3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0
cmluZyYsIERvY3VtZW50TG9hZGVyKik7ICAgIAogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRF
bmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCShy
ZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU3RyaW5nIEljb25EYXRhYmFzZUJhc2U6Omljb25VUkxGb3JQYWdlVVJMKGNv
bnN0IFN0cmluZyYpCitTdHJpbmcgSWNvbkRhdGFiYXNlQmFzZTo6c3luY2hyb25vdXNJY29uVVJM
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmgJKHJl
dmlzaW9uIDgxNDA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4NyBAQCBlbnVtIEljb25Mb2FkRGVj
aXNpb24gewogICAgIEljb25Mb2FkVW5rbm93bgogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgRW51
bVR5cGU+IAorY2xhc3MgRW51bUNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8RW51bUNhbGxi
YWNrPEVudW1UeXBlPiA+eworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVu
Y3Rpb24pKEVudW1UeXBlLCB2b2lkKik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbnVtQ2Fs
bGJhY2s+IGNyZWF0ZSh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbnVtQ2FsbGJhY2soY29udGV4dCwg
Y2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FbnVtQ2FsbGJhY2soKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrKTsKKyAgICB9CisKKyAgICB2b2lkIHBlcmZvcm1D
YWxsYmFjayhFbnVtVHlwZSByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQobV9jYWxsYmFj
ayk7CisgICAgICAgIG1fY2FsbGJhY2socmVzdWx0LCBtX2NvbnRleHQpOworICAgICAgICBtX2Nh
bGxiYWNrID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKyAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAg
fQorCitwcml2YXRlOgorICAgIEVudW1DYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1
bmN0aW9uIGNhbGxiYWNrKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAs
IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQqIG1fY29udGV4
dDsKKyAgICBDYWxsYmFja0Z1bmN0aW9uIG1fY2FsbGJhY2s7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmplY3RUeXBlPiAKK2NsYXNzIE9iamVjdENhbGxiYWNrIDogcHVibGljIFJlZkNvdW50
ZWQ8T2JqZWN0Q2FsbGJhY2s8T2JqZWN0VHlwZT4gPnsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZv
aWQgKCpDYWxsYmFja0Z1bmN0aW9uKShPYmplY3RUeXBlLCB2b2lkKik7CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxPYmplY3RDYWxsYmFjaz4gY3JlYXRlKHZvaWQqIGNvbnRleHQsIENhbGxiYWNr
RnVuY3Rpb24gY2FsbGJhY2spCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9i
amVjdENhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+
T2JqZWN0Q2FsbGJhY2soKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrKTsKKyAg
ICB9CisKKyAgICB2b2lkIHBlcmZvcm1DYWxsYmFjayhPYmplY3RUeXBlIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKyAgICAgICAgbV9jYWxsYmFjayhyZXN1bHQs
IG1fY29udGV4dCk7CisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGludmFsaWRhdGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOworICAg
ICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT2JqZWN0Q2FsbGJh
Y2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkKiBtX2NvbnRleHQ7CisgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2Nh
bGxiYWNrOworfTsKKwordHlwZWRlZiBFbnVtQ2FsbGJhY2s8SWNvbkxvYWREZWNpc2lvbj4gSWNv
bkxvYWREZWNpc2lvbkNhbGxiYWNrOwordHlwZWRlZiBPYmplY3RDYWxsYmFjazxTaGFyZWRCdWZm
ZXIqPiBJY29uRGF0YUNhbGxiYWNrOworCiBjbGFzcyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJY29uRGF0YWJhc2VCYXNlKTsKIApAQCAtNTYsMTkgKzEzNywy
NiBAQCBwdWJsaWM6CiAKICAgICAvLyBVc2VkIGludGVybmFsbHkgYnkgV2ViQ29yZQogICAgIHZp
cnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAg
IHZpcnR1YWwgSW1hZ2UqIGljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFNp
emUmKSB7IHJldHVybiAwOyB9Ci0gICAgCisgICAgICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXRh
aW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVs
ZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfQogCi0gICAgdmlydHVhbCBTdHJp
bmcgaWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIGlj
b25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBJY29uTG9hZERlY2lzaW9uIGxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3Qg
U3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKSB7IHJldHVybiBJY29uTG9hZE5vOyB9Ci0gICAgCiAg
ICAgdmlydHVhbCB2b2lkIHNldEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmKSB7IH0KIAorICAgIC8vIFN5bmNo
cm9ub3VzIGNhbGxzIHVzZWQgaW50ZXJuYWxseSBieSBXZWJDb3JlLgorICAgIC8vIFVzYWdlIHNo
b3VsZCBiZSByZXBsYWNlZCBieSBhc3luY2hyb25vdXMgY2FsbHMuCisgICAgdmlydHVhbCBTdHJp
bmcgc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc3luY2hyb25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcm
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgSWNvbkxvYWREZWNpc2lvbiBzeW5jaHJv
bm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIq
KSB7IHJldHVybiBJY29uTG9hZE5vOyB9CisgICAgdmlydHVhbCBJbWFnZSogc3luY2hyb25vdXNJ
Y29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsg
fQorICAgIAorICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyB3ZSBzaG91bGQgdXNlIHRvIHJlcGxh
Y2UgdGhlIGFib3ZlIHdoZW4gc3VwcG9ydGVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Fz
eW5jaHJvbm91c01vZGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
RGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SWNvbkxvYWREZWNp
c2lvbkNhbGxiYWNrPil7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaWNvbkRhdGFGb3JJY29uVVJMKGNv
bnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8SWNvbkRhdGFDYWxsYmFjaz4peyB9CisgICAgCisKICAg
ICAvLyBVc2VkIHdpdGhpbiBvbmUgb3IgbW9yZSBXZWJLaXQgcG9ydHMuCiAgICAgLy8gV2Ugc2hv
dWxkIHRyeSB0byByZW1vdmUgdGhlc2UgZGVwZW5kZW5jaWVzIGZyb20gdGhlIEljb25EYXRhYmFz
ZUJhc2UgY2xhc3MuCiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCkgeyB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA4MTQxMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDExLTAzLTE3ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0
MjUKKyAgICAgICAgTW9yZSBncm91bmR3b3JrIGZvciBXZWJLaXQyIEljb25EYXRhYmFzZQorCisg
ICAgICAgIC1VcGRhdGUgdGhlIHN5bmNocm9ub3VzIG1ldGhvZCBuYW1lcyB0byBiZSBwcmVmaXhl
ZCB3aXRoICJzeW5jaHJvbm91cy4iCisgICAgICAgIC1BZGQgZW1wdHkgaW1wbGVtZW50YXRpb25z
IGZvciB0aGUgYXN5bmNocm9ub3VzIGFjY2Vzc29ycy4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
SWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSWNvbkRhdGFiYXNlUHJveHk6OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
Y29uRGF0YWJhc2VQcm94eTo6c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkljb25EYXRhYmFzZVByb3h5OjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OnN5bmNocm9ub3VzSWNv
bkRhdGFLbm93bkZvckljb25VUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VQ
cm94eTo6c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OnN1cHBvcnRzQXN5bmNocm9ub3VzTW9kZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZVByb3h5Ojpsb2FkRGVjaXNpb25Gb3JJY29uVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlUHJveHk6Omljb25EYXRhRm9ySWNv
blVSTCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNl
UHJveHkuaDoKKwogMjAxMS0wMy0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJh
c2VQcm94eS5jcHAJKHJldmlzaW9uIDgxNDA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSwxNSArNjEsNiBAQCB2b2lkIFdlYkljb25EYXRhYmFzZVByb3h5OjpzZXRFbmFibGVkKGJv
CiAgICAgc2V0R2xvYmFsSWNvbkRhdGFiYXNlKGVuYWJsZWQgPyB0aGlzIDogMCk7CiB9CiAKLUlt
YWdlKiBXZWJJY29uRGF0YWJhc2VQcm94eTo6aWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBw
YWdlVVJMLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UgcmVzdWx0OwotICAgIGlmICghbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6Okljb25EYXRhRm9yUGFnZVVSTChwYWdlVVJMKSwgTWVz
c2FnZXM6OldlYkljb25EYXRhYmFzZTo6SWNvbkRhdGFGb3JQYWdlVVJMOjpSZXBseShyZXN1bHQp
LCAwKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gRklYTUU6IFJldHVybiBJbWFn
ZSBjcmVhdGVkIHdpdGggdGhlIGFib3ZlIGRhdGEuCi0gICAgcmV0dXJuIDA7Ci19CiAKIHZvaWQg
V2ViSWNvbkRhdGFiYXNlUHJveHk6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYg
cGFnZVVSTCkKIHsKQEAgLTgxLDI3ICs3Miw1MSBAQCB2b2lkIFdlYkljb25EYXRhYmFzZVByb3h5
OjpyZWxlYXNlSWNvbkZvCiAgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkljb25EYXRhYmFzZTo6UmVsZWFzZUljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpLCAwKTsK
IH0KIAotU3RyaW5nIFdlYkljb25EYXRhYmFzZVByb3h5OjppY29uVVJMRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpCitJbWFnZSogV2ViSWNvbkRhdGFiYXNlUHJveHk6OnN5bmNocm9u
b3VzSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0OworICAgIGlmICghbV9w
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6
Okljb25EYXRhRm9yUGFnZVVSTChwYWdlVVJMKSwgTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6
SWNvbkRhdGFGb3JQYWdlVVJMOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgLy8gRklYTUU6IFJldHVybiBJbWFnZSBjcmVhdGVkIHdpdGggdGhlIGFib3Zl
IGRhdGEuCisgICAgcmV0dXJuIDA7Cit9CisKKworU3RyaW5nIFdlYkljb25EYXRhYmFzZVByb3h5
OjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBhc2sgdGhlIFVJIHByb2Nlc3MgZm9yIHRoZSBp
Y29uVVJMLCBidXQgaXQgY2FuJ3QgZG8gc28gc3luY2hyb25vdXNseSBiZWNhdXNlIGl0IHdpbGwg
c2xvdyBkb3duIHBhZ2UgbG9hZGluZy4KICAgICAvLyBUaGUgcGFydHMgaW4gV2ViQ29yZSB0aGF0
IG5lZWQgdGhpcyBkYXRhIHdpbGwgaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIHdvcmsgYXN5Y25jaHJv
bm91c2x5LgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotYm9vbCBXZWJJY29uRGF0YWJhc2VQ
cm94eTo6aWNvbkRhdGFLbm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMKQorYm9v
bCBXZWJJY29uRGF0YWJhc2VQcm94eTo6c3luY2hyb25vdXNJY29uRGF0YUtub3duRm9ySWNvblVS
TChjb25zdCBTdHJpbmcmIGljb25VUkwpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YXNrIHRoZSBVSSBwcm9jZXNzIGZvciB0aGUgaWNvblVSTCwgYnV0IGl0IGNhbid0IGRvIHNvIHN5
bmNocm9ub3VzbHkgYmVjYXVzZSBpdCB3aWxsIHNsb3cgZG93biBwYWdlIGxvYWRpbmcuCiAgICAg
Ly8gVGhlIHBhcnRzIGluIFdlYkNvcmUgdGhhdCBuZWVkIHRoaXMgZGF0YSB3aWxsIGhhdmUgdG8g
YmUgY2hhbmdlZCB0byB3b3JrIGFzeWNuY2hyb25vdXNseS4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUljb25Mb2FkRGVjaXNpb24gV2ViSWNvbkRhdGFiYXNlUHJveHk6OmxvYWREZWNpc2lvbkZv
ckljb25VUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIpCitJY29uTG9hZERlY2lzaW9uIFdlYkljb25EYXRhYmFzZVByb3h5OjpzeW5jaHJvbm91
c0xvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYXNr
IHRoZSBVSSBwcm9jZXNzIGZvciB0aGUgaWNvblVSTCwgYnV0IGl0IGNhbid0IGRvIHNvIHN5bmNo
cm9ub3VzbHkgYmVjYXVzZSBpdCB3aWxsIHNsb3cgZG93biBwYWdlIGxvYWRpbmcuCiAgICAgLy8g
VGhlIHBhcnRzIGluIFdlYkNvcmUgdGhhdCBuZWVkIHRoaXMgZGF0YSB3aWxsIGhhdmUgdG8gYmUg
Y2hhbmdlZCB0byB3b3JrIGFzeWNuY2hyb25vdXNseS4KICAgICByZXR1cm4gSWNvbkxvYWRObzsK
IH0KIAorYm9vbCBXZWJJY29uRGF0YWJhc2VQcm94eTo6c3VwcG9ydHNBc3luY2hyb25vdXNNb2Rl
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6
bG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiBjYWxsYmFjaykKK3sKK30KKwordm9p
ZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6aWNvbkRhdGFGb3JJY29uVVJMKGNvbnN0IFN0cmluZyYg
aWNvblVSTCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJY29uRGF0YUNhbGxiYWNrPiBjYWxsYmFjaykK
K3sKK30KKwogdm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6c2V0SWNvblVSTEZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCiB7CiAgICAgbV9w
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6U2V0
SWNvblVSTEZvclBhZ2VVUkwoaWNvblVSTCwgcGFnZVVSTCksIDApOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29u
RGF0YWJhc2VQcm94eS5oCShyZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDE3ICs1MiwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKICAgICAKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkltYWdlKiBpY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJM
KGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSWNvbkZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBpY29uVVJMRm9yUGFnZVVSTChj
b25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaWNvbkRhdGFLbm93bkZvckljb25VUkwo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJY29uTG9hZERlY2lzaW9uIGxv
YWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqKTsKLSAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldEljb25EYXRhRm9y
SWNvblVSTChQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYp
OworCisgICAgdmlydHVhbCBTdHJpbmcgc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3luY2hyb25vdXNJY29uRGF0YUtub3duRm9y
SWNvblVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okljb25Mb2FkRGVj
aXNpb24gc3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbWFnZSogc3lu
Y2hyb25vdXNJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CisgICAgCisgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIHdlIHNob3VsZCB1c2UgdG8g
cmVwbGFjZSB0aGUgYWJvdmUgd2hlbiBzdXBwb3J0ZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQXN5bmNocm9ub3VzTW9kZSgpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGVjaXNpb25Gb3JJ
Y29uVVJMKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SWNvbkxvYWREZWNpc2lv
bkNhbGxiYWNrPik7CisgICAgdmlydHVhbCB2b2lkIGljb25EYXRhRm9ySWNvblVSTChjb25zdCBT
dHJpbmcmLCBQYXNzUmVmUHRyPFdlYkNvcmU6Okljb25EYXRhQ2FsbGJhY2s+KTsKICAgICAgICAg
CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQ
Qzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNDExKQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDMtMTcgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NjQyNQorICAgICAgICBNb3JlIGdyb3VuZHdvcmsgZm9yIFdlYktpdDIgSWNvbkRhdGFiYXNl
CisKKyAgICAgICAgVXBkYXRlIGFscmVhZHktdXNlZCBmdW5jdGlvbiBuYW1lczoKKyAgICAgICAg
KiBld2svZXdrX2hpc3RvcnkuY3BwOgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9pY29uX3N1
cmZhY2VfZ2V0KToKKyAgICAgICAgKGV3a19oaXN0b3J5X2l0ZW1faWNvbl9vYmplY3RfYWRkKToK
KyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKGV3a19zZXR0aW5nc19p
Y29uX2RhdGFiYXNlX2ljb25fc3VyZmFjZV9nZXQpOgorICAgICAgICAoZXdrX3NldHRpbmdzX2lj
b25fZGF0YWJhc2VfaWNvbl9vYmplY3RfYWRkKToKKwogMjAxMS0wMy0xNiAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3Rvcnku
Y3BwCShyZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3ICs1ODEsNyBAQCBjYWlyb19zdXJmYWNlX3Qq
IGV3a19oaXN0b3J5X2l0ZW1faWNvbl9zCiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dF
VF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgCi0gICAgV2ViQ29yZTo6SW1hZ2UqIGlj
b24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVSTChjb3JlLT51cmwoKSwg
V2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdl
YkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29yZS0+dXJs
KCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CiAgICAgaWYgKCFpY29uKSB7CiAgICAgICAg
IEVSUigiaWNvbiBpcyBOVUxMLiIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTYwOSw3ICs2MDks
NyBAQCBFdmFzX09iamVjdCogZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjCiB7CiAgICAgRVdL
X0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7Ci0gICAgV2ViQ29yZTo6SW1h
Z2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVSTChjb3JlLT51
cmwoKSwgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICBXZWJDb3JlOjpJbWFnZSogaWNv
biA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29y
ZS0+dXJsKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CiAgICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlOwogCiAgICAgaWYgKCFpY29uKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3NldHRpbmdzLmNwcAkocmV2aXNpb24gODE0MDgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIGNh
aXJvX3N1cmZhY2VfdCogZXdrX3NldHRpbmdzX2ljb25fZGF0YWIKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwodXJsLCAwKTsKIAogICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJD
b3JlOjpLVVJMKCksIFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmwpKTsKLSAgICBXZWJDb3JlOjpJ
bWFnZSAqaWNvbiA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmljb25Gb3JQYWdlVVJMKGt1cmwu
c3RyaW5nKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CisgICAgV2ViQ29yZTo6SW1hZ2Ug
Kmljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJM
KGt1cmwuc3RyaW5nKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CiAKICAgICBpZiAoIWlj
b24pIHsKICAgICAgICAgRVJSKCJubyBpY29uIGZvciB1cmwgJXMiLCB1cmwpOwpAQCAtMjYzLDcg
KzI2Myw3IEBAIEV2YXNfT2JqZWN0KiBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV8KICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKIAogICAgIFdlYkNvcmU6
OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmwpKTsK
LSAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmljb25G
b3JQYWdlVVJMKGt1cmwuc3RyaW5nKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CisgICAg
V2ViQ29yZTo6SW1hZ2UqIGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zeW5jaHJvbm91
c0ljb25Gb3JQYWdlVVJMKGt1cmwuc3RyaW5nKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7
CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlOwogCiAgICAgaWYgKCFpY29uKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTQxMSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE3ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTY0MjUKKyAgICAgICAgTW9yZSBncm91bmR3b3JrIGZvciBXZWJLaXQyIEljb25EYXRh
YmFzZQorCisgICAgICAgIFVwZGF0ZSBhbHJlYWR5LXVzZWQgZnVuY3Rpb24gbmFtZXM6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRfaWNv
bl9kYXRhYmFzZV9nZXRfaWNvbl91cmkpOgorICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fcGl4YnVmKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKToKKwogMjAxMS0wMy0xNiAgSm9z
ZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAJKHJldmlzaW9uIDgxNDA4KQorKysgU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2MSw3ICsyNjEsNyBAQCBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2lj
b25fdXJpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7CiAKICAgICBTdHJp
bmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7Ci0gICAgcmV0dXJuIGdfc3Ry
ZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLmljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2Uo
KS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpLnV0ZjgoKS5kYXRhKCkpOwog
fQogCiAvKioKQEAgLTI5MSw3ICsyOTEsNyBAQCBHZGtQaXhidWYqIHdlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9pY29uCiAgICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VV
UkkpOwogICAgIC8vIFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJyZWxldmFudCB0byB0aGUg
V2ViQ29yZTo6aWNvbkRhdGFiYXNlIGNvZGUuCiAgICAgLy8gV2UgbXVzdCBwYXNzIHNvbWV0aGlu
ZyBncmVhdGVyIHRoYW4gMCwgMCB0byBnZXQgYSBwaXhidWYuCi0gICAgV2ViQ29yZTo6SW1hZ2Uq
IGljb24gPSBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVSTChwYWdlVVJMLCBX
ZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOworICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2Vi
Q29yZTo6aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBX
ZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwogICAgIGlmICghaWNvbikKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgR2RrUGl4YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDgx
NDA4KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDY2LDcgKzUwNjYsNyBAQCBXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0CiBHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl92aWV3X2dl
dF9pY29uX3VyaShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7Ci0gICAgU3RyaW5nIGljb25V
UkwgPSBpY29uRGF0YWJhc2UoKS5pY29uVVJMRm9yUGFnZVVSTChjb3JlKHdlYlZpZXcpLT5tYWlu
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJldHR5VVJMKCkpOworICAgIFN0cmluZyBpY29u
VVJMID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb3JlKHdl
YlZpZXcpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJldHR5VVJMKCkpOwogICAg
IHdlYlZpZXctPnByaXYtPmljb25VUkkgPSBpY29uVVJMLnV0ZjgoKTsKICAgICByZXR1cm4gd2Vi
Vmlldy0+cHJpdi0+aWNvblVSSS5kYXRhKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MTQxMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MjUKKyAgICAgICAg
TW9yZSBncm91bmR3b3JrIGZvciBXZWJLaXQyIEljb25EYXRhYmFzZQorCisgICAgICAgIFVwZGF0
ZSBhbHJlYWR5LXVzZWQgZnVuY3Rpb24gbmFtZXM6CisgICAgICAgICogTWlzYy9XZWJJY29uRGF0
YWJhc2UubW06CisgICAgICAgICgtW1dlYkljb25EYXRhYmFzZSBpY29uRm9yVVJMOndpdGhTaXpl
OmNhY2hlOl0pOgorICAgICAgICAoLVtXZWJJY29uRGF0YWJhc2UgaWNvblVSTEZvclVSTDpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc3Bh
dGNoRGlkUmVjZWl2ZUljb25Gcm9tV2ViRnJhbWU6XSk6CisKIDIwMTEtMDMtMTcgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIg
SHVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViSWNvbkRhdGFiYXNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViSWNvbkRhdGFiYXNlLm1tCShy
ZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViSWNvbkRhdGFiYXNl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDggQEAgLSAoTlNJbWFnZSAqKWljb25G
b3JVUkw6KE5TU3RyaW5nICopVVJMIAogICAgIC8vIEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzQ2
OTc5MzQ+IC0gTW92ZSB0aGUgaGFuZGxpbmcgb2YgRmlsZVVSTHMgdG8gV2ViQ29yZSBhbmQgaW1w
bGVtZW50IGluIE9iakMrKwogICAgIGlmIChbVVJMIF93ZWJraXRfaXNGaWxlVVJMXSkKICAgICAg
ICAgcmV0dXJuIFtzZWxmIF9pY29uRm9yRmlsZVVSTDpVUkwgd2l0aFNpemU6c2l6ZV07Ci0gICAg
ICAKLSAgICBpZiAoSW1hZ2UqIGltYWdlID0gaWNvbkRhdGFiYXNlKCkuaWNvbkZvclBhZ2VVUkwo
VVJMLCBJbnRTaXplKHNpemUpKSkKKyAgICAKKyAgICBpZiAoSW1hZ2UqIGltYWdlID0gaWNvbkRh
dGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChVUkwsIEludFNpemUoc2l6ZSkpKQog
ICAgICAgICBpZiAoTlNJbWFnZSAqaWNvbiA9IHdlYkdldE5TSW1hZ2UoaW1hZ2UsIHNpemUpKQog
ICAgICAgICAgICAgcmV0dXJuIGljb247CiAgICAgcmV0dXJuIFtzZWxmIGRlZmF1bHRJY29uRm9y
VVJMOlVSTCB3aXRoU2l6ZTpzaXplXTsKQEAgLTE1NSw3ICsxNTUsNyBAQCAtIChOU1N0cmluZyAq
KWljb25VUkxGb3JVUkw6KE5TU3RyaW5nICopCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgQVNT
RVJUX01BSU5fVEhSRUFEKCk7CiAKLSAgICByZXR1cm4gaWNvbkRhdGFiYXNlKCkuaWNvblVSTEZv
clBhZ2VVUkwoVVJMKTsKKyAgICByZXR1cm4gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29u
VVJMRm9yUGFnZVVSTChVUkwpOwogfQogCiAtIChOU0ltYWdlICopZGVmYXVsdEljb25XaXRoU2l6
ZTooTlNTaXplKXNpemUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJl
dmlzaW9uIDgxNDA4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01ODY0LDcgKzU4NjQsNyBAQCAtICh2b2lkKV9kaXNwYXRjaERpZFJl
Y2VpdmVJY29uRnJvbVdlYkZyCiAKICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGUqIGNhY2hlID0gJl9wcml2YXRlLT5mcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0
aW9uczsKICAgICBpZiAoY2FjaGUtPmRpZFJlY2VpdmVJY29uRm9yRnJhbWVGdW5jKSB7Ci0gICAg
ICAgIEltYWdlKiBpbWFnZSA9IGljb25EYXRhYmFzZSgpLmljb25Gb3JQYWdlVVJMKGNvcmUod2Vi
RnJhbWUpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgSW50U2l6ZSgxNiwgMTYpKTsKKyAg
ICAgICAgSW1hZ2UqIGltYWdlID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFn
ZVVSTChjb3JlKHdlYkZyYW1lKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIEludFNpemUo
MTYsIDE2KSk7CiAgICAgICAgIGlmIChOU0ltYWdlICppY29uID0gd2ViR2V0TlNJbWFnZShpbWFn
ZSwgTlNNYWtlU2l6ZSgxNiwgMTYpKSkKICAgICAgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0
ZShjYWNoZS0+ZGlkUmVjZWl2ZUljb25Gb3JGcmFtZUZ1bmMsIHNlbGYsIEBzZWxlY3Rvcih3ZWJW
aWV3OmRpZFJlY2VpdmVJY29uOmZvckZyYW1lOiksIGljb24sIHdlYkZyYW1lKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gODE0MTEpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTE3ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTY0MjUKKyAgICAgICAgTW9yZSBncm91bmR3b3JrIGZvciBXZWJLaXQyIEljb25EYXRh
YmFzZQorCisgICAgICAgIFVwZGF0ZSBhbHJlYWR5LXVzZWQgZnVuY3Rpb24gbmFtZXM6CisgICAg
ICAgICogQXBpL3F3ZWJoaXN0b3J5LmNwcDoKKyAgICAgICAgKFFXZWJIaXN0b3J5SXRlbTo6aWNv
bik6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGlu
Z3M6Omljb25Gb3JVcmwpOgorCiAyMDExLTAzLTE3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1l
bmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWluIFBvdWxh
aW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwCShyZXZpc2lvbiA4MTQw
OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDcgKzE1OCw3IEBAIFFEYXRlVGltZSBRV2ViSGlzdG9yeUl0ZW06Omxhc3RWaXNp
dGVkKCkKIFFJY29uIFFXZWJIaXN0b3J5SXRlbTo6aWNvbigpIGNvbnN0CiB7CiAgICAgaWYgKGQt
Pml0ZW0pCi0gICAgICAgIHJldHVybiAqV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuaWNvbkZvclBh
Z2VVUkwoZC0+aXRlbS0+dXJsKCksIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIHJldHVybiAqV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCkuc3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChkLT5pdGVtLT51cmwoKSwgV2ViQ29yZTo6
SW50U2l6ZSgxNiwgMTYpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIAogICAgIHJl
dHVybiBRSWNvbigpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3Bw
CShyZXZpc2lvbiA4MTQwOCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCB2b2lkIFFXZWJTZXR0aW5nczo6
Y2xlYXJJY29uRGF0YWJhc2UoKQogKi8KIFFJY29uIFFXZWJTZXR0aW5nczo6aWNvbkZvclVybChj
b25zdCBRVXJsJiB1cmwpCiB7Ci0gICAgV2ViQ29yZTo6SW1hZ2UqIGltYWdlID0gV2ViQ29yZTo6
aWNvbkRhdGFiYXNlKCkuaWNvbkZvclBhZ2VVUkwoV2ViQ29yZTo6S1VSTCh1cmwpLnN0cmluZygp
LAorICAgIFdlYkNvcmU6OkltYWdlKiBpbWFnZSA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnN5
bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoV2ViQ29yZTo6S1VSTCh1cmwpLnN0cmluZygpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikpOwog
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA4MTQxMSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTE3ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0
MjUKKyAgICAgICAgTW9yZSBncm91bmR3b3JrIGZvciBXZWJLaXQyIEljb25EYXRhYmFzZQorCisg
ICAgICAgIFVwZGF0ZSBhbHJlYWR5LXVzZWQgZnVuY3Rpb24gbmFtZXM6CisgICAgICAgICogV2Vi
SWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkljb25EYXRhYmFzZTo6aWNvbkZvclVSTCk6
CisgICAgICAgIChXZWJJY29uRGF0YWJhc2U6Omljb25VUkxGb3JVUkwpOgorICAgICAgICAoV2Vi
SWNvbkRhdGFiYXNlOjpoYXNJY29uRm9yVVJMKToKKwogMjAxMS0wMy0xMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW9yZSBXaW5kb3dzIGJ1aWxkIGZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjE2CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJJY29uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkljb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDgxNDA4KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0
LDcgKzE3NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSWNvbkRhdGFiYXMKIAog
ICAgIEltYWdlKiBpY29uID0gMDsKICAgICBpZiAodXJsKQotICAgICAgICBpY29uID0gaWNvbkRh
dGFiYXNlKCkuaWNvbkZvclBhZ2VVUkwoU3RyaW5nKHVybCwgU3lzU3RyaW5nTGVuKHVybCkpLCBp
bnRTaXplKTsKKyAgICAgICAgaWNvbiA9IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvbkZv
clBhZ2VVUkwoU3RyaW5nKHVybCwgU3lzU3RyaW5nTGVuKHVybCkpLCBpbnRTaXplKTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB3ZSBjaGVjayBmb3IgdGhlIGNhc2Ugb2YgYW4gImVtcHR5IGltYWdlIgog
ICAgIGlmIChpY29uICYmIGljb24tPndpZHRoKCkpIHsKQEAgLTIzNiw3ICsyMzYsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkljb25EYXRhYmFzCiB7CiAgICAgaWYgKCF1cmwgfHwg
IWljb25VUkwpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgQlN0cmluZyBpY29uVVJM
QlNUUihpY29uRGF0YWJhc2UoKS5pY29uVVJMRm9yUGFnZVVSTChTdHJpbmcodXJsLCBTeXNTdHJp
bmdMZW4odXJsKSkpKTsKKyAgICBCU3RyaW5nIGljb25VUkxCU1RSKGljb25EYXRhYmFzZSgpLnN5
bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nKHVybCwgU3lzU3RyaW5nTGVuKHVybCkp
KSk7CiAgICAgKmljb25VUkwgPSBpY29uVVJMQlNUUi5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CkBAIC0yNzQsMTEgKzI3NCwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
Ykljb25EYXRhYmFzCiAKICAgICAvLyBQYXNzaW5nIGEgc2l6ZSBwYXJhbWV0ZXIgb2YgMCwgMCBt
ZWFucyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQgb2YgdGhlIGltYWdlLCB3ZSBqdXN0
CiAgICAgLy8gd2FudCB0byBtYWtlIHN1cmUgdGhlIHJlYWQgZnJvbSBkaXNrIHRvIGxvYWQgdGhl
IGljb24gaXMga2lja2VkIG9mZi4KLSAgICBpY29uRGF0YWJhc2UoKS5pY29uRm9yUGFnZVVSTCh1
cmxTdHJpbmcsIEludFNpemUoMCwgMCkpOworICAgIGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3Vz
SWNvbkZvclBhZ2VVUkwodXJsU3RyaW5nLCBJbnRTaXplKDAsIDApKTsKIAogICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB3ZSBoYXZlIGEgbm9uLWVtcHR5IGljb24gVVJMIGZvciB0aGUgcGFnZSwgYW5k
IGlmIHdlIGRvLCB3ZSBoYXZlIGFuIGljb24gZm9yCiAgICAgLy8gdGhlIHBhZ2UuCi0gICAgKnJl
c3VsdCA9ICEoaWNvbkRhdGFiYXNlKCkuaWNvblVSTEZvclBhZ2VVUkwodXJsU3RyaW5nKS5pc0Vt
cHR5KCkpOworICAgICpyZXN1bHQgPSAhKGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVS
TEZvclBhZ2VVUkwodXJsU3RyaW5nKS5pc0VtcHR5KCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9
Cg==
</data>
<flag name="review"
          id="78360"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86475</attachid>
            <date>2011-03-22 10:36:44 -0700</date>
            <delta_ts>2011-03-25 16:09:21 -0700</delta_ts>
            <desc>Patch #3, v1 - Hookup an actual threaded icon database that manages I/O.  A direct port from WebCore/loader/icon/IconDatabase.cpp</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>125481</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDMtMjIgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NjQ4MzExPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDI1CisgICAgICAgIFdlYktpdDIgSWNv
biBEYXRhYmFzZQorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydCBzb21lIG1vcmUg
c3ltYm9scy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEV4
cG9ydCBzb21lIG1vcmUgaGVhZGVycy4KKworICAgICAgICBTd2l0Y2ggc3RyaW5nIGluY2x1ZGVz
IHRvIGJlIFdURiBzdHJpbmdzIGluc3RlYWQgb2YgUGxhdGZvcm1TdHJpbmc6CisgICAgICAgICog
bG9hZGVyL2ljb24vSWNvblJlY29yZC5oOgorICAgICAgICAqIGxvYWRlci9pY29uL1BhZ2VVUkxS
ZWNvcmQuaDoKKworICAgICAgICBFbmhhbmNlIEljb25EYXRhYmFzZSBjYWxsYmFja3MgdG8gaGF2
ZSBjYWxsYmFjayBJRHM6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tCYXNlOjp+Q2FsbGJhY2tCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbGxiYWNrQmFzZTo6Y2FsbGJhY2tJRCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsYmFj
a0Jhc2U6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tCYXNlOjpnZW5lcmF0
ZUNhbGxiYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6RW51bUNhbGxiYWNrOjpwZXJmb3JtQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6RW51bUNhbGxiYWNrOjpFbnVtQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6T2JqZWN0Q2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RDYWxsYmFjazo6T2JqZWN0Q2FsbGJhY2spOgorCisgICAgICAg
ICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjpjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKTogQ2xlYXIgdGhlIGNhbGxiYWNr
IG9iamVjdCB3aGVuIHRoZSBjYWxsYmFjayBpcyBtYWRlLgorCisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUlj
b25Mb2FkV2l0aERlY2lzaW9uKTogQ29tcGxldGVseSBza2lwIEljb25Mb2FkaW5nIHdpdGggYSBu
ZXctc3R5bGUgaWNvbiBkYXRhYmFzZQorICAgICAgICAgIGlmIHByaXZhdGUgYnJvd3NpbmcgaXMg
ZW5hYmxlZC4KKwogMjAxMS0wMy0yMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjgxNjUzLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDgxNjc0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksOSBAQCBfX1pOM1dU
RjZTdHJpbmdDMUVQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFsQzFFUktO
M1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFsUGVyc2lzdGVuY2VFCiBfX1pON1dlYkNvcmUx
MENyZWRlbnRpYWxDMUV2CiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2lu
dEUKK19fWk43V2ViQ29yZTEwSWNvblJlY29yZDEyc2V0SW1hZ2VEYXRhRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzEyU2hhcmVkQnVmZmVyRUVFCitfX1pON1dlYkNvcmUxMEljb25SZWNvcmRDMUVSS04z
V1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTEwSWNvblJlY29yZEQxRXYKIF9fWk43V2ViQ29yZTEw
SlNEb2N1bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnRDMUVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYmJOUzFfMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVpaWlpaWJiYmJ0
TlM1X0lOU18xMUV2ZW50VGFyZ2V0RUVFTlM1X0lOU185Q2xpcGJvYXJkRUVFYgogX19aTjdXZWJD
b3JlMTBTY3JvbGxWaWV3MTdzZXRVc2VGaXhlZExheW91dEViCkBAIC0xNDYsNiArMTQ5LDcgQEAg
X19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3MThzZXRGaXhlZExheW91dAogX19aTjdXZWJDb3JlMTBT
Y3JvbGxWaWV3MjBzZXRDYW5IYXZlU2Nyb2xsYmFyc0ViCiBfX1pON1dlYkNvcmUxMFNjcm9sbFZp
ZXcyNHdpbmRvd1Jlc2l6ZXJSZWN0Q2hhbmdlZEV2CiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZpbGVF
UktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxMGZpbGVFeGlzdHNFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmUxMGhhbmRDdXJzb3JFdgogX19aTjdXZWJDb3JlMTBzZXRDb29raWVzRVBO
U184RG9jdW1lbnRFUktOU180S1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExQml0
bWFwSW1hZ2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQpAQCAtMjE0LDYgKzIxOCw3
IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2UKIF9fWk43V2ViQ29y
ZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZS
ZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8x
MEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVz
b3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTExUmVu
ZGVyTGF5ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU183SW50UmVjdEViUktOU18xNVNjcm9s
bEFsaWdubWVudEVTNl8KK19fWk43V2ViQ29yZTExU1FMUmVzdWx0T2tFCiBfX1pON1dlYkNvcmUx
MWdsb2JhbFBvaW50RVJLOF9OU1BvaW50UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTFtZW1vcnlD
YWNoZUV2CiBfX1pON1dlYkNvcmUxMXRvVXNlclNwYWNlRVJLN19OU1JlY3RQOE5TV2luZG93CkBA
IC0yODgsOSArMjkzLDExIEBAIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTJjcmVhdGVOU0Rh
dGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMjRjcmVhdGVXaXRoQ29udGVudHNPZkZpbGVF
UktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjZhcHBlbmRFUEtjagog
X19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXJDMUVQS2NpCitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1
ZmZlckMxRVBLaGkKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyQzFFdgogX19aTjdXZWJDb3Jl
MTJTaGFyZWRCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUxMlNwZWxsQ2hlY2tlcjhkaWRDaGVja0Vp
UktOM1dURjZWZWN0b3JJTlNfMTlTcGVsbENoZWNraW5nUmVzdWx0RUxtMEVFRQorX19aTjdXZWJD
b3JlMTJTUUxSZXN1bHRSb3dFCiBfX1pON1dlYkNvcmUxMlRleHRFbmNvZGluZ0MxRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IxMXJhbmdlTGVuZ3RoRVBLTlNfNVJh
bmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMjZyYW5nZUZyb21Mb2NhdGlvbkFuZExl
bmd0aEVQTlNfN0VsZW1lbnRFaWliCkBAIC0zMTYsMTAgKzMyMywxNSBAQCBfX1pON1dlYkNvcmUx
M0lkZW50aWZpZXJSZXAzZ2V0RVBLYwogX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dldEVp
CiBfX1pON1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTNLZXli
b2FyZEV2ZW50QzFFUktOM1dURjEyQXRvbWljU3RyaW5nRWJiUE5TXzlET01XaW5kb3dFUktOUzFf
NlN0cmluZ0VqYmJiYmIKK19fWk43V2ViQ29yZTEzUGFnZVVSTFJlY29yZDEzc2V0SWNvblJlY29y
ZEVOM1dURjEwUGFzc1JlZlB0cklOU18xMEljb25SZWNvcmRFRUUKK19fWk43V2ViQ29yZTEzUGFn
ZVVSTFJlY29yZEMxRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTNQYWdlVVJMUmVjb3Jk
RDFFdgogX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNv
cmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgorX19aTjdXZWJDb3JlMTNTUUxSZXN1bHRE
b25lRQogX19aTjdXZWJDb3JlMTNUeXBpbmdDb21tYW5kMzlpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JJblF1b3RlZENvbnRlbnRFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3Jh
cHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUK
K19fWk43V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlGbG9hdFJlY3RFUDhOU1dpbmRvdwogX19aTjdXZWJDb3Jl
MTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29y
ZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQpAQCAtMzY1LDYgKzM3NywxNyBAQCBfX1pO
N1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMzJyZW1vdmVPcmlnCiBfX1pON1dlYkNvcmUxNFNlY3Vy
aXR5T3JpZ2luNDBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lRWJSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW42Y3JlYXRlRVJLTjNXVEY2
U3RyaW5nRVM0X2kKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW42Y3JlYXRlRVJLTlNfNEtV
UkxFaQorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTExdGFibGVFeGlzdHNFUktOM1dURjZT
dHJpbmdFCitfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlMTJsYXN0RXJyb3JNc2dFdgorX19a
TjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTE0Y2xlYXJBbGxUYWJsZXNFdgorX19aTjdXZWJDb3Jl
MTRTUUxpdGVEYXRhYmFzZTE0ZXhlY3V0ZUNvbW1hbmRFUktOM1dURjZTdHJpbmdFCitfX1pON1dl
YkNvcmUxNFNRTGl0ZURhdGFiYXNlMTVsYXN0SW5zZXJ0Um93SURFdgorX19aTjdXZWJDb3JlMTRT
UUxpdGVEYXRhYmFzZTE2cnVuVmFjdXVtQ29tbWFuZEV2CitfX1pON1dlYkNvcmUxNFNRTGl0ZURh
dGFiYXNlNG9wZW5FUktOM1dURjZTdHJpbmdFYgorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFz
ZTVjbG9zZUV2CitfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlOWxhc3RFcnJvckV2CitfX1pO
N1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlQzFFdgorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFz
ZUQxRXYKIF9fWk43V2ViQ29yZTE1QXJjaGl2ZVJlc291cmNlNmNyZWF0ZUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRVJLTlNfNEtVUkxFUktOUzFfNlN0cmluZ0VTQV9TQV9S
S05TXzE2UmVzb3VyY2VSZXNwb25zZUUKIF9fWk43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkMTNj
bGVhcldyYXBwZXJzRXYKIF9fWk43V2ViQ29yZTE1RE9NV3JhcHBlcldvcmxkRDFFdgpAQCAtNDA4
LDYgKzQzMSwyNCBAQCBfX1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRVJLTjNXVEY2CiBf
X1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRXYKIF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxp
Z25tZW50MTdhbGlnbkNlbnRlckFsd2F5c0UKIF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50
MTlhbGlnblRvRWRnZUlmTmVlZGVkRQorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxMWNv
bHVtbkNvdW50RXYKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTJnZXRDb2x1bW5JbnRF
aQorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxM2dldENvbHVtblRleHRFaQorX19aTjdX
ZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxNGV4ZWN1dGVDb21tYW5kRXYKK19fWk43V2ViQ29yZTE1
U1FMaXRlU3RhdGVtZW50MTRnZXRDb2x1bW5JbnQ2NEVpCitfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDIxZ2V0Q29sdW1uQmxvYkFzVmVjdG9yRWlSTjNXVEY2VmVjdG9ySWNMbTBFRUUKK19f
Wk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MjNyZXR1cm5zQXRMZWFzdE9uZVJlc3VsdEV2Citf
X1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDRzdGVwRXYKK19fWk43V2ViQ29yZTE1U1FMaXRl
U3RhdGVtZW50NXJlc2V0RXYKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50N3ByZXBhcmVF
dgorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4YmluZEJsb2JFaVBLdmkKK19fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmROdWxsRWkKK19fWk43V2ViQ29yZTE1U1FMaXRlU3Rh
dGVtZW50OGJpbmRUZXh0RWlSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE1U1FMaXRlU3Rh
dGVtZW50OGZpbmFsaXplRXYKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OWJpbmRJbnQ2
NEVpeAorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ5aXNFeHBpcmVkRXYKK19fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50QzFFUk5TXzE0U1FMaXRlRGF0YWJhc2VFUktOM1dURjZTdHJp
bmdFCitfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudEQxRXYKIF9fWk43V2ViQ29yZTE1U3Ry
aW5nVHJ1bmNhdG9yMTNyaWdodFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRGb250RQog
X19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3Ry
aW5nRWZSS05TXzRGb250RQogX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktO
M1dURjZTdHJpbmdFUktOU180Rm9udEUKQEAgLTQ2OCwxMCArNTA5LDE2IEBAIF9fWk43V2ViQ29y
ZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE0KIF9fWk43V2ViQ29yZTE3RGV2aWNlT3JpZW50
YXRpb242Y3JlYXRlRWJkYmRiZAogX19aTjdXZWJDb3JlMTdHbHlwaFBhZ2VUcmVlTm9kZTE4dHJl
ZUdseXBoUGFnZUNvdW50RXYKIF9fWk43V2ViQ29yZTE3SGlzdG9yeUNvbnRyb2xsZXIyNnNhdmVE
b2N1bWVudEFuZFNjcm9sbFN0YXRlRXYKK19fWk43V2ViQ29yZTE3U1FMaXRlVHJhbnNhY3Rpb241
YmVnaW5FdgorX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbjZjb21taXRFdgorX19aTjdX
ZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkMxRVJOU18xNFNRTGl0ZURhdGFiYXNlRWIKK19fWk43
V2ViQ29yZTE3U1FMaXRlVHJhbnNhY3Rpb25EMUV2CitfX1pON1dlYkNvcmUxN2V4Y2x1ZGVGcm9t
QmFja3VwRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTduYW1lRm9yQ3Vyc29yVHlwZUVO
U182Q3Vyc29yNFR5cGVFCiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVBLY1JpCiBf
X1pON1dlYkNvcmUxOFNlYXJjaFBvcHVwTWVudU1hY0MxRVBOU18xNVBvcHVwTWVudUNsaWVudEUK
IF9fWk43V2ViQ29yZTE4aXNTdGFydE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25F
TlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCitfX1pON1dlYkNvcmUxOG1ha2VBbGxE
aXJlY3Rvcmllc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4cGx1Z2luU2NyaXB0T2Jq
ZWN0RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzEzSlNIVE1MRWxlbWVudEUKIF9fWk43V2ViQ29yZTE4
cHJveHlTZXJ2ZXJzRm9yVVJMRVJLTlNfNEtVUkxFUEtOU18xN05ldHdvcmtpbmdDb250ZXh0RQog
X19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZyZXN1bWVBbmltYXRpb25zRXYKQEAg
LTUyMiw2ICs1NjksNyBAQCBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlQzJFdgog
X19aTjdXZWJDb3JlMjBTcGFjZVNwbGl0U3RyaW5nRGF0YTEyY3JlYXRlVmVjdG9yRXYKIF9fWk43
V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRpY2F0b3JDMUVOU18yNlByb2Nlc3NpbmdVc2VyR2VzdHVy
ZVN0YXRlRQogX19aTjdXZWJDb3JlMjBVc2VyR2VzdHVyZUluZGljYXRvckQxRXYKK19fWk43V2Vi
Q29yZTIwY2FuRXhjbHVkZUZyb21CYWNrdXBFdgogX19aTjdXZWJDb3JlMjBwcm90b2NvbElzSmF2
YVNjcmlwdEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIxQmFja0ZvcndhcmRDb250cm9s
bGVyMTFpdGVtQXRJbmRleEVpCiBfX1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0
ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TMF80VHlwZUViCkBAIC01NDksNiArNTk3LDcgQEAg
X19aTjdXZWJDb3JlMjJhcHBsaWNhdGlvbklzQXBwbGVNYWlsRXYKIF9fWk43V2ViQ29yZTIyY29u
dGV4dE1lbnVJdGVtVGFnQm9sZEV2CiBfX1pON1dlYkNvcmUyMmNvdW50ZXJWYWx1ZUZvckVsZW1l
bnRFUE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVBO
U181UmFuZ2VFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUyM2VuYWJsZVN1ZGRlblRlcm1p
bmF0aW9uRXYKIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkVQTlNfNUZyYW1l
RWoKIF9fWk43V2ViQ29yZTIzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDMUVSS05TXzE1UHJvdGVj
dGlvblNwYWNlRVJLTlNfMTBDcmVkZW50aWFsRWpSS05TXzE2UmVzb3VyY2VSZXNwb25zZUVSS05T
XzEzUmVzb3VyY2VFcnJvckUKIF9fWk43V2ViQ29yZTIzUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmRD
MUVQTlNfOERvY3VtZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVF
RWpOU18xMEVkaXRBY3Rpb25FCkBAIC01NjYsNiArNjE1LDcgQEAgX19aTjdXZWJDb3JlMjRjb250
ZXh0TWVudUl0ZW1UYWdTdHlsZXNFdgogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21N
YXJrdXBFUE5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9OU18yN0ZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbkUKIF9fWk43V2ViQ29yZTI0ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRkZWxldGVDb29raWVzRm9ySG9zdG5hbWVFUktO
M1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUyNGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbkV2CiBf
X1pON1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkRQogX19aTjdXZWJDb3JlMjVIaXN0
b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0YUV2CkBAIC05ODksNiArMTAzOSw3IEBA
IF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMXBlcnNpc3RlbmNlRXYKIF9fWk5LN1dlYkNvcmUx
MENyZWRlbnRpYWw0dXNlckV2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsOHBhc3N3b3JkRXYK
IF9fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjhfTlNQb2ludEV2CitfX1pOSzdXZWJDb3JlMTBJ
Y29uUmVjb3JkOHNuYXBzaG90RWIKIF9fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1cHBvcnRz
TWltZVR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MTZsaW5l
c0JvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQ5Zmlyc3RSdW5YRXYKQEAg
LTEwNDksNiArMTEwMCw3IEBAIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDR2aWV3RXYKIF9f
Wk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDdjaGlsZEF0RWoKIF9fWk5LN1dlYkNvcmUxMlJlbmRl
cldpZGdldDE0d2luZG93Q2xpcFJlY3RFdgogX19aTks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTFn
ZXRTb21lRGF0YUVSUEtjagorX19aTks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyNGNvcHlFdgogX19a
Tks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyNGRhdGFFdgogX19aTks3V2ViQ29yZTEyU2hhcmVkQnVm
ZmVyNHNpemVFdgogX19aTks3V2ViQ29yZTEyVGV4dEVuY29kaW5nNmRlY29kZUVQS2NtYlJiCkBA
IC0xMDcyLDYgKzExMjQsNyBAQCBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTh0aXRsZURp
c3BsCiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NWltYWdlRXYKIF9fWk5LN1dlYkNvcmUx
M0hpdFRlc3RSZXN1bHQ1dGl0bGVFUk5TXzEzVGV4dERpcmVjdGlvbkUKIF9fWk5LN1dlYkNvcmUx
M0hpdFRlc3RSZXN1bHQ5aW1hZ2VSZWN0RXYKK19fWk5LN1dlYkNvcmUxM1BhZ2VVUkxSZWNvcmQ4
c25hcHNob3RFYgogX19aTks3V2ViQ29yZTEzUmVzb3VyY2VFcnJvcjdjZkVycm9yRXYKIF9fWk5L
N1dlYkNvcmUxM1Jlc291cmNlRXJyb3I3bnNFcnJvckV2CiBfX1pOSzdXZWJDb3JlMTNSZXNvdXJj
ZUVycm9yY3ZQN05TRXJyb3JFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTM1Nyw3ICszNTcsNyBAQAogCQkxQTIyNDY0OTBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEyMjQ2NDMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmNwcCAqLzsgfTsKIAkJ
MUEyMjQ2NEEwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NDBDQzk4RERCMDBDMDUy
NDAgLyogU1FMaXRlRGF0YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxQTIyNDY0QjBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MjI0NjQ1MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVTdGF0ZW1lbnQuY3BwICovOyB9OwotCQkx
QTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NjBDQzk4RERCMDBDMDUy
NDAgLyogU1FMaXRlU3RhdGVtZW50LmggKi87IH07CisJCTFBMjI0NjRDMENDOThEREIwMEMwNTI0
MCAvKiBTUUxpdGVTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMjI0NjQ2MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVTdGF0ZW1lbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTIy
NDY0RDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyMjQ2NDcwQ0M5OEREQjAwQzA1
MjQwIC8qIFNRTGl0ZVRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJMUEyMjQ2NEUwQ0M5OEREQjAw
QzA1MjQwIC8qIFNRTGl0ZVRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0ODBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJh
bnNhY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxQTI3Q0Y5NzExOEEzNTRDMDA0MUQ2MzIgLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyN0NGOTYxMThBMzU0QzAwNDFENjMy
IC8qIG5wdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTM4MSw5ICsxMzgxLDkgQEAKIAkJNTFFMUVDQjMwQzkxQzU1NjAwREMyNTVCIC8q
IEF1dG9kcmFpbmVkUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFFMUVDQjEwQzkxQzU1NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9vbC5oICov
OyB9OwogCQk1MUUxRUNCRTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvbkRhdGFiYXNlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUxRUNCODBD
OTFDOTA0MDBEQzI1NUIgLyogSWNvbkRhdGFiYXNlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVC
IC8qIEljb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFFMUVDQkEwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwICovOyB9
OwotCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMUVDQkIwQzkxQzkwNDAwREMy
NTVCIC8qIEljb25SZWNvcmQuaCAqLzsgfTsKKwkJNTFFMUVDQzEwQzkxQzkwNDAwREMyNTVCIC8q
IEljb25SZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTFFQ0JCMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFFMUVDQzIwQzkxQzkwNDAw
REMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFMUVDQkMwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNv
cmQuY3BwICovOyB9OwotCQk1MUUxRUNDMzBDOTFDOTA0MDBEQzI1NUIgLyogUGFnZVVSTFJlY29y
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMUVD
QkQwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuaCAqLzsgfTsKKwkJNTFFMUVDQzMw
QzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTFFQ0JEMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdl
VVJMUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTFFM0Y5QzcwREEwNTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFM0Y5QzUwREEwNTlEQzAwMjUw
OTExIC8qIFN0b3JhZ2UuY3BwICovOyB9OwogCQk1MUUzRjlENjBEQTA1RTFEMDAyNTA5MTEgLyog
SlNTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTNGOUQ0MERBMDVFMUQwMDI1MDkxMSAvKiBKU1N0b3JhZ2UuY3BwICovOyB9OwogCQk1
MUVDOTI1OTBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUM5MjU3MENFOTBEQjQwMEY5MDMwOCAvKiBT
UUxFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yOTIwLDcgKzI5MjAsNyBAQAogCQk5MzlCMDJFRTBFQTJEQkM0MDBDNTQ1NzAgLyogV2lk
dGhJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzlCMDJFQzBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgKi87IH07
CiAJCTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlCMDJFRDBFQTJEQkM0MDBD
NTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICovOyB9OwogCQk5M0EzOEI0QjBEMEU1ODA4MDA2ODcy
QzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5j
cHAgKi87IH07Ci0JCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCMkQ4
MTUwRjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IH07CisJCTkzQjJE
ODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCMkQ4MTUwRjk5MjBEMjAwNkFFNkIy
IC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1p
bmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1tICovOyB9Owog
CQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU5
MEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSAqLzsgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gODE2NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NTgsNiArODU4LDggQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Z2V0SWNvbkxvYWREZWNpc2lv
bgogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpjb250aW51ZUljb25Mb2FkV2l0aERlY2lzaW9uKElj
b25Mb2FkRGVjaXNpb24gZGVjaXNpb24pCiB7CisgICAgQVNTRVJUKG1faWNvbkxvYWREZWNpc2lv
bkNhbGxiYWNrKTsKKyAgICBtX2ljb25Mb2FkRGVjaXNpb25DYWxsYmFjayA9IDA7CiAgICAgaWYg
KG1fZnJhbWUpCiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb250aW51ZUljb25Mb2FkV2l0
aERlY2lzaW9uKGRlY2lzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsNiArNzQzLDEwIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNvbnRpbnVlSWNvbkxvYWRXaXRoRGUKIHsKICAgICBBU1NFUlQoaWNvbkxvYWREZWNp
c2lvbiAhPSBJY29uTG9hZFVua25vd24pOwogICAgIAorICAgIC8vICBGSVhNRSAoPHJkYXI6Ly9w
cm9ibGVtLzkxNjg2MDU+KSAtIFdlIHNob3VsZCBzdXBwb3J0IGluLW1lbW9yeS1vbmx5IHByaXZh
dGUgYnJvd3NpbmcgaWNvbnMgaW4gYXN5bmNocm9ub3VzIGljb24gZGF0YWJhc2UgbW9kZS4KKyAg
ICBpZiAoaWNvbkRhdGFiYXNlKCkuc3VwcG9ydHNBc3luY2hyb25vdXNNb2RlKCkgJiYgbV9mcmFt
ZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCiAgICAgaWYgKGljb25Mb2FkRGVjaXNpb24gPT0gSWNvbkxvYWRO
bykgewogICAgICAgICBLVVJMIHVybChpY29uVVJMKCkpOwogICAgICAgICBTdHJpbmcgdXJsU3Ry
aW5nKHVybC5zdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlQmFzZS5oCShyZXZpc2lvbiA4MTY3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUs
MzYgQEAgZW51bSBJY29uTG9hZERlY2lzaW9uIHsKICAgICBJY29uTG9hZFVua25vd24KIH07CiAK
K2NsYXNzIENhbGxiYWNrQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbGxiYWNrQmFzZT4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNhbGxiYWNrQmFzZSgpCisgICAgeworICAgIH0KKworICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrSUQ7IH0KKwor
cHJvdGVjdGVkOgorICAgIENhbGxiYWNrQmFzZSh2b2lkKiBjb250ZXh0KQorICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fY2FsbGJhY2tJRChnZW5lcmF0ZUNhbGxiYWNr
SUQoKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dDsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUNh
bGxiYWNrSUQoKQorICAgIHsKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1ZUNhbGxiYWNr
SUQgPSAxOworICAgICAgICByZXR1cm4gdW5pcXVlQ2FsbGJhY2tJRCsrOworICAgIH0KKworICAg
IHZvaWQqIG1fY29udGV4dDsKKyAgICB1aW50NjRfdCBtX2NhbGxiYWNrSUQ7Cit9OworCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbnVtVHlwZT4gCi1jbGFzcyBFbnVtQ2FsbGJhY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxFbnVtQ2FsbGJhY2s8RW51bVR5cGU+ID4geworY2xhc3MgRW51bUNhbGxiYWNrIDog
cHVibGljIENhbGxiYWNrQmFzZSB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJh
Y2tGdW5jdGlvbikoRW51bVR5cGUsIHZvaWQqKTsKIApAQCAtNjMsNyArOTEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwZXJmb3JtQ2FsbGJhY2soRW51bVR5cGUgcmVzdWx0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2FsbGJhY2spOwotICAgICAgICBtX2NhbGxiYWNrKHJlc3VsdCwgbV9jb250
ZXh0KTsKKyAgICAgICAgbV9jYWxsYmFjayhyZXN1bHQsIGNvbnRleHQoKSk7CiAgICAgICAgIG1f
Y2FsbGJhY2sgPSAwOwogICAgIH0KICAgICAKQEAgLTc1LDE3ICsxMDMsMTYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIEVudW1DYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0
aW9uIGNhbGxiYWNrKQotICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICA6IENh
bGxiYWNrQmFzZShjb250ZXh0KQogICAgICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQqIG1fY29udGV4dDsKICAgICBDYWxsYmFja0Z1bmN0aW9uIG1f
Y2FsbGJhY2s7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3RUeXBlPiAKLWNsYXNzIE9i
amVjdENhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8T2JqZWN0Q2FsbGJhY2s8T2JqZWN0VHlw
ZT4gPiB7CitjbGFzcyBPYmplY3RDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogcHVi
bGljOgogICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKE9iamVjdFR5cGUsIHZv
aWQqKTsKIApAQCAtMTAyLDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBlcmZvcm1DYWxs
YmFjayhPYmplY3RUeXBlIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NhbGxiYWNr
KTsKLSAgICAgICAgbV9jYWxsYmFjayhyZXN1bHQsIG1fY29udGV4dCk7CisgICAgICAgIG1fY2Fs
bGJhY2socmVzdWx0LCBjb250ZXh0KCkpOwogICAgICAgICBtX2NhbGxiYWNrID0gMDsKICAgICB9
CiAgICAgCkBAIC0xMTQsMTIgKzE0MSwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgT2Jq
ZWN0Q2FsbGJhY2sodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKLSAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgOiBDYWxsYmFja0Jhc2UoY29udGV4
dCkKICAgICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICB9CiAKLSAgICB2
b2lkKiBtX2NvbnRleHQ7CiAgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2NhbGxiYWNrOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAkocmV2aXNpb24gODE2
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDEwICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeyAKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vUGFnZVVSTFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL1BhZ2VVUkxSZWNvcmQuaAkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9QYWdlVVJMUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsy
OSw5IEBACiAjaWZuZGVmIFBhZ2VVUkxSZWNvcmRfaAogI2RlZmluZSBQYWdlVVJMUmVjb3JkX2gK
IAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
ODE2NzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMDggQEAKKzIwMTEtMDMtMjIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS84NjQ4MzExPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU2NDI1CisgICAgICAgIFdlYktpdDIgSWNvbiBEYXRhYmFzZQorCisgICAgICAgIFBy
b2plY3QtZmlsZSBzdHVmZjoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBX
ZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCisgICAgICAgIEFkZCBhbiBJY29uRGF0
YWJhc2UgbG9nZ2luZyBjaGFubmVsIHRvIFdLMjoKKyAgICAgICAgKiBQbGF0Zm9ybS9Mb2dnaW5n
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3Nhcnkp
OgorICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c2V0SWNvbkRhdGFi
YXNlUGF0aCk6IENoYW5nZSB0aGUgSWNvbkRhdGFiYXNlIHBhdGggc2V0dGVyIHRvIHBhc3MgdGhl
IHBhdGggdGhyb3VnaCB0byB0aGUgV2ViSWNvbkRhdGFiYXNlIGl0c2VsZi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQ29udGV4dC5oOgorCisgICAgICAgIFdlYkljb25EYXRhYmFzZSB3aWxsIGJl
IHRoZSBBUEkgb2JqZWN0IHRoYXQgcmVzcG9uZHMgdG8gbWVzc2FnZXMgZnJvbSB0aGUgV2ViUHJv
Y2VzcywgYnV0IHVzZSBXZWJJY29uRGF0YWJhc2VJbXBsIHRvIGRvIHRoZSBkaXJ0eS13b3JrOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykljb25EYXRhYmFzZTo6aW52YWxpZGF0ZSk6IENsZWFyIHRoZSBjYWxsYmFjayBtYXAuCisgICAg
ICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6c2V0RGF0YWJhc2VQYXRoKTogT3BlbiB0aGUg
ZGF0YWJhc2Ugb24gZGlzay4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpyZXRh
aW5JY29uRm9yUGFnZVVSTCk6IENhbGwgdGhyb3VnaCB0byB0aGUgV2ViSWNvbkRhdGFiYXNlSW1w
bC4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VV
UkwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpzZXRJY29uVVJM
Rm9yUGFnZVVSTCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnNl
dEljb25EYXRhRm9ySWNvblVSTCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0
YWJhc2U6OnN5bmNocm9ub3VzSWNvbkRhdGFGb3JQYWdlVVJMKTogUmVuYW1lZCAtIHN0aWxsIGJh
c2ljYWxseSBhIG5vLW9wLgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnN5bmNo
cm9ub3VzSWNvblVSTEZvclBhZ2VVUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNv
bkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29uVVJMKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNMb2FkRGVjaXNpb25G
b3JJY29uVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6Z2V0
TG9hZERlY2lzaW9uRm9ySWNvblVSTCk6IE1lc3NhZ2UgYmFjayB0aGUgbG9hZCBkZWNpc2lvbiwg
b3Igc2F2ZSB0aGUgVVJMIGFuZCBjYWxsYmFjayBJRCB0byBtZXNzYWdlIGJhY2sgbGF0ZXIuCisg
ICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6ZGlkRmluaXNoVVJMSW1wb3J0KTogTm90
aWZ5IHBlbmRpbmcgbG9hZCBkZWNpc2lvbnMgZnJvbSBnZXRMb2FkRGVjaXNpb25Gb3JJY29uVVJM
LgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZEltcG9ydEljb25VUkxGb3JQ
YWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpkaWRJbXBvcnRJY29u
RGF0YUZvckljb25VUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmRpZENo
YW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpk
aWRSZW1vdmVBbGxJY29ucyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UubWVzc2FnZXMuaW46IFJlbmFt
ZSB0aGUgc3luY2hyb25vdXMgbWVzc2FnZXMsIGFuZCBhZGQgYSBuZXcgYXN5bmNocm9ub3VzIG1v
ZGUgZm9yIGdldHRpbmcgdGhlIGljb24gbG9hZCBkZWNpc2lvbi4KKworICAgICAgICBXZWJJY29u
RGF0YWJhc2VJbXBsIGlzIHRoZSBhY3R1YWxseSBJL08gYW5kIHRocmVhZGluZyBtYW5hZ2VyIG9m
IHRoZSBkYXRhYmFzZSBvbiBkaXNrLCBhbmQgd2FzIGRpcmVjdGx5IHBvcnRlZCBmcm9tCisgICAg
ICAgIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojp1
cmxGb3JMb2dnaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6V2Vi
SWNvbkRhdGFiYXNlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6
On5XZWJJY29uRGF0YWJhc2VJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNl
SW1wbDo6aXNPcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6b3Bl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OmNsb3NlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY2hyb25vdXNMb2FkRGVjaXNpb25G
b3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY1Rp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjp3YWtlU3lu
Y1RocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OmRpc3BhdGNo
RGlkSW1wb3J0SWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJh
c2VJbXBsOjpkaXNwYXRjaERpZENoYW5nZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6ZGlzcGF0Y2hEaWRSZW1vdmVBbGxJY29ucyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OmRpc3BhdGNoRGlkRmluaXNoVVJMSW1w
b3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c2V0SWNvbkRhdGFG
b3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c2V0SWNv
blVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjpz
Y2hlZHVsZU9yRGVmZXJTeW5jVGltZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJh
c2VJbXBsOjpyZXRhaW5JY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25E
YXRhYmFzZUltcGw6OnJlbGVhc2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykljb25EYXRhYmFzZUltcGw6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6Omljb25EYXRhYmFzZVN5bmNUaHJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjpwZXJmb3JtVVJMSW1wb3J0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY1RocmVhZE1haW5Mb29w
KToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlRGF0YWJhc2VUYWJsZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjpyZW1vdmVBbGxJY29uc09uVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6ZGVsZXRlQWxsUHJlcGFyZWRTdGF0ZW1l
bnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6d3JpdGVUb0RhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6cmVhZHlTUUxpdGVTdGF0ZW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjp3cml0ZUljb25TbmFwc2hvdFRvU1FMRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjpzZXRJY29uVVJMRm9y
UGFnZVVSTEluU1FMRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJ
bXBsOjpzZXRJY29uSURGb3JQYWdlVVJMSW5TUUxEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkljb25EYXRhYmFzZUltcGw6OmdldEljb25JREZvckljb25VUkxGcm9tU1FMRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjphZGRJY29uVVJMVG9TUUxE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OnBydW5lVW5y
ZXRhaW5lZEljb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6c2hv
dWxkU3RvcFRocmVhZEFjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNl
SW1wbDo6cmVtb3ZlUGFnZVVSTEZyb21TUUxEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OmRh
dGFiYXNlVmVyc2lvbk51bWJlcik6CisgICAgICAgIChXZWJLaXQ6OmlzVmFsaWREYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OnBlcmZvcm1PcGVuSW5pdGlh
bGl6YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2VJbXBsOjpyZW1vdmVJ
Y29uRnJvbVNRTERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1w
bDo6d2FzRXhjbHVkZWRGcm9tQmFja3VwKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFi
YXNlSW1wbDo6c2V0V2FzRXhjbHVkZWRGcm9tQmFja3VwKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SWNvbkRhdGFiYXNlSW1wbDo6Y2hlY2tJbnRlZ3JpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
Y29uRGF0YWJhc2VJbXBsOjpyZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SWNvbkRhdGFiYXNlSW1wbDo6Z2V0SW1hZ2VEYXRhRm9ySWNvblVSTEZyb21TUUxEYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OmNoZWNrRm9yRGFuZ2xpbmdQ
YWdlVVJMcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZUltcGw6OmNsZWFudXBT
eW5jVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbDo6Z2V0T3JD
cmVhdGVJY29uUmVjb3JkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlSW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlSW1wbENsaWVudDo6
fldlYkljb25EYXRhYmFzZUltcGxDbGllbnQpOgorCisgICAgICAgIEFkZCB0aGUgYXN5bmNocm9u
b3VzIGxvYWQgZGVjaXNpb24gdG8gdGhlIFdlYlByb2Nlc3M6CisgICAgICAgICogV2ViUHJvY2Vz
cy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJY29uRGF0YWJhc2VQcm94eTo6c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZVByb3h5Ojpsb2FkRGVjaXNpb25Gb3JJY29uVVJM
KTogTWVzc2FnZSB0byB0aGUgVUkgcHJvY2Vzcywgc2F2aW5nIHRoZSBjYWxsYmFjayBJRCBmb3Ig
bGF0ZXIuCisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZVByb3h5OjpyZWNlaXZlZElj
b25Mb2FkRGVjaXNpb24pOiBQZXJmb3JtIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayB3aXRoIHRo
ZSByZWNlaXZlZCBsb2FkIGRlY2lzaW9uLgorICAgICAgICAqIFdlYlByb2Nlc3MvSWNvbkRhdGFi
YXNlL1dlYkljb25EYXRhYmFzZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JY29uRGF0
YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkubWVzc2FnZXMuaW46IEFkZCBhIG5ldyBtZXNzYWdl
IGZvciByZWNlaXZpbmcgdGhlIGFzeW5jaHJvbm91cyBsb2FkIGRlY2lzaW9uLgorCiAyMDExLTAz
LTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggTWFj
IHJlbGVhc2UgYnVpbGRzIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01Njc4MwpJbmRleDogU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDgxNjc0KQorKysg
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw2ICs0
NDksOCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkhpc3RvcnlDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2UuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZUltcGwuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlSW1wbC5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5jcHAgXApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8JKHJldmlzaW9uIDgxNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVBy
b2Nlc3MvV2ViR2VvbG9jYXRpb25Qcm92aWRlci5oIFwKICAgICBVSVByb2Nlc3MvV2ViSGlzdG9y
eUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmggXAorICAgIFVJUHJv
Y2Vzcy9XZWJJY29uRGF0YWJhc2VJbXBsLmggXAogICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQ
cm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5Lmgg
XAogICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaCBcCkBAIC0zOTcsNiArMzk4LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwIFwK
ICAgICBVSVByb2Nlc3MvV2ViSGlzdG9yeUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuY3BwIFwKKyAgICBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlSW1wbC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9X
ZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViTG9h
ZGVyQ2xpZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcAkocmV2
aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBXVEZMb2dDaGFubmVsIExvZ1Nlc3Npb25TdGF0
ZSA9IHsgMHgwMDAwCiBXVEZMb2dDaGFubmVsIExvZ0NvbnRleHRNZW51ICA9IHsgMHgwMDAwMDAw
MiwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKIFdURkxvZ0NoYW5uZWwg
TG9nVGV4dElucHV0ICAgID0geyAweDAwMDAwMDA0LCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9n
Q2hhbm5lbE9mZiB9OwogV1RGTG9nQ2hhbm5lbCBMb2dWaWV3ICAgICAgICAgPSB7IDB4MDAwMDAw
MDgsICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CitXVEZMb2dDaGFubmVs
IExvZ0ljb25EYXRhYmFzZSA9IHsgMHgwMDAwMDAxMCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxv
Z0NoYW5uZWxPZmYgfTsKIAogI2lmICFQTEFURk9STShNQUMpCiB2b2lkIGluaXRpYWxpemVMb2dD
aGFubmVsKFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwpCkBAIC01MCw2ICs1MSw3IEBAIHZvaWQgaW5p
dGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQogICAgIGhhdmVJbml0aWFsaXplZExvZ0No
YW5uZWxzID0gdHJ1ZTsKIAogICAgIGluaXRpYWxpemVMb2dDaGFubmVsKCZMb2dDb250ZXh0TWVu
dSk7CisgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoJkxvZ0ljb25EYXRhYmFzZSk7CiAgICAgaW5p
dGlhbGl6ZUxvZ0NoYW5uZWwoJkxvZ1Nlc3Npb25TdGF0ZSk7CiAgICAgaW5pdGlhbGl6ZUxvZ0No
YW5uZWwoJkxvZ1RleHRJbnB1dCk7CiAgICAgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoJkxvZ1ZpZXcp
OwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAkocmV2aXNpb24gODE2NzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBleHRlcm4gV1RGTG9nQ2hhbm5lbCBMb2dD
b250ZXh0TWVudTsKK2V4dGVybiBXVEZMb2dDaGFubmVsIExvZ0ljb25EYXRhYmFzZTsKIGV4dGVy
biBXVEZMb2dDaGFubmVsIExvZ1Nlc3Npb25TdGF0ZTsKIGV4dGVybiBXVEZMb2dDaGFubmVsIExv
Z1RleHRJbnB1dDsKIGV4dGVybiBXVEZMb2dDaGFubmVsIExvZ1ZpZXc7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCShyZXZpc2lvbiA4MTY3NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYw
LDYgKzc2MCwxMiBAQCBTdHJpbmcgV2ViQ29udGV4dDo6ZGF0YWJhc2VEaXJlY3RvcnkoKSBjCiAg
ICAgcmV0dXJuIHBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCk7CiB9CiAKK3ZvaWQg
V2ViQ29udGV4dDo6c2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgbV9vdmVycmlkZUljb25EYXRhYmFzZVBhdGggPSBwYXRoOworICAgIG1faWNvbkRhdGFiYXNl
LT5zZXREYXRhYmFzZVBhdGgocGF0aCk7Cit9CisKIFN0cmluZyBXZWJDb250ZXh0OjppY29uRGF0
YWJhc2VQYXRoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fb3ZlcnJpZGVJY29uRGF0YWJhc2VQYXRo
LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2
aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBTdGF0
aXN0aWNzJiBzdGF0aXN0aWNzKCk7CiAKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVEYXRhYmFzZURpcmVjdG9yeSA9IGRpcjsgfQot
ICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIHsgbV9vdmVy
cmlkZUljb25EYXRhYmFzZVBhdGggPSBwYXRoOyB9CisgICAgdm9pZCBzZXRJY29uRGF0YWJhc2VQ
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBj
b25zdDsKICAgICB2b2lkIHNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRp
cikgeyBtX292ZXJyaWRlTG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKICAgICB2b2lk
IGVuc3VyZVdlYlByb2Nlc3MoKTsKQEAgLTE5NSw3ICsxOTYsNiBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1
bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGljb25EYXRhYmFzZVBh
dGgoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgp
IGNvbnN0OwogCiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDgxNjc0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDExIEBACiAjaW5jbHVkZSAiV2ViSWNvbkRh
dGFiYXNlLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2VJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDIsNDkgKzQ3LDEzNiBAQCBXZWJJY29uRGF0
YWJhc2U6On5XZWJJY29uRGF0YWJhc2UoKQogCiBXZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRh
YmFzZShXZWJDb250ZXh0KiBjb250ZXh0KQogICAgIDogbV93ZWJDb250ZXh0KGNvbnRleHQpCisg
ICAgLCBtX2ljb25EYXRhYmFzZShuZXcgV2ViSWNvbkRhdGFiYXNlSW1wbCh0aGlzKSkKKyAgICAs
IG1fdXJsSW1wb3J0Q29tcGxldGVkKGZhbHNlKQogewogfQogCiB2b2lkIFdlYkljb25EYXRhYmFz
ZTo6aW52YWxpZGF0ZSgpCiB7CisgICAgbV9wZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFy
KCk7CiB9CiAKLXZvaWQgV2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmKQordm9pZCBXZWJJY29uRGF0YWJhc2U6OnNldERhdGFiYXNlUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCiB7CisgICAgaWYgKG1faWNvbkRhdGFiYXNlLT5pc09wZW4oKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkljb24gZGF0YWJhc2UgaXMgYWxyZWFkeSBvcGVuLCBjYW4gb25seSBo
YXZlIGl0cyBwYXRoIHNldCBvbmNlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX2ljb25EYXRhYmFzZS0+b3BlbihwYXRoKSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gb3BlbiBXZWJLaXQyIGljb24gZGF0YWJhc2Ugb24gZGlzayIpOworfQorCit2b2lkIFdl
Ykljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJM
KQoreworICAgIG1faWNvbkRhdGFiYXNlLT5yZXRhaW5JY29uRm9yUGFnZVVSTChwYWdlVVJMKTsK
IH0KIAotdm9pZCBXZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmKQordm9pZCBXZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpCiB7CisgICAgbV9pY29uRGF0YWJhc2UtPnJlbGVhc2VJY29uRm9y
UGFnZVVSTChwYWdlVVJMKTsKIH0KIAotdm9pZCBXZWJJY29uRGF0YWJhc2U6OnNldEljb25VUkxG
b3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit2b2lkIFdlYkljb25EYXRh
YmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkwpCiB7CisgICAgbV9pY29uRGF0YWJhc2UtPnNldEljb25VUkxGb3JQYWdl
VVJMKGljb25VUkwsIHBhZ2VVUkwpOwogfQogCi12b2lkIFdlYkljb25EYXRhYmFzZTo6c2V0SWNv
bkRhdGFGb3JJY29uVVJMKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJp
bmcmKQordm9pZCBXZWJJY29uRGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNvblVSTChjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBTdHJpbmcmIGljb25VUkwpCiB7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICBtX2ljb25EYXRh
YmFzZS0+c2V0SWNvbkRhdGFGb3JJY29uVVJMKGJ1ZmZlci5yZWxlYXNlKCksIGljb25VUkwpOwog
fQogCi12b2lkIFdlYkljb25EYXRhYmFzZTo6aWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIGljb25EYXRhKQordm9pZCBXZWJJY29uRGF0YWJh
c2U6OnN5bmNocm9ub3VzSWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIENvcmVJUEM6
OkRhdGFSZWZlcmVuY2UmIGljb25EYXRhKQogewogICAgIGljb25EYXRhID0gQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZSgpOwogfQogCi12b2lkIFdlYkljb25EYXRhYmFzZTo6aWNvblVSTEZvclBhZ2VV
UkwoY29uc3QgU3RyaW5nJiwgU3RyaW5nJiBpY29uVVJMKQordm9pZCBXZWJJY29uRGF0YWJhc2U6
OnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgU3RyaW5nJiBpY29u
VVJMKQogewogICAgIGljb25VUkwgPSBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJJY29uRGF0YWJh
c2U6Omljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIGJvb2wmIGljb25EYXRh
S25vd24pIGNvbnN0Cit2b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRGF0YUtu
b3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBib29sJiBpY29uRGF0YUtub3duKQogewogICAg
IGljb25EYXRhS25vd24gPSBmYWxzZTsKIH0KIAotdm9pZCBXZWJJY29uRGF0YWJhc2U6OmxvYWRE
ZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgaW50JiBsb2FkRGVjaXNpb24pIGNvbnN0
Cit2b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29uVVJM
KGNvbnN0IFN0cmluZyYsIGludCYgbG9hZERlY2lzaW9uKSAKIHsKICAgICBsb2FkRGVjaXNpb24g
PSAoaW50KVdlYkNvcmU6Okljb25Mb2FkTm87CiB9CiAKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlOjpn
ZXRMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKK3sKKyAgICBpZiAoIW1fd2ViQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2ljb25EYXRhYmFzZS0+aXNPcGVuKCkgfHwgaWNvblVSTC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV93ZWJDb250ZXh0LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYklj
b25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oKGludClXZWJDb3JlOjpJ
Y29uTG9hZE5vLCBjYWxsYmFja0lEKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgLy8gSWYgdGhlIGRlY2lzaW9uIGhhc24ndCBiZWVuIHJlYWQgZnJvbSBkaXNrIHlldCwg
c2V0IHRoaXMgdXJsIGFuZCBjYWxsYmFjayBJRCBhc2lkZSB0byBiZSBub3RpZmVkIGxhdGVyCisg
ICAgV2ViQ29yZTo6SWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRhdGFiYXNlLT5z
eW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoaWNvblVSTCk7CisgICAgaWYgKGRlY2lz
aW9uID09IFdlYkNvcmU6Okljb25Mb2FkVW5rbm93bikgeworICAgICAgICAvLyBXZSBzaG91bGQg
bmV2ZXIgZ2V0IGFuIHVua25vd24gbG9hZCBkZWNpc2lvbiBhZnRlciB0aGUgVVJMIGltcG9ydCBo
YXMgY29tcGxldGVkLgorICAgICAgICBBU1NFUlQoIW1fdXJsSW1wb3J0Q29tcGxldGVkKTsKKyAg
ICAgICAgCisgICAgICAgIG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcC5zZXQoY2FsbGJhY2tJ
RCwgaWNvblVSTCk7CisgICAgICAgIHJldHVybjsgICAgCisgICAgfQorICAgIAorICAgIG1fd2Vi
Q29udGV4dC0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6
UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKChpbnQpZGVjaXNpb24sIGNhbGxiYWNrSUQpLCAwKTsK
K30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6OmRpZEZpbmlzaFVSTEltcG9ydCgpCit7CisgICAg
aWYgKCFtX3dlYkNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhJY29uRGF0YWJh
c2UsICJVUkwgaW1wb3J0IGNvbXBsZXRlIC0gbm90aWZ5IGFsbCBwZW5kaW5nIFBhZ2VVUkwgbG9h
ZCBkZWNpc2lvbnMiKTsKKworICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz46Oml0ZXJhdG9y
IGkgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxN
YXAuZW5kKCk7CisgICAgCisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKKyAgICAgICAgTE9H
KEljb25EYXRhYmFzZSwgIlBlcmZvcm1pbmcgZGVsYXllZCBjYWxsYmFjayBvbiBjYWxsYmFjayBJ
RCAlaSBmb3IgdXJsICVzIiwgKGludClpLT5maXJzdCwgaS0+c2Vjb25kLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgV2ViQ29yZTo6SWNvbkxvYWREZWNpc2lvbiBkZWNpc2lvbiA9IG1faWNvbkRh
dGFiYXNlLT5zeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoaS0+c2Vjb25kKTsKKwor
ICAgICAgICAvLyBEZWNpc2lvbnMgc2hvdWxkIG5ldmVyIGJlIHVua25vd24gYWZ0ZXIgdGhlIGlu
aXRhbCBpbXBvcnQgaXMgY29tcGxldGUKKyAgICAgICAgQVNTRVJUKGRlY2lzaW9uICE9IFdlYkNv
cmU6Okljb25Mb2FkVW5rbm93bik7CisKKyAgICAgICAgbV93ZWJDb250ZXh0LT5wcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVj
aXNpb24oKGludClkZWNpc2lvbiwgaS0+Zmlyc3QpLCAwKTsKKyAgICB9CisgICAgCisgICAgbV9w
ZW5kaW5nTG9hZERlY2lzaW9uVVJMTWFwLmNsZWFyKCk7CisgICAgCisgICAgbV91cmxJbXBvcnRD
b21wbGV0ZWQgPSB0cnVlOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkSW1wb3J0SWNv
blVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vODY0ODMxMT4gLSBPbmNlIHdlIGV4cG9zZSBBUEkgdGhhdCBtaWdodCBj
YXJlIGFib3V0IHRoaXMsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgorfQorCit2
b2lkIFdlYkljb25EYXRhYmFzZTo6ZGlkSW1wb3J0SWNvbkRhdGFGb3JJY29uVVJMKGNvbnN0IFN0
cmluZyYgaWNvblVSTCkKK3sKKyAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzg2NDgzMTE+
IC0gT25jZSB3ZSBleHBvc2UgQVBJIHRoYXQgbWlnaHQgY2FyZSBhYm91dCB0aGlzLCB0aGlzIHdp
bGwgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6OmRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICAvLyBG
SVhNRTogPHJkYXI6Ly9wcm9ibGVtLzg2NDgzMTE+IC0gT25jZSB3ZSBleHBvc2UgQVBJIHRoYXQg
bWlnaHQgY2FyZSBhYm91dCB0aGlzLCB0aGlzIHdpbGwgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4K
K30KKwordm9pZCBXZWJJY29uRGF0YWJhc2U6OmRpZFJlbW92ZUFsbEljb25zKCkKK3sKKyAgICAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzg2NDgzMTE+IC0gT25jZSB3ZSBleHBvc2UgQVBJIHRo
YXQgbWlnaHQgY2FyZSBhYm91dCB0aGlzLCB0aGlzIHdpbGwgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZC4KK30KKwogdm9pZCBXZWJJY29uRGF0YWJhc2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlcikKIHsKICAgICBkaWRSZWNlaXZlV2ViSWNv
bkRhdGFiYXNlTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAkocmV2aXNpb24gODE2
NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDExICsyOSwxNCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogCiAj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZUltcGwuaCIK
KwogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KIAogbmFtZXNwYWNlIENvcmVJUEMgewogY2xhc3MgQXJndW1lbnREZWNvZGVyOwpA
QCAtNDUsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQ29udGV4dDsK
IAotY2xhc3MgV2ViSWNvbkRhdGFiYXNlIDogcHVibGljIEFQSU9iamVjdCB7CitjbGFzcyBXZWJJ
Y29uRGF0YWJhc2UgOiBwdWJsaWMgQVBJT2JqZWN0LCBwdWJsaWMgV2ViSWNvbkRhdGFiYXNlSW1w
bENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVJ
Y29uRGF0YWJhc2U7CiAKQEAgLTU0LDE2ICs1NywyOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGlu
dmFsaWRhdGUoKTsKICAgICB2b2lkIGNsZWFyQ29udGV4dCgpIHsgbV93ZWJDb250ZXh0ID0gMDsg
fQorICAgIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBy
ZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlbGVhc2VJY29u
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEljb25VUkxGb3JQYWdlVVJM
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0SWNvbkRhdGFGb3JJ
Y29uVVJMKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIGljb25EYXRhRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlJik7Ci0gICAgdm9pZCBpY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBTdHJp
bmcmKTsKLSAgICB2b2lkIGljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIGJv
b2wmKSBjb25zdDsKLSAgICB2b2lkIGxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5n
JiwgaW50JikgY29uc3Q7CisgICAgCisgICAgdm9pZCBzeW5jaHJvbm91c0ljb25EYXRhRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgdm9pZCBz
eW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIFN0cmluZyYpOworICAg
IHZvaWQgc3luY2hyb25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBi
b29sJik7CisgICAgdm9pZCBzeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3Qg
U3RyaW5nJiwgaW50Jik7CisKKyAgICB2b2lkIGdldExvYWREZWNpc2lvbkZvckljb25VUkwoY29u
c3QgU3RyaW5nJiwgdWludDY0X3QpOworCisgICAgLy8gV2ViSWNvbkRhdGFiYXNlSW1wbENsaWVu
dAorICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvbkRhdGFGb3JJY29uVVJMKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQWxsSWNvbnMoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoVVJMSW1wb3J0KCk7CiAKKyAgICAKICAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIENvcmVJUEM6OlN5bmNSZXBseU1vZGUgZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciop
OwogCkBAIC03NSw3ICs5MCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZVdlYklj
b25EYXRhYmFzZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgQ29yZUlQQzo6U3luY1JlcGx5TW9k
ZSBkaWRSZWNlaXZlU3luY1dlYkljb25EYXRhYmFzZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyKik7CiAKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IG1f
cGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcDsKKyAgICAKICAgICBXZWJDb250ZXh0KiBtX3dlYkNv
bnRleHQ7CisgICAgT3duUHRyPFdlYkljb25EYXRhYmFzZUltcGw+IG1faWNvbkRhdGFiYXNlOwor
ICAgIGJvb2wgbV91cmxJbXBvcnRDb21wbGV0ZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRh
YmFzZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
NSArMjEsMTYgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogbWVzc2FnZXMgLT4gV2ViSWNvbkRhdGFiYXNl
IHsKLSAgICBJY29uRGF0YUZvclBhZ2VVUkwoV1RGOjpTdHJpbmcgcGFnZVVSTCkgLT4gKENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UgaWNvbkRhdGEpCiAgICAgCiAgICAgUmV0YWluSWNvbkZvclBhZ2VV
UkwoV1RGOjpTdHJpbmcgcGFnZVVSTCkKICAgICBSZWxlYXNlSWNvbkZvclBhZ2VVUkwoV1RGOjpT
dHJpbmcgcGFnZVVSTCkKLSAgICAKLSAgICBJY29uVVJMRm9yUGFnZVVSTChXVEY6OlN0cmluZyBw
YWdlVVJMKSAtPiAoV1RGOjpTdHJpbmcgaWNvblVSTCkKLSAgICBJY29uRGF0YUtub3duRm9ySWNv
blVSTChXVEY6OlN0cmluZyBpY29uVVJMKSAtPiAoYm9vbCBkYXRhS25vd24pCi0gICAgTG9hZERl
Y2lzaW9uRm9ySWNvblVSTChXVEY6OlN0cmluZyBpY29uVVJMKSAtPiAoaW50IGxvYWREZWNpc2lv
bikKLSAgICAKICAgICBTZXRJY29uVVJMRm9yUGFnZVVSTChXVEY6OlN0cmluZyBpY29uVVJMLCBX
VEY6OlN0cmluZyBwYWdlVVJMKQogICAgIFNldEljb25EYXRhRm9ySWNvblVSTChDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlIGljb25EYXRhLCBXVEY6OlN0cmluZyBpY29uVVJMKQorCisgICAgU3luY2hy
b25vdXNJY29uRGF0YUZvclBhZ2VVUkwoV1RGOjpTdHJpbmcgcGFnZVVSTCkgLT4gKENvcmVJUEM6
OkRhdGFSZWZlcmVuY2UgaWNvbkRhdGEpCisgICAgU3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVS
TChXVEY6OlN0cmluZyBwYWdlVVJMKSAtPiAoV1RGOjpTdHJpbmcgaWNvblVSTCkKKyAgICBTeW5j
aHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29uVVJMKFdURjo6U3RyaW5nIGljb25VUkwpIC0+IChi
b29sIGRhdGFLbm93bikKKyAgICBTeW5jaHJvbm91c0xvYWREZWNpc2lvbkZvckljb25VUkwoV1RG
OjpTdHJpbmcgaWNvblVSTCkgLT4gKGludCBsb2FkRGVjaXNpb24pCisgICAgCisgICAgR2V0TG9h
ZERlY2lzaW9uRm9ySWNvblVSTChXVEY6OlN0cmluZyBpY29uVVJMLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZUlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2VJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2VJbXBsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTk0IEBACisv
Ly8qCisvLyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyAqCisvLyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy8vICogYXJlIG1ldDoK
Ky8vICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisvLyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAqCisvLyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKy8v
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKy8vICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisvLyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorLy8gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKy8vICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorLy8gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKy8vICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
Ly8gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorLy8gKi8KKy8v
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlSW1wbC5oIgor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJX
b3JrSXRlbS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JY29uUmVjb3JkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TdWRkZW5UZXJtaW5hdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUg
bWVhbnQgdG8gc3VwcG9ydCBBUEkgZnJvbSB0aGUgbWFpbiB0aHJlYWQgLSBzaG91bGQgbm90IGJl
IGNhbGxlZCBpbnRlcm5hbGx5CisjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKSBBU1NF
UlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJFQUQoKSkKKworLy8g
Rm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3luYyB0aHJlYWQgT05M
WQorI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVhZCA9PSBjdXJyZW50
VGhyZWFkKCkpCisjZGVmaW5lIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCkgQVNTRVJUKElTX0lD
T05fU1lOQ19USFJFQUQoKSkKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCisvLyBJY29ucyBleHBpcmUgb25jZSBldmVyeSA0IGRheXMKK3N0YXRpYyBj
b25zdCBpbnQgaWNvbkV4cGlyYXRpb25UaW1lID0gNjAqNjAqMjQqNDsKKworLy8gUHJ1bmluZyBv
ZiB1bnJldGFpbmVkIGljb25zIHdpbGwgb25seSBvY2N1ciB3aGVuIHRoaXMgY291bnRlciBpcyAw
CitzdGF0aWMgaW50IGRhdGFiYXNlQ2xlYW51cENvdW50ZXIgPSAwOworCisvLyBXZSBkZWZlciB0
aHJlYWQgaS9vIGFjdGl2aXR5IGZvciA1IHNlY29uZHMuCitzdGF0aWMgY29uc3QgaW50IHVwZGF0
ZVRpbWVyRGVsYXkgPSA1OyAKKworLy8gVGhpcyB2ZXJzaW9uIG51bWJlciBpcyBpbiB0aGUgREIg
YW5kIG1hcmtzIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gb2YgdGhlIHNjaGVtYQorLy8gQ3VycmVu
dGx5LCBhIG1pc21hdGNoZWQgc2NoZW1hIGNhdXNlcyB0aGUgREIgdG8gYmUgd2lwZWQgYW5kIHJl
c2V0LiAgVGhpcyBpc24ndCAKKy8vIHNvIGJhZCBkdXJpbmcgZGV2ZWxvcG1lbnQgYnV0IGluIHRo
ZSBmdXR1cmUsIHdlIHdvdWxkIG5lZWQgdG8gd3JpdGUgYSBjb252ZXJzaW9uCisvLyBmdW5jdGlv
biB0byBhZHZhbmNlIG9sZGVyIHJlbGVhc2VkIHNjaGVtYXMgdG8gImN1cnJlbnQiCitzdGF0aWMg
Y29uc3QgaW50IGN1cnJlbnREYXRhYmFzZVZlcnNpb24gPSA2OworCitzdGF0aWMgYm9vbCBjaGVj
a0ludGVncml0eU9uT3BlbiA9IGZhbHNlOworCisjaWZuZGVmIE5ERUJVRworc3RhdGljIFN0cmlu
ZyB1cmxGb3JMb2dnaW5nKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIHN0YXRpYyB1bnNpZ25l
ZCB1cmxUcnVuY2F0aW9uTGVuZ3RoID0gMTIwOworCisgICAgaWYgKHVybC5sZW5ndGgoKSA8IHVy
bFRydW5jYXRpb25MZW5ndGgpCisgICAgICAgIHJldHVybiB1cmw7CisgICAgcmV0dXJuIHVybC5z
dWJzdHJpbmcoMCwgdXJsVHJ1bmNhdGlvbkxlbmd0aCkgKyAiLi4uIjsKK30KKyNlbmRpZgorCisv
LyAqKioqKioqKioqKioqKioqKioqCisvLyAqKiogTWFpbiBUaHJlYWQgKioqCisvLyAqKioqKioq
KioqKioqKioqKioqCisKK1dlYkljb25EYXRhYmFzZUltcGw6OldlYkljb25EYXRhYmFzZUltcGwo
V2ViSWNvbkRhdGFiYXNlSW1wbENsaWVudCogY2xpZW50KQorICAgIDogbV9zeW5jVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY1RpbWVyRmlyZWQp
CisgICAgLCBtX3N5bmNUaHJlYWRSdW5uaW5nKGZhbHNlKQorICAgICwgbV9jbGllbnQoY2xpZW50
KQorICAgICwgbV9pc0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX3RocmVhZFRlcm1pbmF0aW9uUmVx
dWVzdGVkKGZhbHNlKQorICAgICwgbV9yZW1vdmVJY29uc1JlcXVlc3RlZChmYWxzZSkKKyAgICAs
IG1faWNvblVSTEltcG9ydENvbXBsZXRlKGZhbHNlKQorICAgICwgbV9kaXNhYmxlZFN1ZGRlblRl
cm1pbmF0aW9uRm9yU3luY1RocmVhZChmYWxzZSkKKyAgICAsIG1faW5pdGlhbFBydW5pbmdDb21w
bGV0ZShmYWxzZSkKKyAgICAsIG1faW1wb3J0ZWQoZmFsc2UpCisgICAgLCBtX2lzSW1wb3J0ZWRT
ZXQoZmFsc2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworV2ViSWNvbkRh
dGFiYXNlSW1wbDo6fldlYkljb25EYXRhYmFzZUltcGwoKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitib29sIFdlYkljb25EYXRhYmFzZUltcGw6OmlzT3BlbigpIGNvbnN0Cit7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xvY2spOworICAgIHJldHVybiBtX3N5bmNE
Qi5pc09wZW4oKTsKK30KKworYm9vbCBXZWJJY29uRGF0YWJhc2VJbXBsOjpvcGVuKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VQYXRoKQoreworICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKKwor
ICAgIGlmIChpc09wZW4oKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcmVvcGVu
IHRoZSBJY29uRGF0YWJhc2Ugd2hpY2ggaXMgYWxyZWFkeSBvcGVuLiAgTXVzdCBjbG9zZSBpdCBm
aXJzdC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fY29tcGxldGVE
YXRhYmFzZVBhdGggPSBkYXRhYmFzZVBhdGguY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyAgICBtX2Rh
dGFiYXNlRGlyZWN0b3J5ID0gZGlyZWN0b3J5TmFtZShtX2NvbXBsZXRlRGF0YWJhc2VQYXRoKS5j
cm9zc1RocmVhZFN0cmluZygpOworCisgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3Qg
dGhpbmcgaW4gdGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVu
Y2UgdW50aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCisgICAgLy8gY29tcGxldGVzIGFuZCBt
X3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAorICAgIG1fc3luY0xvY2subG9jaygp
OworICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChXZWJJY29uRGF0YWJhc2VJbXBsOjpp
Y29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJLaXQyOiBJY29uRGF0YWJhc2Ui
KTsKKyAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhyZWFkOworICAgIG1fc3luY0xv
Y2sudW5sb2NrKCk7CisgICAgaWYgKCFtX3N5bmNUaHJlYWQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2VJbXBsOjpjbG9z
ZSgpCit7CisgICAgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpOworICAgIAorICAgIGlmIChtX3N5
bmNUaHJlYWRSdW5uaW5nKSB7CisgICAgICAgIC8vIFNldCB0aGUgZmxhZyB0byB0ZWxsIHRoZSBz
eW5jIHRocmVhZCB0byB3cmFwIGl0IHVwCisgICAgICAgIG1fdGhyZWFkVGVybWluYXRpb25SZXF1
ZXN0ZWQgPSB0cnVlOworCisgICAgICAgIC8vIFdha2UgdXAgdGhlIHN5bmMgdGhyZWFkIGlmIGl0
J3Mgd2FpdGluZworICAgICAgICB3YWtlU3luY1RocmVhZCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRvIHRlcm1pbmF0ZQorICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQsIDApOworICAgIH0KKworICAgIG1fc3luY1Ro
cmVhZFJ1bm5pbmcgPSBmYWxzZTsgICAgCisgICAgbV90aHJlYWRUZXJtaW5hdGlvblJlcXVlc3Rl
ZCA9IGZhbHNlOworICAgIG1fcmVtb3ZlSWNvbnNSZXF1ZXN0ZWQgPSBmYWxzZTsKKworICAgIG1f
c3luY0RCLmNsb3NlKCk7CisgICAgQVNTRVJUKCFpc09wZW4oKSk7Cit9CisKK0ljb25Mb2FkRGVj
aXNpb24gV2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY2hyb25vdXNMb2FkRGVjaXNpb25Gb3JJY29u
VVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCkKK3sKKyAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFE
KCk7CisKKyAgICBpZiAoIWlzT3BlbigpIHx8IGljb25VUkwuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gSWNvbkxvYWRObzsKKyAgICAKKyAgICAvLyBJZiB3ZSBoYXZlIGEgSWNvblJlY29yZCwg
aXQgc2hvdWxkIGFsc28gaGF2ZSBpdHMgdGltZVN0YW1wIG1hcmtlZCBiZWNhdXNlIHRoZXJlIGlz
IG9ubHkgdHdvIHRpbWVzIHdoZW4gd2UgY3JlYXRlIHRoZSBJY29uUmVjb3JkOgorICAgIC8vIDEg
LSBXaGVuIHdlIHJlYWQgdGhlIGljb24gdXJscyBmcm9tIGRpc2ssIGdldHRpbmcgdGhlIHRpbWVT
dGFtcCBhdCB0aGUgc2FtZSB0aW1lCisgICAgLy8gMiAtIFdoZW4gd2UgZ2V0IGEgbmV3IGljb24g
ZnJvbSB0aGUgbG9hZGVyLCBpbiB3aGljaCBjYXNlIHRoZSB0aW1lc3RhbXAgaXMgc2V0IGF0IHRo
YXQgdGltZQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdXJsQW5kSWNvbkxv
Y2spOworICAgICAgICBpZiAoSWNvblJlY29yZCogaWNvbiA9IG1faWNvblVSTFRvUmVjb3JkTWFw
LmdldChpY29uVVJMKSkgeworICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkZvdW5kIGV4
cGlyYXRpb24gdGltZSBvbiBhIHByZXNlbnQgaWNvbiBiYXNlZCBvbiBleGlzdGluZyBJY29uUmVj
b3JkIik7CisgICAgICAgICAgICByZXR1cm4gKGludCljdXJyZW50VGltZSgpIC0gaWNvbi0+Z2V0
VGltZXN0YW1wKCkgPiBpY29uRXhwaXJhdGlvblRpbWUgPyBJY29uTG9hZFllcyA6IEljb25Mb2Fk
Tm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJl
Y29yZCBmb3IgaXQsIGJ1dCB3ZSAqaGF2ZSogaW1wb3J0ZWQgYWxsIGljb25VUkxzIGZyb20gZGlz
aywgdGhlbiB3ZSBzaG91bGQgbG9hZCBpdCBub3cKKyAgICBNdXRleExvY2tlciByZWFkaW5nTG9j
a2VyKG1fcGVuZGluZ1JlYWRpbmdMb2NrKTsKKyAgICBpZiAobV9pY29uVVJMSW1wb3J0Q29tcGxl
dGUpCisgICAgICAgIHJldHVybiBJY29uTG9hZFllczsKKyAgICAgICAgCisgICAgLy8gT3RoZXJ3
aXNlIC0gc2luY2Ugd2UgcmVmdXNlIHRvIHBlcmZvcm0gSS9PIG9uIHRoZSBtYWluIHRocmVhZCB0
byBmaW5kIG91dCBmb3Igc3VyZSAtIHdlIHJldHVybiB0aGUgYW5zd2VyIHRoYXQgc2F5cworICAg
IC8vICJZb3UgbWlnaHQgYmUgYXNrZWQgdG8gbG9hZCB0aGlzIGxhdGVyLCBzbyBmbGFnIHRoYXQi
CisgICAgTE9HKEljb25EYXRhYmFzZSwgIkRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIGxvYWQgJXMg
b3Igbm90IiwgaWNvblVSTC51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBJY29uTG9hZFVu
a25vd247Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY1RpbWVyRmlyZWQoKQor
eworICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKKyAgICB3YWtlU3luY1RocmVhZCgpOwor
CisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24gaW4gdGhlCisgICAgLy8gc2NoZWR1bGVPckRlZmVyU3luY1RpbWVy
IGZ1bmN0aW9uLgorICAgIFdlYkNvcmU6OmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Cit9CisK
K3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6d2FrZVN5bmNUaHJlYWQoKQoreworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKKworICAgIGlmICghbV9kaXNhYmxlZFN1ZGRlblRl
cm1pbmF0aW9uRm9yU3luY1RocmVhZCkgeworICAgICAgICBtX2Rpc2FibGVkU3VkZGVuVGVybWlu
YXRpb25Gb3JTeW5jVGhyZWFkID0gdHJ1ZTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBi
YWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAg
ICAgICAgLy8gc3luY1RocmVhZE1haW5Mb29wIGZ1bmN0aW9uLgorICAgICAgICBXZWJDb3JlOjpk
aXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB9CisKKyAgICBtX3N5bmNDb25kaXRpb24u
c2lnbmFsKCk7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6ZGlzcGF0Y2hEaWRJbXBv
cnRJY29uRm9yUGFnZVVSTChTdHJpbmcgcGFnZVVSTCkKK3sKKyAgICBBU1NFUlRfTk9UX1NZTkNf
VEhSRUFEKCk7CisgICAgbV9jbGllbnQtPmRpZEltcG9ydEljb25VUkxGb3JQYWdlVVJMKHBhZ2VV
UkwpOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OmRpc3BhdGNoRGlkQ2hhbmdlSWNv
bkZvclBhZ2VVUkwoU3RyaW5nIHBhZ2VVUkwpCit7CisgICAgQVNTRVJUX05PVF9TWU5DX1RIUkVB
RCgpOworICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKK30K
Kwordm9pZCBXZWJJY29uRGF0YWJhc2VJbXBsOjpkaXNwYXRjaERpZFJlbW92ZUFsbEljb25zKCkK
K3sKKyAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFEKCk7CisgICAgbV9jbGllbnQtPmRpZFJlbW92
ZUFsbEljb25zKCk7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6ZGlzcGF0Y2hEaWRG
aW5pc2hVUkxJbXBvcnQoKQoreworICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKKyAgICBt
X2NsaWVudC0+ZGlkRmluaXNoVVJMSW1wb3J0KCk7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNl
SW1wbDo6c2V0SWNvbkRhdGFGb3JJY29uVVJMKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
T3JpZ2luYWwsIGNvbnN0IFN0cmluZyYgaWNvblVSTE9yaWdpbmFsKQoreyAgICAKKyAgICBBU1NF
UlRfTk9UX1NZTkNfVEhSRUFEKCk7CisgICAgCisgICAgLy8gQ2Fubm90IGRvIGFueXRoaW5nIHdp
dGggZGF0YU9yaWdpbmFsIG9yIGljb25VUkxPcmlnaW5hbCB0aGF0IHdvdWxkIGVuZCB1cCBzdG9y
aW5nIHRoZW0gd2l0aG91dCBkZWVwIGNvcHlpbmcgZmlyc3QKKyAgICAKKyAgICBpZiAoIWlzT3Bl
bigpIHx8IGljb25VUkxPcmlnaW5hbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gZGF0YU9yaWdpbmFsID8gZGF0YU9yaWdp
bmFsLT5jb3B5KCkgOiAwOworICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVSTE9yaWdpbmFsLmNy
b3NzVGhyZWFkU3RyaW5nKCk7CisgICAgCisgICAgVmVjdG9yPFN0cmluZz4gcGFnZVVSTHM7Cisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV91cmxBbmRJY29uTG9jayk7CisgICAg
CisgICAgICAgIC8vIElmIHRoaXMgaWNvbiB3YXMgcGVuZGluZyBhIHJlYWQsIHJlbW92ZSBpdCBm
cm9tIHRoYXQgc2V0IGJlY2F1c2UgdGhpcyBuZXcgZGF0YSBzaG91bGQgb3ZlcnJpZGUgd2hhdCBp
cyBvbiBkaXNrCisgICAgICAgIFJlZlB0cjxJY29uUmVjb3JkPiBpY29uID0gbV9pY29uVVJMVG9S
ZWNvcmRNYXAuZ2V0KGljb25VUkwpOworICAgICAgICBpZiAoaWNvbikgeworICAgICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGluZ1JlYWRpbmdMb2NrKTsKKyAgICAgICAgICAgIG1f
aWNvbnNQZW5kaW5nUmVhZGluZy5yZW1vdmUoaWNvbi5nZXQoKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgaWNvbiA9IGdldE9yQ3JlYXRlSWNvblJlY29yZChpY29uVVJMKTsKKyAgICAK
KyAgICAgICAgLy8gVXBkYXRlIHRoZSBkYXRhIGFuZCBzZXQgdGhlIHRpbWUgc3RhbXAKKyAgICAg
ICAgaWNvbi0+c2V0SW1hZ2VEYXRhKGRhdGEpOworICAgICAgICBpY29uLT5zZXRUaW1lc3RhbXAo
KGludCljdXJyZW50VGltZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIGN1cnJl
bnQgcmV0YWluaW5nIHBhZ2VVUkxzIC0gaWYgYW55IC0gdG8gbm90aWZ5IHRoZW0gb2YgdGhlIGNo
YW5nZQorICAgICAgICBwYWdlVVJMcy5hcHBlbmRSYW5nZShpY29uLT5yZXRhaW5pbmdQYWdlVVJM
cygpLmJlZ2luKCksIGljb24tPnJldGFpbmluZ1BhZ2VVUkxzKCkuZW5kKCkpOworICAgICAgICAK
KyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGluZ1N5bmNM
b2NrKTsKKyAgICAgICAgICAgIG1faWNvbnNQZW5kaW5nU3luYy5zZXQoaWNvblVSTCwgaWNvbi0+
c25hcHNob3QoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWNvbi0+aGFzT25lUmVmKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChpY29uLT5yZXRhaW5pbmdQYWdlVVJMcygpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiSWNvbiBmb3IgaWNvbiB1cmwgJXMg
aXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkIC0gcmVtb3ZpbmcgbWFwcGluZyBmb3IgaXQiLCB1cmxG
b3JMb2dnaW5nKGljb24tPmljb25VUkwoKSkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAg
bV9pY29uVVJMVG9SZWNvcmRNYXAucmVtb3ZlKGljb24tPmljb25VUkwoKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbiBvdXQgcmVnYXJkaW5nIGFsbCBQYWdl
VVJMcyB0aGF0IHJldGFpbiB0aGlzIGljb24KKyAgICAvLyBCdXQgbm90IGlmIHdlJ3JlIG9uIHRo
ZSBzeW5jIHRocmVhZCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGlzIG1hcHBpbmcKKyAgICAvLyBj
b21lcyBmcm9tIHRoZSBpbml0aWFsIGltcG9ydCB3aGljaCB3ZSBkb24ndCB3YW50IG5vdGlmaWNh
dGlvbnMgZm9yCisgICAgaWYgKCFJU19JQ09OX1NZTkNfVEhSRUFEKCkpIHsKKyAgICAgICAgLy8g
U3RhcnQgdGhlIHRpbWVyIHRvIGNvbW1pdCB0aGlzIGNoYW5nZSAtIG9yIGZ1cnRoZXIgZGVsYXkg
dGhlIHRpbWVyIGlmIGl0IHdhcyBhbHJlYWR5IHN0YXJ0ZWQKKyAgICAgICAgc2NoZWR1bGVPckRl
ZmVyU3luY1RpbWVyKCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZ2VV
UkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRGlzcGF0
Y2hpbmcgbm90aWZpY2F0aW9uIHRoYXQgcmV0YWluaW5nIHBhZ2VVUkwgJXMgaGFzIGEgbmV3IGlj
b24iLCB1cmxGb3JMb2dnaW5nKHBhZ2VVUkxzW2ldKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMs
ICZXZWJJY29uRGF0YWJhc2VJbXBsOjpkaXNwYXRjaERpZENoYW5nZUljb25Gb3JQYWdlVVJMLCBw
YWdlVVJMc1tpXSkpOworICAgICAgICB9CisgICAgfQorfQorICAgIAordm9pZCBXZWJJY29uRGF0
YWJhc2VJbXBsOjpzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkxPcmln
aW5hbCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMT3JpZ2luYWwpCit7ICAgIAorICAgIEFTU0VSVF9O
T1RfU1lOQ19USFJFQUQoKTsKKworICAgIC8vIENhbm5vdCBkbyBhbnl0aGluZyB3aXRoIGljb25V
UkxPcmlnaW5hbCBvciBwYWdlVVJMT3JpZ2luYWwgdGhhdCB3b3VsZCBlbmQgdXAgc3RvcmluZyB0
aGVtIHdpdGhvdXQgZGVlcCBjb3B5aW5nIGZpcnN0CisgICAgCisgICAgQVNTRVJUKCFpY29uVVJM
T3JpZ2luYWwuaXNFbXB0eSgpKTsKKyAgICAgICAgCisgICAgaWYgKCFpc09wZW4oKSB8fCBwYWdl
VVJMT3JpZ2luYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5n
IGljb25VUkwsIHBhZ2VVUkw7CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV91cmxBbmRJY29uTG9jayk7CisKKyAgICAgICAgUGFnZVVSTFJlY29yZCogcGFnZVJlY29y
ZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmdldChwYWdlVVJMT3JpZ2luYWwpOworICAgICAgICAK
KyAgICAgICAgLy8gSWYgdGhlIHVybHMgYWxyZWFkeSBtYXAgdG8gZWFjaCBvdGhlciwgYmFpbC4K
KyAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHN1cnByaXNpbmdseSBvZnRlbiwgYW5kIHNlZW1zIHRv
IGNyZWFtIGlCZW5jaCBwZXJmb3JtYW5jZQorICAgICAgICBpZiAocGFnZVJlY29yZCAmJiBwYWdl
UmVjb3JkLT5pY29uUmVjb3JkKCkgJiYgcGFnZVJlY29yZC0+aWNvblJlY29yZCgpLT5pY29uVVJM
KCkgPT0gaWNvblVSTE9yaWdpbmFsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIHBhZ2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsK
KyAgICAgICAgaWNvblVSTCA9IGljb25VUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOwor
CisgICAgICAgIGlmICghcGFnZVJlY29yZCkgeworICAgICAgICAgICAgcGFnZVJlY29yZCA9IG5l
dyBQYWdlVVJMUmVjb3JkKHBhZ2VVUkwpOworICAgICAgICAgICAgbV9wYWdlVVJMVG9SZWNvcmRN
YXAuc2V0KHBhZ2VVUkwsIHBhZ2VSZWNvcmQpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRy
PEljb25SZWNvcmQ+IGljb25SZWNvcmQgPSBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCk7CisKKyAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIG5ldyBpY29uIHJlY29yZCBmb3IgdGhpcyBwYWdl
CisgICAgICAgIHBhZ2VSZWNvcmQtPnNldEljb25SZWNvcmQoZ2V0T3JDcmVhdGVJY29uUmVjb3Jk
KGljb25VUkwpKTsKKworICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBpY29uIGhhcyBvbmx5IGEg
c2luZ2xlIHJlZiBsZWZ0LCBpdCBpcyBhYm91dCB0byBnZXQgd2lwZWQgb3V0LiAKKyAgICAgICAg
Ly8gUmVtb3ZlIGl0IGZyb20gdGhlIGluLW1lbW9yeSByZWNvcmRzIGFuZCBkb24ndCBib3RoZXIg
cmVhZGluZyBpdCBpbiBmcm9tIGRpc2sgYW55bW9yZQorICAgICAgICBpZiAoaWNvblJlY29yZCAm
JiBpY29uUmVjb3JkLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgQVNTRVJUKGljb25SZWNv
cmQtPnJldGFpbmluZ1BhZ2VVUkxzKCkuc2l6ZSgpID09IDApOworICAgICAgICAgICAgTE9HKElj
b25EYXRhYmFzZSwgIkljb24gZm9yIGljb24gdXJsICVzIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3ll
ZCAtIHJlbW92aW5nIG1hcHBpbmcgZm9yIGl0IiwgdXJsRm9yTG9nZ2luZyhpY29uUmVjb3JkLT5p
Y29uVVJMKCkpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1faWNvblVSTFRvUmVjb3Jk
TWFwLnJlbW92ZShpY29uUmVjb3JkLT5pY29uVVJMKCkpOworICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fcGVuZGluZ1JlYWRpbmdMb2NrKTsKKyAgICAgICAgICAgIG1faWNvbnNQZW5k
aW5nUmVhZGluZy5yZW1vdmUoaWNvblJlY29yZC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEFuZCBtYXJrIHRoaXMgbWFwcGluZyB0byBiZSBhZGRlZCB0byB0aGUgZGF0
YWJhc2UKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGlu
Z1N5bmNMb2NrKTsKKyAgICAgICAgICAgIG1fcGFnZVVSTHNQZW5kaW5nU3luYy5zZXQocGFnZVVS
TCwgcGFnZVJlY29yZC0+c25hcHNob3QoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHRoZSBpY29uIGlzIG9uIGl0cyBsYXN0IHJlZiwgbWFyayBpdCBmb3IgZGVsZXRpb24KKyAg
ICAgICAgICAgIGlmIChpY29uUmVjb3JkICYmIGljb25SZWNvcmQtPmhhc09uZVJlZigpKQorICAg
ICAgICAgICAgICAgIG1faWNvbnNQZW5kaW5nU3luYy5zZXQoaWNvblJlY29yZC0+aWNvblVSTCgp
LCBpY29uUmVjb3JkLT5zbmFwc2hvdCh0cnVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBTaW5jZSB0aGlzIG1hcHBpbmcgaXMgbmV3LCBzZW5kIHRoZSBub3RpZmljYXRpb24gb3V0IC0g
YnV0IG5vdCBpZiB3ZSdyZSBvbiB0aGUgc3luYyB0aHJlYWQgYmVjYXVzZSB0aGF0IGltcGxpZXMg
dGhpcyBtYXBwaW5nCisgICAgLy8gY29tZXMgZnJvbSB0aGUgaW5pdGlhbCBpbXBvcnQgd2hpY2gg
d2UgZG9uJ3Qgd2FudCBub3RpZmljYXRpb25zIGZvcgorICAgIGlmICghSVNfSUNPTl9TWU5DX1RI
UkVBRCgpKSB7CisgICAgICAgIC8vIFN0YXJ0IHRoZSB0aW1lciB0byBjb21taXQgdGhpcyBjaGFu
Z2UgLSBvciBmdXJ0aGVyIGRlbGF5IHRoZSB0aW1lciBpZiBpdCB3YXMgYWxyZWFkeSBzdGFydGVk
CisgICAgICAgIHNjaGVkdWxlT3JEZWZlclN5bmNUaW1lcigpOworICAgICAgICAKKyAgICAgICAg
TE9HKEljb25EYXRhYmFzZSwgIkRpc3BhdGNoaW5nIG5vdGlmaWNhdGlvbiB0aGF0IHdlIGNoYW5n
ZWQgYW4gaWNvbiBtYXBwaW5nIGZvciB1cmwgJXMiLCB1cmxGb3JMb2dnaW5nKHBhZ2VVUkwpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZGlzcGF0Y2hEaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChw
YWdlVVJMKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6c2NoZWR1bGVP
ckRlZmVyU3luY1RpbWVyKCkKK3sKKyAgICBBU1NFUlRfTk9UX1NZTkNfVEhSRUFEKCk7CisKKyAg
ICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0
aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIFdlYkNvcmU6
OmRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KKworICAgIG1fc3luY1RpbWVyLnN0
YXJ0T25lU2hvdCh1cGRhdGVUaW1lckRlbGF5KTsKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2VJ
bXBsOjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkxPcmlnaW5hbCkK
K3sgICAgCisgICAgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpOworICAgIAorICAgIC8vIENhbm5v
dCBkbyBhbnl0aGluZyB3aXRoIHBhZ2VVUkxPcmlnaW5hbCB0aGF0IHdvdWxkIGVuZCB1cCBzdG9y
aW5nIGl0IHdpdGhvdXQgZGVlcCBjb3B5aW5nIGZpcnN0CisgICAgaWYgKHBhZ2VVUkxPcmlnaW5h
bC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgIAorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3VybEFuZEljb25Mb2NrKTsKKworICAgIFBhZ2VVUkxSZWNvcmQqIHJl
Y29yZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmdldChwYWdlVVJMT3JpZ2luYWwpOworICAgIAor
ICAgIFN0cmluZyBwYWdlVVJMOworICAgIAorICAgIGlmICghcmVjb3JkKSB7CisgICAgICAgIHBh
Z2VVUkwgPSBwYWdlVVJMT3JpZ2luYWwuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKworICAgICAgICBy
ZWNvcmQgPSBuZXcgUGFnZVVSTFJlY29yZChwYWdlVVJMKTsKKyAgICAgICAgbV9wYWdlVVJMVG9S
ZWNvcmRNYXAuc2V0KHBhZ2VVUkwsIHJlY29yZCk7CisgICAgfQorCisgICAgaWYgKCFyZWNvcmQt
PnJldGFpbigpKSB7CisgICAgICAgIGlmIChwYWdlVVJMLmlzTnVsbCgpKQorICAgICAgICAgICAg
cGFnZVVSTCA9IHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVhZFN0cmluZygpOworCisgICAgICAg
IC8vIFRoaXMgcGFnZSBqdXN0IGhhZCBpdHMgcmV0YWluIGNvdW50IGJ1bXBlZCBmcm9tIDAgdG8g
MSAtIFJlY29yZCB0aGF0IGZhY3QKKyAgICAgICAgbV9yZXRhaW5lZFBhZ2VVUkxzLmFkZChwYWdl
VVJMKTsKKworICAgICAgICAvLyBJZiB3ZSByZWFkIHRoZSBpY29uVVJMcyB5ZXQsIHdlIHdhbnQg
dG8gYXZvaWQgYW55IHBhZ2VVUkwtPmljb25VUkwgbG9va3VwcyBhbmQgdGhlIHBhZ2VVUkxzUGVu
ZGluZ0RlbGV0aW9uIGlzIG1vb3QsIAorICAgICAgICAvLyBzbyB3ZSBiYWlsIGhlcmUgYW5kIHNr
aXAgdGhvc2Ugc3RlcHMKKyAgICAgICAgaWYgKCFtX2ljb25VUkxJbXBvcnRDb21wbGV0ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5kaW5n
U3luY0xvY2spOworICAgICAgICAvLyBJZiB0aGlzIHBhZ2VVUkwgd2FpdGluZyB0byBiZSBzeW5j
J2VkLCB1cGRhdGUgdGhlIHN5bmMgcmVjb3JkCisgICAgICAgIC8vIFRoaXMgc2F2ZXMgdXMgaW4g
dGhlIGNhc2Ugd2hlcmUgYSBwYWdlIHdhcyByZWFkeSB0byBiZSBkZWxldGVkIGZyb20gdGhlIGRh
dGFiYXNlIGJ1dCB3YXMganVzdCByZXRhaW5lZCAtIHNvIHRoZXJlcyBubyBuZWVkIHRvIGRlbGV0
ZSBpdCEKKyAgICAgICAgaWYgKG1fcGFnZVVSTHNQZW5kaW5nU3luYy5jb250YWlucyhwYWdlVVJM
KSkgeworICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkJyaW5naW5nICVzIGJhY2sgZnJv
bSB0aGUgYnJpbmsiLCBwYWdlVVJMLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcGFn
ZVVSTHNQZW5kaW5nU3luYy5zZXQocGFnZVVSTCwgcmVjb3JkLT5zbmFwc2hvdCgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIExPRyhJY29uRGF0YWJhc2UsICJKdXN0IHJldGFpbmVkIHBhZ2Ug
VVJMICVzIiwgcGFnZVVSTC5hc2NpaSgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFi
YXNlSW1wbDo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTE9yaWdp
bmFsKQoreworICAgIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKTsKKyAgICAgICAgCisgICAgLy8g
Q2Fubm90IGRvIGFueXRoaW5nIHdpdGggcGFnZVVSTE9yaWdpbmFsIHRoYXQgd291bGQgZW5kIHVw
IHN0b3JpbmcgaXQgd2l0aG91dCBkZWVwIGNvcHlpbmcgZmlyc3QKKyAgICAKKyAgICBpZiAocGFn
ZVVSTE9yaWdpbmFsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3VybEFuZEljb25Mb2NrKTsKKworICAgIC8vIENoZWNrIGlmIHRoaXMg
cGFnZVVSTCBpcyBhY3R1YWxseSByZXRhaW5lZAorICAgIGlmICghbV9yZXRhaW5lZFBhZ2VVUkxz
LmNvbnRhaW5zKHBhZ2VVUkxPcmlnaW5hbCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0
aW5nIHRvIHJlbGVhc2UgaWNvbiBmb3IgVVJMICVzIHdoaWNoIGlzIG5vdCByZXRhaW5lZCIsIHVy
bEZvckxvZ2dpbmcocGFnZVVSTE9yaWdpbmFsKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgLy8gR2V0IGl0cyByZXRhaW4gY291bnQgLSBpZiBpdCdz
IHJldGFpbmVkLCB3ZSdkIGJldHRlciBoYXZlIGEgUGFnZVVSTFJlY29yZCBmb3IgaXQKKyAgICBQ
YWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0gbV9wYWdlVVJMVG9SZWNvcmRNYXAuZ2V0KHBhZ2VV
UkxPcmlnaW5hbCk7CisgICAgQVNTRVJUKHBhZ2VSZWNvcmQpOworICAgIExPRyhJY29uRGF0YWJh
c2UsICJSZWxlYXNpbmcgcGFnZVVSTCAlcyB0byBhIHJldGFpbiBjb3VudCBvZiAlaSIsIHVybEZv
ckxvZ2dpbmcocGFnZVVSTE9yaWdpbmFsKS5hc2NpaSgpLmRhdGEoKSwgcGFnZVJlY29yZC0+cmV0
YWluQ291bnQoKSAtIDEpOworICAgIEFTU0VSVChwYWdlUmVjb3JkLT5yZXRhaW5Db3VudCgpID4g
MCk7CisgICAgICAgIAorICAgIC8vIElmIGl0IHN0aWxsIGhhcyBhIHBvc2l0aXZlIHJldGFpbiBj
b3VudCwgc3RvcmUgdGhlIG5ldyBjb3VudCBhbmQgYmFpbAorICAgIGlmIChwYWdlUmVjb3JkLT5y
ZWxlYXNlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gVGhpcyBwYWdlUmVj
b3JkIGhhcyBub3cgYmVlbiBmdWxseSByZWxlYXNlZC4gIERvIHRoZSBhcHByb3ByaWF0ZSBjbGVh
bnVwCisgICAgTE9HKEljb25EYXRhYmFzZSwgIk5vIG1vcmUgcmV0YWluZXJzIGZvciBQYWdlVVJM
ICVzIiwgdXJsRm9yTG9nZ2luZyhwYWdlVVJMT3JpZ2luYWwpLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICBtX3BhZ2VVUkxUb1JlY29yZE1hcC5yZW1vdmUocGFnZVVSTE9yaWdpbmFsKTsKKyAgICBtX3Jl
dGFpbmVkUGFnZVVSTHMucmVtb3ZlKHBhZ2VVUkxPcmlnaW5hbCk7ICAgICAgIAorICAgIAorICAg
IC8vIEdyYWIgdGhlIGljb25SZWNvcmQgZm9yIGxhdGVyIHVzZSAoYW5kIGRvIGEgc2FuaXR5IGNo
ZWNrIG9uIGl0IGZvciBraWNrcykKKyAgICBJY29uUmVjb3JkKiBpY29uUmVjb3JkID0gcGFnZVJl
Y29yZC0+aWNvblJlY29yZCgpOworICAgIAorICAgIEFTU0VSVCghaWNvblJlY29yZCB8fCAoaWNv
blJlY29yZCAmJiBtX2ljb25VUkxUb1JlY29yZE1hcC5nZXQoaWNvblJlY29yZC0+aWNvblVSTCgp
KSA9PSBpY29uUmVjb3JkKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3BlbmRpbmdSZWFkaW5nTG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB0aGlzIHBh
Z2VVUkwgaXMgZ29pbmcgYXdheSwgdGhlcmUncyBubyByZWFzb24gYW55b25lIHdvdWxkIGV2ZXIg
YmUgaW50ZXJlc3RlZCBpbiBpdHMgcmVhZCByZXN1bHRzICAgIAorICAgICAgICBpZiAoIW1faWNv
blVSTEltcG9ydENvbXBsZXRlKQorICAgICAgICAgICAgbV9wYWdlVVJMc1BlbmRpbmdJbXBvcnQu
cmVtb3ZlKHBhZ2VVUkxPcmlnaW5hbCk7CisgICAgICAgIG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5J
Y29ucy5yZW1vdmUocGFnZVVSTE9yaWdpbmFsKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRo
aXMgaWNvbiBpcyBkb3duIHRvIGl0J3MgbGFzdCByZXRhaW5lciwgd2UgZG9uJ3QgY2FyZSBhYm91
dCByZWFkaW5nIGl0IGluIGZyb20gZGlzayBhbnltb3JlCisgICAgICAgIGlmIChpY29uUmVjb3Jk
ICYmIGljb25SZWNvcmQtPmhhc09uZVJlZigpKSB7CisgICAgICAgICAgICBtX2ljb25VUkxUb1Jl
Y29yZE1hcC5yZW1vdmUoaWNvblJlY29yZC0+aWNvblVSTCgpKTsKKyAgICAgICAgICAgIG1faWNv
bnNQZW5kaW5nUmVhZGluZy5yZW1vdmUoaWNvblJlY29yZCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gTWFyayBzdHVmZiBmb3IgZGVsZXRpb24gZnJvbSB0aGUgZGF0YWJhc2UuCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5kaW5nU3luY0xvY2spOworICAg
ICAgICBtX3BhZ2VVUkxzUGVuZGluZ1N5bmMuc2V0KHBhZ2VVUkxPcmlnaW5hbC5jcm9zc1RocmVh
ZFN0cmluZygpLCBwYWdlUmVjb3JkLT5zbmFwc2hvdCh0cnVlKSk7CisgICAgCisgICAgICAgIC8v
IElmIHRoaXMgcGFnZSBpcyB0aGUgbGFzdCBwYWdlIHRvIHJlZmVyIHRvIGEgcGFydGljdWxhciBJ
Y29uUmVjb3JkLCB0aGF0IEljb25SZWNvcmQgbmVlZHMgdG8KKyAgICAgICAgLy8gYmUgbWFya2Vk
IGZvciBkZWxldGlvbgorICAgICAgICBpZiAoaWNvblJlY29yZCAmJiBpY29uUmVjb3JkLT5oYXNP
bmVSZWYoKSkKKyAgICAgICAgICAgIG1faWNvbnNQZW5kaW5nU3luYy5zZXQoaWNvblJlY29yZC0+
aWNvblVSTCgpLCBpY29uUmVjb3JkLT5zbmFwc2hvdCh0cnVlKSk7CisgICAgfQorICAgIAorICAg
IGRlbGV0ZSBwYWdlUmVjb3JkOworCisgICAgaWYgKGlzT3BlbigpKQorICAgICAgICBzY2hlZHVs
ZU9yRGVmZXJTeW5jVGltZXIoKTsKKworICAgIExPRyhJY29uRGF0YWJhc2UsICJKdXN0IHJlbGVh
c2VkIHBhZ2UgVVJMICVzIiwgcGFnZVVSTE9yaWdpbmFsLmFzY2lpKCkuZGF0YSgpKTsKKworfQor
CisvLyAqKioqKioqKioqKioqKioqKioqCisvLyAqKiogU3luYyBUaHJlYWQgKioqCisvLyAqKioq
KioqKioqKioqKioqKioqCisKK3ZvaWQqIFdlYkljb25EYXRhYmFzZUltcGw6Omljb25EYXRhYmFz
ZVN5bmNUaHJlYWRTdGFydCh2b2lkKiB2SWNvbkRhdGFiYXNlKQoreyAgICAKKyAgICBXZWJJY29u
RGF0YWJhc2VJbXBsKiBpY29uREIgPSBzdGF0aWNfY2FzdDxXZWJJY29uRGF0YWJhc2VJbXBsKj4o
dkljb25EYXRhYmFzZSk7CisgICAgCisgICAgcmV0dXJuIGljb25EQi0+aWNvbkRhdGFiYXNlU3lu
Y1RocmVhZCgpOworfQorCit2b2lkKiBXZWJJY29uRGF0YWJhc2VJbXBsOjppY29uRGF0YWJhc2VT
eW5jVGhyZWFkKCkKK3sKKyAgICAvLyBUaGUgY2FsbCB0byBjcmVhdGUgdGhpcyB0aHJlYWQgbWln
aHQgbm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgdGhyZWFkIGFjdHVhbGx5IHN0YXJ0cywgc28gd2Ug
bWlnaHQgZmFpbCB0aGlzIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCkgYmVjYXVzZSB0aGUgcG9p
bnRlciAKKyAgICAvLyB0byBvdXIgdGhyZWFkIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiBmaWxsZWQg
aW4geWV0LgorICAgIC8vIFRvIGZpeCB0aGlzLCB0aGUgbWFpbiB0aHJlYWQgYWNxdWlyZXMgdGhp
cyBsb2NrIGJlZm9yZSBjcmVhdGluZyB1cywgdGhlbiByZWxlYXNlcyB0aGUgbG9jayBhZnRlciBj
cmVhdGlvbiBpcyBjb21wbGV0ZS4gIEEgcXVpY2sgbG9jay91bmxvY2sgY3ljbGUgaGVyZSB3aWxs
IAorICAgIC8vIHByZXZlbnQgdXMgZnJvbSBydW5uaW5nIGJlZm9yZSB0aGF0IGNhbGwgY29tcGxl
dGVzCisgICAgbV9zeW5jTG9jay5sb2NrKCk7CisgICAgbV9zeW5jTG9jay51bmxvY2soKTsKKwor
ICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisgICAgCisgICAgTE9HKEljb25EYXRhYmFz
ZSwgIihUSFJFQUQpIEljb25EYXRhYmFzZSBzeW5jIHRocmVhZCBzdGFydGVkIik7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisjZW5kaWYK
KworICAgIC8vIE5lZWQgdG8gY3JlYXRlIHRoZSBkYXRhYmFzZSBwYXRoIGlmIGl0IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdAorICAgIG1ha2VBbGxEaXJlY3RvcmllcyhtX2RhdGFiYXNlRGlyZWN0b3J5
KTsKKworICAgIC8vIEV4aXN0ZW5jZSBvZiBhIGpvdXJuYWwgZmlsZSBpcyBldmlkZW5jZSBvZiBh
IHByZXZpb3VzIGNyYXNoL2ZvcmNlIHF1aXQgYW5kIGF1dG9tYXRpY2FsbHkgcXVhbGlmaWVzCisg
ICAgLy8gdXMgdG8gZG8gYW4gaW50ZWdyaXR5IGNoZWNrCisgICAgU3RyaW5nIGpvdXJuYWxGaWxl
bmFtZSA9IG1fY29tcGxldGVEYXRhYmFzZVBhdGggKyAiLWpvdXJuYWwiOworICAgIGlmICghY2hl
Y2tJbnRlZ3JpdHlPbk9wZW4pCisgICAgICAgIGNoZWNrSW50ZWdyaXR5T25PcGVuID0gZmlsZUV4
aXN0cyhqb3VybmFsRmlsZW5hbWUpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fc3luY0xvY2spOworICAgICAgICBpZiAoIW1fc3luY0RCLm9wZW4obV9jb21wbGV0
ZURhdGFiYXNlUGF0aCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4g
aWNvbiBkYXRhYmFzZSBhdCBwYXRoICVzIC0gJXMiLCBtX2NvbXBsZXRlRGF0YWJhc2VQYXRoLmFz
Y2lpKCkuZGF0YSgpLCBtX3N5bmNEQi5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoc2hvdWxkU3RvcFRocmVhZEFj
dGl2aXR5KCkpCisgICAgICAgIHJldHVybiBzeW5jVGhyZWFkTWFpbkxvb3AoKTsKKyAgICAgICAg
CisjaWZuZGVmIE5ERUJVRworICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBjdXJyZW50VGltZSgpOwor
ICAgIExPRyhJY29uRGF0YWJhc2UsICIoVEhSRUFEKSBPcGVuIHRvb2sgJS40ZiBzZWNvbmRzIiwg
dGltZVN0YW1wIC0gc3RhcnRUaW1lKTsKKyNlbmRpZiAgICAKKworICAgIHBlcmZvcm1PcGVuSW5p
dGlhbGl6YXRpb24oKTsKKyAgICBpZiAoc2hvdWxkU3RvcFRocmVhZEFjdGl2aXR5KCkpCisgICAg
ICAgIHJldHVybiBzeW5jVGhyZWFkTWFpbkxvb3AoKTsKKyAgICAgICAgCisjaWZuZGVmIE5ERUJV
RworICAgIGRvdWJsZSBuZXdTdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisgICAgTE9HKEljb25EYXRh
YmFzZSwgIihUSFJFQUQpIHBlcmZvcm1PcGVuSW5pdGlhbGl6YXRpb24oKSB0b29rICUuNGYgc2Vj
b25kcywgbm93ICUuNGYgc2Vjb25kcyBmcm9tIHRocmVhZCBzdGFydCIsIG5ld1N0YW1wIC0gdGlt
ZVN0YW1wLCBuZXdTdGFtcCAtIHN0YXJ0VGltZSk7CisgICAgdGltZVN0YW1wID0gbmV3U3RhbXA7
CisjZW5kaWYgCisgICAgICAgIAorICAgIC8vIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUg
dG8gc2ltdWxhdGUgYSBsb25nIGxhc3RpbmcgVVJMIGltcG9ydCAoKkhVR0UqIGljb24gZGF0YWJh
c2VzLCBvciBuZXR3b3JrIGhvbWUgZGlyZWN0b3JpZXMpCisgICAgd2hpbGUgKGN1cnJlbnRUaW1l
KCkgLSB0aW1lU3RhbXAgPCAxMCk7CisKKyAgICAvLyBSZWFkIGluIFVSTCBtYXBwaW5ncyBmcm9t
IHRoZSBkYXRhYmFzZSAgICAgICAgICAKKyAgICBMT0coSWNvbkRhdGFiYXNlLCAiKFRIUkVBRCkg
U3RhcnRpbmcgaWNvblVSTCBpbXBvcnQiKTsKKyAgICBwZXJmb3JtVVJMSW1wb3J0KCk7CisgICAg
CisgICAgaWYgKHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgpKQorICAgICAgICByZXR1cm4gc3lu
Y1RocmVhZE1haW5Mb29wKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbmV3U3RhbXAgPSBjdXJy
ZW50VGltZSgpOworICAgIExPRyhJY29uRGF0YWJhc2UsICIoVEhSRUFEKSBwZXJmb3JtVVJMSW1w
b3J0KCkgdG9vayAlLjRmIHNlY29uZHMuICBFbnRlcmluZyBtYWluIGxvb3AgJS40ZiBzZWNvbmRz
IGZyb20gdGhyZWFkIHN0YXJ0IiwgbmV3U3RhbXAgLSB0aW1lU3RhbXAsIG5ld1N0YW1wIC0gc3Rh
cnRUaW1lKTsKKyNlbmRpZiAKKworICAgIExPRyhJY29uRGF0YWJhc2UsICIoVEhSRUFEKSBCZWdp
bm5pbmcgc3luYyIpOworICAgIHJldHVybiBzeW5jVGhyZWFkTWFpbkxvb3AoKTsKK30KKwordm9p
ZCBXZWJJY29uRGF0YWJhc2VJbXBsOjpwZXJmb3JtVVJMSW1wb3J0KCkKK3sKKyAgICBBU1NFUlRf
SUNPTl9TWU5DX1RIUkVBRCgpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fc3luY0RC
LCAiU0VMRUNUIFBhZ2VVUkwudXJsLCBJY29uSW5mby51cmwsIEljb25JbmZvLnN0YW1wIEZST00g
UGFnZVVSTCBJTk5FUiBKT0lOIEljb25JbmZvIE9OIFBhZ2VVUkwuaWNvbklEPUljb25JbmZvLmlj
b25JRDsiKTsKKyAgICAKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7
CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgaWNvbiB1cmwgaW1wb3J0IHF1
ZXJ5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGludCByZXN1bHQg
PSBxdWVyeS5zdGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAg
ICAgICAgU3RyaW5nIHBhZ2VVUkwgPSBxdWVyeS5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBT
dHJpbmcgaWNvblVSTCA9IHF1ZXJ5LmdldENvbHVtblRleHQoMSk7CisKKyAgICAgICAgeworICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdXJsQW5kSWNvbkxvY2spOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBQYWdlVVJMUmVjb3JkKiBwYWdlUmVjb3JkID0gbV9wYWdlVVJMVG9S
ZWNvcmRNYXAuZ2V0KHBhZ2VVUkwpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0
aGUgcGFnZVJlY29yZCBkb2Vzbid0IGV4aXN0IGluIHRoaXMgbWFwLCB0aGVuIG5vIG9uZSBoYXMg
cmV0YWluZWQgdGhpcyBwYWdlVVJMCisgICAgICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2VDbGVh
bnVwQ291bnRlciBjb3VudCBpcyBub24temVybywgdGhlbiB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8g
YmUgcHJ1bmluZyB0aGUgZGF0YWJhc2UgaW4gYW55IG1hbm5lciwKKyAgICAgICAgICAgIC8vIHNv
IGdvIGFoZWFkIGFuZCBhY3R1YWxseSBjcmVhdGUgYSBwYWdlVVJMUmVjb3JkIGZvciB0aGlzIHVy
bCBldmVuIHRob3VnaCBpdCdzIG5vdCByZXRhaW5lZC4KKyAgICAgICAgICAgIC8vIElmIGRhdGFi
YXNlIGNsZWFudXAgKmlzKiBhbGxvd2VkLCB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciBwdWxsaW5n
IGluIGEgcGFnZSB1cmwgZnJvbSBkaXNrIHRoYXQgbm9vbmUgaXMgYWN0dWFsbHkgaW50ZXJlc3Rl
ZAorICAgICAgICAgICAgLy8gaW4gLSB3ZSdsbCBwcnVuZSBpdCBsYXRlciBpbnN0ZWFkIQorICAg
ICAgICAgICAgaWYgKCFwYWdlUmVjb3JkICYmIGRhdGFiYXNlQ2xlYW51cENvdW50ZXIgJiYgIXBh
Z2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcGFnZVJlY29yZCA9IG5ldyBQYWdl
VVJMUmVjb3JkKHBhZ2VVUkwpOworICAgICAgICAgICAgICAgIG1fcGFnZVVSTFRvUmVjb3JkTWFw
LnNldChwYWdlVVJMLCBwYWdlUmVjb3JkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHBhZ2VSZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBJY29uUmVjb3Jk
KiBjdXJyZW50SWNvbiA9IHBhZ2VSZWNvcmQtPmljb25SZWNvcmQoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghY3VycmVudEljb24gfHwgY3VycmVudEljb24tPmljb25VUkwoKSAhPSBpY29uVVJM
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VSZWNvcmQtPnNldEljb25SZWNvcmQoZ2V0T3JD
cmVhdGVJY29uUmVjb3JkKGljb25VUkwpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudElj
b24gPSBwYWdlUmVjb3JkLT5pY29uUmVjb3JkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gUmVnYXJkbGVzcywgdGhlIHRpbWUgc3RhbXAgZnJv
bSBkaXNrIHN0aWxsIHRha2VzIHByZWNlZGVuY2UuICBVbnRpbCB3ZSByZWFkIHRoaXMgaWNvbiBm
cm9tIGRpc2ssIHdlIGRpZG4ndCB0aGluayB3ZSdkIHNlZW4gaXQgYmVmb3JlCisgICAgICAgICAg
ICAgICAgLy8gc28gd2UgbWFya2VkIHRoZSB0aW1lc3RhbXAgYXMgIm5vdyIsIGJ1dCBpdCdzIHJl
YWxseSBtdWNoIG9sZGVyCisgICAgICAgICAgICAgICAgY3VycmVudEljb24tPnNldFRpbWVzdGFt
cChxdWVyeS5nZXRDb2x1bW5JbnQoMikpOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVu
ZGluZ1JlYWRpbmdMb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VVUkxzUGVuZGluZ0ltcG9y
dC5jb250YWlucyhwYWdlVVJMKSkgeworICAgICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS0+
c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJldlYkljb25EYXRhYmFzZUltcGw6
OmRpc3BhdGNoRGlkSW1wb3J0SWNvbkZvclBhZ2VVUkwsIHBhZ2VVUkwpKTsKKyAgICAgICAgICAg
ICAgICBtX3BhZ2VVUkxzUGVuZGluZ0ltcG9ydC5yZW1vdmUocGFnZVVSTCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFN0b3AgdGhlIGltcG9ydCBhdCBh
bnkgdGltZSBvZiB0aGUgdGhyZWFkIGhhcyBiZWVuIGFza2VkIHRvIHNodXRkb3duCisgICAgICAg
IGlmIChzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHkoKSkgeworICAgICAgICAgICAgTE9HKEljb25E
YXRhYmFzZSwgIkljb25EYXRhYmFzZSBhc2tlZCB0byB0ZXJtaW5hdGUgZHVyaW5nIHBlcmZvcm1V
UkxJbXBvcnQoKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1
bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIkVycm9yIHJl
YWRpbmcgcGFnZS0+aWNvbiB1cmwgbWFwcGluZ3MgZnJvbSBkYXRhYmFzZSIpOworCisgICAgLy8g
Q2xlYXIgdGhlIG1fcGFnZVVSTHNQZW5kaW5nSW1wb3J0IHNldCAtIGVpdGhlciB0aGUgcGFnZSBV
UkxzIGVuZGVkIHVwIHdpdGggYW4gaWNvblVSTCAodGhhdCB3ZSdsbCBub3RpZnkgYWJvdXQpIG9y
IG5vdCwgCisgICAgLy8gYnV0IGFmdGVyIG1faWNvblVSTEltcG9ydENvbXBsZXRlIGlzIHNldCB0
byB0cnVlLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgc2V0IGFueW1vcmUKKyAgICBWZWN0b3I8
U3RyaW5nPiB1cmxzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGVuZGlu
Z1JlYWRpbmdMb2NrKTsKKworICAgICAgICB1cmxzLmFwcGVuZFJhbmdlKG1fcGFnZVVSTHNQZW5k
aW5nSW1wb3J0LmJlZ2luKCksIG1fcGFnZVVSTHNQZW5kaW5nSW1wb3J0LmVuZCgpKTsKKyAgICAg
ICAgbV9wYWdlVVJMc1BlbmRpbmdJbXBvcnQuY2xlYXIoKTsgICAgICAgIAorICAgICAgICBtX2lj
b25VUkxJbXBvcnRDb21wbGV0ZSA9IHRydWU7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTdHJp
bmc+IHVybHNUb05vdGlmeTsKKyAgICAKKyAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVybHMgcGVu
ZGluZyBpbXBvcnQKKyAgICAvLyBSZW1vdmUgdW5yZXRhaW5lZCBvbmVzIGlmIGRhdGFiYXNlIGNs
ZWFudXAgaXMgYWxsb3dlZAorICAgIC8vIEtlZXAgYSBzZXQgb2Ygb25lcyB0aGF0IGFyZSByZXRh
aW5lZCBhbmQgcGVuZGluZyBub3RpZmljYXRpb24KKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3VybEFuZEljb25Mb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IW1fcmV0YWluZWRQYWdlVVJMcy5jb250YWlucyh1cmxzW2ldKSkgeworICAgICAgICAgICAgICAg
IFBhZ2VVUkxSZWNvcmQqIHJlY29yZCA9IG1fcGFnZVVSTFRvUmVjb3JkTWFwLmdldCh1cmxzW2ld
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3JkICYmICFkYXRhYmFzZUNsZWFudXBDb3VudGVy
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFnZVVSTFRvUmVjb3JkTWFwLnJlbW92ZSh1cmxz
W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgSWNvblJlY29yZCogaWNvblJlY29yZCA9IHJlY29y
ZC0+aWNvblJlY29yZCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBwYWdlIGlzIHRoZSBvbmx5IHJlbWFpbmluZyByZXRhaW5lciBvZiBpdHMg
aWNvbiwgbWFyayB0aGF0IGljb24gZm9yIGRlbGV0aW9uIGFuZCBkb24ndCBib3RoZXIKKyAgICAg
ICAgICAgICAgICAgICAgLy8gcmVhZGluZyBhbnl0aGluZyByZWxhdGVkIHRvIGl0IAorICAgICAg
ICAgICAgICAgICAgICBpZiAoaWNvblJlY29yZCAmJiBpY29uUmVjb3JkLT5oYXNPbmVSZWYoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9pY29uVVJMVG9SZWNvcmRNYXAucmVtb3ZlKGlj
b25SZWNvcmQtPmljb25VUkwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9wZW5kaW5nUmVhZGluZ0xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29ucy5yZW1vdmUodXJsc1tpXSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pY29uc1BlbmRpbmdSZWFkaW5nLnJlbW92ZShpY29uUmVj
b3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5k
aW5nU3luY0xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faWNvbnNQZW5kaW5n
U3luYy5zZXQoaWNvblJlY29yZC0+aWNvblVSTCgpLCBpY29uUmVjb3JkLT5zbmFwc2hvdCh0cnVl
KSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIHJlY29yZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHVybHNUb05vdGlmeS5hcHBlbmQodXJsc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMT0coSWNvbkRhdGFiYXNlLCAiTm90aWZ5
aW5nICVsdSBpbnRlcmVzdGVkIHBhZ2UgVVJMcyB0aGF0IHRoZWlyIGljb24gVVJMIGlzIGtub3du
IGR1ZSB0byB0aGUgaW1wb3J0Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odXJsc1RvTm90
aWZ5LnNpemUoKSkpOworICAgIC8vIE5vdyB0aGF0IHdlIGRvbid0IGhvbGQgYW55IGxvY2tzLCBw
ZXJmb3JtIHRoZSBhY3R1YWwgbm90aWZpY2F0aW9ucworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB1cmxzVG9Ob3RpZnkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTE9HKEljb25EYXRhYmFz
ZSwgIk5vdGlmeWluZyBpY29uIGluZm8ga25vd24gZm9yIHBhZ2VVUkwgJXMiLCB1cmxzVG9Ob3Rp
ZnlbaV0uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxl
V29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZXZWJJY29uRGF0YWJhc2VJbXBsOjpkaXNwYXRj
aERpZEltcG9ydEljb25Gb3JQYWdlVVJMLCB1cmxzVG9Ob3RpZnlbaV0pKTsKKyAgICAgICAgaWYg
KHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCB0aGF0IGFsbCByZWNvcmRzIGhhdmUgYmVl
biBpbXBvcnRlZCBhbmQgbG9hZCBkZWNpc2lvbnMgYXJlIG5vdyBhdmFpbGFibGUuCisgICAgUnVu
TG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmV2ViSWNv
bkRhdGFiYXNlSW1wbDo6ZGlzcGF0Y2hEaWRGaW5pc2hVUkxJbXBvcnQpKTsKK30KKwordm9pZCog
V2ViSWNvbkRhdGFiYXNlSW1wbDo6c3luY1RocmVhZE1haW5Mb29wKCkKK3sKKyAgICBBU1NFUlRf
SUNPTl9TWU5DX1RIUkVBRCgpOworCisgICAgYm9vbCBzaG91bGRSZWVuYWJsZVN1ZGRlblRlcm1p
bmF0aW9uID0gZmFsc2U7CisKKyAgICBtX3N5bmNMb2NrLmxvY2soKTsKKworICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhyZWFkIHRlcm1pbmF0aW9uIGlzIHJlcXVlc3RlZCBiZWZvcmUgdGhlIG1haW4g
bG9vcCBldmVuIHN0YXJ0cyAtIGluIHRoYXQgY2FzZSwganVzdCBza2lwIHN0cmFpZ2h0IHRvIGNs
ZWFudXAKKyAgICB3aGlsZSAoIW1fdGhyZWFkVGVybWluYXRpb25SZXF1ZXN0ZWQpIHsKKyAgICAg
ICAgbV9zeW5jTG9jay51bmxvY2soKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgZG91Ymxl
IHRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisjZW5kaWYKKyAgICAgICAgTE9HKEljb25EYXRh
YmFzZSwgIihUSFJFQUQpIE1haW4gd29yayBsb29wIHN0YXJ0aW5nIik7CisKKyAgICAgICAgLy8g
SWYgd2Ugc2hvdWxkIHJlbW92ZSBhbGwgaWNvbnMsIGRvIGl0IG5vdy4gIFRoaXMgaXMgYW4gdW5p
bnRlcnVwdGlibGUgcHJvY2VkdXJlIHRoYXQgd2Ugd2lsbCBhbHdheXMgZG8gYmVmb3JlIHF1aXR0
aW5nIGlmIGl0IGlzIHJlcXVlc3RlZAorICAgICAgICBpZiAobV9yZW1vdmVJY29uc1JlcXVlc3Rl
ZCkgeworICAgICAgICAgICAgcmVtb3ZlQWxsSWNvbnNPblRocmVhZCgpOworICAgICAgICAgICAg
bV9yZW1vdmVJY29uc1JlcXVlc3RlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGVuLCBpZiB0aGUgdGhyZWFkIHNob3VsZCBiZSBxdWl0dGluZywgcXVpdCBub3ch
CisgICAgICAgIGlmIChtX3RocmVhZFRlcm1pbmF0aW9uUmVxdWVzdGVkKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgICAgICBib29sIGRpZEFueVdvcmsgPSB0cnVlOworICAgICAg
ICB3aGlsZSAoZGlkQW55V29yaykgeworICAgICAgICAgICAgYm9vbCBkaWRXcml0ZSA9IHdyaXRl
VG9EYXRhYmFzZSgpOworICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGlkQW55V29yayA9IHJlYWRGcm9tRGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRT
dG9wVGhyZWFkQWN0aXZpdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFBydW5lIHVucmV0YWluZWQgaWNvbnMgYWZ0ZXIgdGhlIGZp
cnN0IHRpbWUgd2Ugc3luYyBhbnl0aGluZyBvdXQgdG8gdGhlIGRhdGFiYXNlCisgICAgICAgICAg
ICAvLyBUaGlzIHdheSwgcHJ1bmluZyB3b24ndCBiZSB0aGUgb25seSBvcGVyYXRpb24gd2UgcGVy
Zm9ybSB0byB0aGUgZGF0YWJhc2UgYnkgaXRzZWxmCisgICAgICAgICAgICAvLyBXZSBhbHNvIGRv
bid0IHdhbnQgdG8gYm90aGVyIGRvaW5nIHRoaXMgaWYgdGhlIHRocmVhZCBzaG91bGQgYmUgdGVy
bWluYXRpbmcgKHRoZSB1c2VyIGlzIHF1aXR0aW5nKQorICAgICAgICAgICAgLy8gV2UgYWxzbyBk
b24ndCB3YW50IHRvIHBydW5lIGlmIHRoZSBkYXRhYmFzZUNsZWFudXBDb3VudGVyIGNvdW50IGlz
IG5vbi16ZXJvIC0gdGhhdCBtZWFucyBzb21lb25lCisgICAgICAgICAgICAvLyBoYXMgYXNrZWQg
dG8gZGVsYXkgcHJ1bmluZworICAgICAgICAgICAgc3RhdGljIGJvb2wgcHJ1bmVkVW5yZXRhaW5l
ZEljb25zID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoZGlkV3JpdGUgJiYgIXBydW5lZFVucmV0
YWluZWRJY29ucyAmJiAhZGF0YWJhc2VDbGVhbnVwQ291bnRlcikgeworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgICAgICAgICBkb3VibGUgdGltZSA9IGN1cnJlbnRUaW1lKCk7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiKFRIUkVBRCkgU3RhcnRpbmcgcHJ1bmVV
bnJldGFpbmVkSWNvbnMoKSIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHBy
dW5lVW5yZXRhaW5lZEljb25zKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
TE9HKEljb25EYXRhYmFzZSwgIihUSFJFQUQpIHBydW5lVW5yZXRhaW5lZEljb25zKCkgdG9vayAl
LjRmIHNlY29uZHMiLCBjdXJyZW50VGltZSgpIC0gdGltZSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gSWYgcHJ1bmVVbnJldGFpbmVkSWNvbnMoKSByZXR1cm5lZCBlYXJs
eSBkdWUgdG8gcmVxdWVzdGVkIHRocmVhZCB0ZXJtaW5hdGlvbiwgaXRzIHN0aWxsIG9rYXkKKyAg
ICAgICAgICAgICAgICAvLyB0byBtYXJrIHBydW5lZFVucmV0YWluZWRJY29ucyB0cnVlIGJlY2F1
c2Ugd2UncmUgYWJvdXQgdG8gdGVybWluYXRlIGFueXdheQorICAgICAgICAgICAgICAgIHBydW5l
ZFVucmV0YWluZWRJY29ucyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRpZEFueVdvcmsgPSBkaWRBbnlXb3JrIHx8IGRpZFdyaXRlOworICAgICAgICAg
ICAgaWYgKHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgZG91YmxlIG5l
d3N0YW1wID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIihUSFJF
QUQpIE1haW4gd29yayBsb29wIHJhbiBmb3IgJS40ZiBzZWNvbmRzLCAlcyByZXF1ZXN0ZWQgdG8g
dGVybWluYXRlIiwgbmV3c3RhbXAgLSB0aW1lU3RhbXAsIHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0
eSgpID8gIndhcyIgOiAid2FzIG5vdCIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX3N5bmNMb2NrLmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlz
IHNvbWUgY29uZGl0aW9uIHRoYXQgaXMgYXNraW5nIHVzIHRvIHN0b3Agd2hhdCB3ZSdyZSBkb2lu
ZyBub3cgYW5kIGhhbmRsZSBhIHNwZWNpYWwgY2FzZQorICAgICAgICAvLyBUaGlzIGlzIGVpdGhl
ciByZW1vdmluZyBhbGwgaWNvbnMsIG9yIHNodXR0aW5nIGRvd24gdGhlIHRocmVhZCB0byBxdWl0
IHRoZSBhcHAKKyAgICAgICAgLy8gV2UgaGFuZGxlIHRob3NlIGF0IHRoZSB0b3Agb2YgdGhpcyBt
YWluIGxvb3Agc28gY29udGludWUgdG8ganVtcCBiYWNrIHVwIHRoZXJlCisgICAgICAgIGlmIChz
aG91bGRTdG9wVGhyZWFkQWN0aXZpdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGlmIChzaG91bGRSZWVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKSB7CisgICAgICAgICAgICAv
LyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGRpc2FibGVTdWRkZW5U
ZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgICAgIC8vIHdha2VTeW5jVGhyZWFkIGZ1bmN0aW9u
LiBBbnkgdGltZSB3ZSB3YWl0IG9uIHRoZSBjb25kaXRpb24sIHdlIGFsc28gaGF2ZQorICAgICAg
ICAgICAgLy8gdG8gZW5hYmxlU3VkZGVuVGVybWF0aW9uLCBhZnRlciBkb2luZyB0aGUgbmV4dCBi
YXRjaCBvZiB3b3JrLgorICAgICAgICAgICAgQVNTRVJUKG1fZGlzYWJsZWRTdWRkZW5UZXJtaW5h
dGlvbkZvclN5bmNUaHJlYWQpOworICAgICAgICAgICAgV2ViQ29yZTo6ZW5hYmxlU3VkZGVuVGVy
bWluYXRpb24oKTsKKyAgICAgICAgICAgIG1fZGlzYWJsZWRTdWRkZW5UZXJtaW5hdGlvbkZvclN5
bmNUaHJlYWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc3luY0NvbmRpdGlvbi53
YWl0KG1fc3luY0xvY2spOworCisgICAgICAgIHNob3VsZFJlZW5hYmxlU3VkZGVuVGVybWluYXRp
b24gPSB0cnVlOworICAgIH0KKworICAgIG1fc3luY0xvY2sudW5sb2NrKCk7CisgICAgCisgICAg
Ly8gVGhyZWFkIGlzIHRlcm1pbmF0aW5nIGF0IHRoaXMgcG9pbnQKKyAgICBjbGVhbnVwU3luY1Ro
cmVhZCgpOworCisgICAgaWYgKHNob3VsZFJlZW5hYmxlU3VkZGVuVGVybWluYXRpb24pIHsKKyAg
ICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24gaW4gdGhlCisgICAgICAgIC8vIHdha2VTeW5jVGhyZWFkIGZ1bmN0
aW9uLiBBbnkgdGltZSB3ZSB3YWl0IG9uIHRoZSBjb25kaXRpb24sIHdlIGFsc28gaGF2ZQorICAg
ICAgICAvLyB0byBlbmFibGVTdWRkZW5UZXJtYXRpb24sIGFmdGVyIGRvaW5nIHRoZSBuZXh0IGJh
dGNoIG9mIHdvcmsuCisgICAgICAgIEFTU0VSVChtX2Rpc2FibGVkU3VkZGVuVGVybWluYXRpb25G
b3JTeW5jVGhyZWFkKTsKKyAgICAgICAgV2ViQ29yZTo6ZW5hYmxlU3VkZGVuVGVybWluYXRpb24o
KTsKKyAgICAgICAgbV9kaXNhYmxlZFN1ZGRlblRlcm1pbmF0aW9uRm9yU3luY1RocmVhZCA9IGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVEYXRh
YmFzZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSYgZGIpCit7CisgICAgaWYgKCFkYi5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIFBhZ2VVUkwgKHVybCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsaWNvbklEIElOVEVHRVIgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIFBhZ2VVUkwgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGIubGFzdEVycm9yKCks
IGRiLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZGIuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIWRiLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgSU5ERVggUGFnZVVS
TEluZGV4IE9OIFBhZ2VVUkwgKHVybCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIFBhZ2VVUkwgaW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGIubGFzdEVy
cm9yKCksIGRiLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZGIuY2xvc2UoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRiLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUg
SWNvbkluZm8gKGljb25JRCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHVybCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwg
VU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIHN0YW1wIElOVEVHRVIpOyIpKSB7CisgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJY29uSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkp
IC0gJXMiLCBkYi5sYXN0RXJyb3IoKSwgZGIubGFzdEVycm9yTXNnKCkpOworICAgICAgICBkYi5j
bG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZGIuZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBJTkRFWCBJY29uSW5mb0luZGV4IE9OIEljb25JbmZvICh1cmwsIGljb25JRCk7
IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFBhZ2VVUkwgaW5kZXgg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGIubGFzdEVycm9yKCksIGRiLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgZGIuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
IWRiLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSWNvbkRhdGEgKGljb25JRCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIGRh
dGEgQkxPQik7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEljb25E
YXRhIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRiLmxhc3RFcnJvcigpLCBkYi5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIGRiLmNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIElOREVYIEljb25EYXRhSW5kZXgg
T04gSWNvbkRhdGEgKGljb25JRCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y3JlYXRlIFBhZ2VVUkwgaW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGIubGFzdEVycm9y
KCksIGRiLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgZGIuY2xvc2UoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIWRiLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSWNv
bkRhdGFiYXNlSW5mbyAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
OyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJY29uRGF0YWJhc2VJ
bmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRiLmxhc3RFcnJvcigpLCBkYi5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIGRiLmNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKCFkYi5leGVjdXRlQ29tbWFuZChTdHJpbmcoIklOU0VSVCBJTlRPIEljb25EYXRh
YmFzZUluZm8gVkFMVUVTICgnVmVyc2lvbicsICIpICsgU3RyaW5nOjpudW1iZXIoY3VycmVudERh
dGFiYXNlVmVyc2lvbikgKyAiKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBp
bnNlcnQgaWNvbiBkYXRhYmFzZSB2ZXJzaW9uIGludG8gSWNvbkRhdGFiYXNlSW5mbyB0YWJsZSAo
JWkpIC0gJXMiLCBkYi5sYXN0RXJyb3IoKSwgZGIubGFzdEVycm9yTXNnKCkpOworICAgICAgICBk
Yi5jbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorfSAgICAKKwordm9pZCBXZWJJY29u
RGF0YWJhc2VJbXBsOjpyZW1vdmVBbGxJY29uc09uVGhyZWFkKCkKK3sKKyAgICBBU1NFUlRfSUNP
Tl9TWU5DX1RIUkVBRCgpOworCisgICAgTE9HKEljb25EYXRhYmFzZSwgIlJlbW92aW5nIGFsbCBp
Y29ucyBvbiB0aGUgc3luYyB0aHJlYWQiKTsKKyAgICAgICAgCisgICAgLy8gRGVsZXRlIGFsbCB0
aGUgcHJlcGFyZWQgc3RhdGVtZW50cyBzbyB0aGV5IGNhbiBzdGFydCBvdmVyCisgICAgZGVsZXRl
QWxsUHJlcGFyZWRTdGF0ZW1lbnRzKCk7ICAgIAorICAgIAorICAgIC8vIFRvIHJlc2V0IHRoZSBv
bi1kaXNrIGRhdGFiYXNlLCB3ZSdsbCB3aXBlIGFsbCBpdHMgdGFibGVzIHRoZW4gdmFjdXVtIGl0
CisgICAgLy8gVGhpcyBpcyBlYXNpZXIgYW5kIHNhZmVyIHRoYW4gY2xvc2luZyBpdCwgZGVsZXRp
bmcgdGhlIGZpbGUsIGFuZCByZWNyZWF0aW5nIGZyb20gc2NyYXRjaAorICAgIG1fc3luY0RCLmNs
ZWFyQWxsVGFibGVzKCk7CisgICAgbV9zeW5jREIucnVuVmFjdXVtQ29tbWFuZCgpOworICAgIGNy
ZWF0ZURhdGFiYXNlVGFibGVzKG1fc3luY0RCKTsKKyAgICAKKyAgICBMT0coSWNvbkRhdGFiYXNl
LCAiRGlzcGF0Y2hpbmcgbm90aWZpY2F0aW9uIHRoYXQgd2UgcmVtb3ZlZCBhbGwgaWNvbnMiKTsK
KyAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMs
ICZXZWJJY29uRGF0YWJhc2VJbXBsOjpkaXNwYXRjaERpZFJlbW92ZUFsbEljb25zKSk7Cit9CisK
K3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6ZGVsZXRlQWxsUHJlcGFyZWRTdGF0ZW1lbnRzKCkK
K3sKKyAgICBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpOworICAgIAorICAgIG1fc2V0SWNvbklE
Rm9yUGFnZVVSTFN0YXRlbWVudC5jbGVhcigpOworICAgIG1fcmVtb3ZlUGFnZVVSTFN0YXRlbWVu
dC5jbGVhcigpOworICAgIG1fZ2V0SWNvbklERm9ySWNvblVSTFN0YXRlbWVudC5jbGVhcigpOwor
ICAgIG1fZ2V0SW1hZ2VEYXRhRm9ySWNvblVSTFN0YXRlbWVudC5jbGVhcigpOworICAgIG1fYWRk
SWNvblRvSWNvbkluZm9TdGF0ZW1lbnQuY2xlYXIoKTsKKyAgICBtX2FkZEljb25Ub0ljb25EYXRh
U3RhdGVtZW50LmNsZWFyKCk7CisgICAgbV9nZXRJbWFnZURhdGFTdGF0ZW1lbnQuY2xlYXIoKTsK
KyAgICBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblVSTFN0YXRlbWVudC5jbGVhcigpOworICAgIG1f
ZGVsZXRlSWNvbkZyb21JY29uSW5mb1N0YXRlbWVudC5jbGVhcigpOworICAgIG1fZGVsZXRlSWNv
bkZyb21JY29uRGF0YVN0YXRlbWVudC5jbGVhcigpOworICAgIG1fdXBkYXRlSWNvbkluZm9TdGF0
ZW1lbnQuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUljb25EYXRhU3RhdGVtZW50LmNsZWFyKCk7Cisg
ICAgbV9zZXRJY29uSW5mb1N0YXRlbWVudC5jbGVhcigpOworICAgIG1fc2V0SWNvbkRhdGFTdGF0
ZW1lbnQuY2xlYXIoKTsKK30KKworYm9vbCBXZWJJY29uRGF0YWJhc2VJbXBsOjp3cml0ZVRvRGF0
YWJhc2UoKQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgZG91YmxlIHRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisjZW5kaWYKKworICAg
IGJvb2wgZGlkQW55V29yayA9IGZhbHNlOworICAgIAorICAgIC8vIFdlIGNhbiBjb3B5IHRoZSBj
dXJyZW50IHdvcmsgcXVldWUgdGhlbiBjbGVhciBpdCBvdXQgLSBJZiBhbnkgbmV3IHdvcmsgY29t
ZXMgaW4gd2hpbGUgd2UncmUgd3JpdGluZyBvdXQsCisgICAgLy8gd2UnbGwgcGljayBpdCB1cCBv
biB0aGUgbmV4dCBwYXNzLiAgVGhpcyBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIGxvY2tpbmcgc3Ry
YXRlZ3kgZm9yIHRoaXMgbWV0aG9kIGFuZCByZW1haW5zIGNvaGVzaXZlIHdpdGggY2hhbmdlcwor
ICAgIC8vIGFza2VkIGZvciBieSB0aGUgZGF0YWJhc2Ugb24gdGhlIG1haW4gdGhyZWFkCisgICAg
VmVjdG9yPEljb25TbmFwc2hvdD4gaWNvblNuYXBzaG90czsKKyAgICBWZWN0b3I8UGFnZVVSTFNu
YXBzaG90PiBwYWdlU25hcHNob3RzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fcGVuZGluZ1N5bmNMb2NrKTsKKyAgICAgICAgCisgICAgICAgIGljb25TbmFwc2hvdHMuYXBw
ZW5kUmFuZ2UobV9pY29uc1BlbmRpbmdTeW5jLmJlZ2luKCkudmFsdWVzKCksIG1faWNvbnNQZW5k
aW5nU3luYy5lbmQoKS52YWx1ZXMoKSk7CisgICAgICAgIG1faWNvbnNQZW5kaW5nU3luYy5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgcGFnZVNuYXBzaG90cy5hcHBlbmRSYW5nZShtX3BhZ2VV
UkxzUGVuZGluZ1N5bmMuYmVnaW4oKS52YWx1ZXMoKSwgbV9wYWdlVVJMc1BlbmRpbmdTeW5jLmVu
ZCgpLnZhbHVlcygpKTsKKyAgICAgICAgbV9wYWdlVVJMc1BlbmRpbmdTeW5jLmNsZWFyKCk7Cisg
ICAgfQorICAgIAorICAgIGlmIChpY29uU25hcHNob3RzLnNpemUoKSB8fCBwYWdlU25hcHNob3Rz
LnNpemUoKSkKKyAgICAgICAgZGlkQW55V29yayA9IHRydWU7CisgICAgICAgIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHN5bmNUcmFuc2FjdGlvbihtX3N5bmNEQik7CisgICAgc3luY1RyYW5zYWN0
aW9uLmJlZ2luKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGljb25TbmFw
c2hvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd3JpdGVJY29uU25hcHNob3RUb1NRTERhdGFi
YXNlKGljb25TbmFwc2hvdHNbaV0pOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiV3JvdGUg
SWNvblJlY29yZCBmb3IgSWNvblVSTCAlcyB3aXRoIHRpbWVTdGFtcCBvZiAlaSB0byB0aGUgREIi
LCB1cmxGb3JMb2dnaW5nKGljb25TbmFwc2hvdHNbaV0uaWNvblVSTCkuYXNjaWkoKS5kYXRhKCks
IGljb25TbmFwc2hvdHNbaV0udGltZXN0YW1wKTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhZ2VTbmFwc2hvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8g
SWYgdGhlIGljb24gVVJMIGlzIGVtcHR5LCB0aGlzIHBhZ2UgaXMgbWVhbnQgdG8gYmUgZGVsZXRl
ZAorICAgICAgICAvLyBBU1NFUlRzIGFyZSBzYW5pdHkgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUg
bWFwcGluZ3MgZXhpc3QgaWYgdGhleSBzaG91bGQgYW5kIGRvbid0IGlmIHRoZXkgc2hvdWxkbid0
CisgICAgICAgIGlmIChwYWdlU25hcHNob3RzW2ldLmljb25VUkwuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmVtb3ZlUGFnZVVSTEZyb21TUUxEYXRhYmFzZShwYWdlU25hcHNob3RzW2ldLnBhZ2VV
UkwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRJY29uVVJMRm9yUGFnZVVSTEluU1FM
RGF0YWJhc2UocGFnZVNuYXBzaG90c1tpXS5pY29uVVJMLCBwYWdlU25hcHNob3RzW2ldLnBhZ2VV
UkwpOworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiQ29tbWl0dGVkIEljb25VUkwgZm9yIFBh
Z2VVUkwgJXMgdG8gZGF0YWJhc2UiLCB1cmxGb3JMb2dnaW5nKHBhZ2VTbmFwc2hvdHNbaV0ucGFn
ZVVSTCkuYXNjaWkoKS5kYXRhKCkpOworICAgIH0KKworICAgIHN5bmNUcmFuc2FjdGlvbi5jb21t
aXQoKTsKKyAgICAKKyAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRhbmds
aW5nIFBhZ2VVUkxzIC0gSWYgdGhlcmUgYXJlLCB3ZSB3YW50IHRvIG91dHB1dCBvbmUgbG9nIG1l
c3NhZ2UgYnV0IG5vdCBzcGFtIHRoZSBjb25zb2xlIHBvdGVudGlhbGx5IGV2ZXJ5IGZldyBzZWNv
bmRzCisgICAgaWYgKGRpZEFueVdvcmspCisgICAgICAgIGNoZWNrRm9yRGFuZ2xpbmdQYWdlVVJM
cyhmYWxzZSk7CisKKyAgICBMT0coSWNvbkRhdGFiYXNlLCAiVXBkYXRpbmcgdGhlIGRhdGFiYXNl
IHRvb2sgJS40ZiBzZWNvbmRzIiwgY3VycmVudFRpbWUoKSAtIHRpbWVTdGFtcCk7CisKKyAgICBy
ZXR1cm4gZGlkQW55V29yazsKK30KKworLy8gcmVhZHlTUUxpdGVTdGF0ZW1lbnQoKSBoYW5kbGVz
IHR3byB0aGluZ3MKKy8vIDEgLSBJZiB0aGUgU1FMRGF0YWJhc2UmIGFyZ3VtZW50IGlzIGRpZmZl
cmVudCwgdGhlIHN0YXRlbWVudCBtdXN0IGJlIGRlc3Ryb3llZCBhbmQgcmVtYWRlLiAgVGhpcyBo
YXBwZW5zIHdoZW4gdGhlIHVzZXIKKy8vICAgICBzd2l0Y2hlcyB0byBhbmQgZnJvbSBwcml2YXRl
IGJyb3dzaW5nCisvLyAyIC0gTGF6eSBjb25zdHJ1Y3Rpb24gb2YgdGhlIFN0YXRlbWVudCBpbiB0
aGUgZmlyc3QgcGxhY2UsIGluIGNhc2Ugd2UndmUgbmV2ZXIgbWFkZSB0aGlzIHF1ZXJ5IGJlZm9y
ZQoraW5saW5lIHZvaWQgcmVhZHlTUUxpdGVTdGF0ZW1lbnQoT3duUHRyPFNRTGl0ZVN0YXRlbWVu
dD4mIHN0YXRlbWVudCwgU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHN0cikKK3sK
KyAgICBpZiAoc3RhdGVtZW50ICYmIChzdGF0ZW1lbnQtPmRhdGFiYXNlKCkgIT0gJmRiIHx8IHN0
YXRlbWVudC0+aXNFeHBpcmVkKCkpKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnQtPmlzRXhwaXJl
ZCgpKQorICAgICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIlNRTGl0ZVN0YXRlbWVudCBhc3Nv
Y2lhdGVkIHdpdGggJXMgaXMgZXhwaXJlZCIsIHN0ci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IHN0YXRlbWVudC5zZXQoMCk7CisgICAgfQorICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAg
IHN0YXRlbWVudCA9IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQoZGIsIHN0cikpOworICAg
ICAgICBpZiAoc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAg
ICBMT0dfRVJST1IoIlByZXBhcmluZyBzdGF0ZW1lbnQgJXMgZmFpbGVkIiwgc3RyLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6d3JpdGVJY29u
U25hcHNob3RUb1NRTERhdGFiYXNlKGNvbnN0IEljb25TbmFwc2hvdCYgc25hcHNob3QpCit7Cisg
ICAgQVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKTsKKyAgICAKKyAgICBpZiAoc25hcHNob3QuaWNv
blVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gQSBudWxs
ZWQgb3V0IHRpbWVzdGFtcCBhbmQgZGF0YSBtZWFucyB0aGlzIGljb24gaXMgZGVzdGluZWQgdG8g
YmUgZGVsZXRlZCAtIGRvIHRoYXQgaW5zdGVhZCBvZiB3cml0aW5nIGl0IG91dAorICAgIGlmICgh
c25hcHNob3QudGltZXN0YW1wICYmICFzbmFwc2hvdC5kYXRhKSB7CisgICAgICAgIExPRyhJY29u
RGF0YWJhc2UsICJSZW1vdmluZyAlcyBmcm9tIG9uLWRpc2sgZGF0YWJhc2UiLCB1cmxGb3JMb2dn
aW5nKHNuYXBzaG90Lmljb25VUkwpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmVtb3ZlSWNv
bkZyb21TUUxEYXRhYmFzZShzbmFwc2hvdC5pY29uVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFRoZXJlIHdvdWxkIGJlIGEgdHJhbnNhY3Rpb24gaGVyZSB0byBtYWtlIHN1
cmUgdGhlc2UgcmVtb3ZhbHMgYXJlIGF0b21pYworICAgIC8vIEluIHByYWN0aWNlIHRoZSBvbmx5
IGNhbGxlciBvZiB0aGlzIG1ldGhvZCBpcyBhbHdheXMgd3JhcHBlZCBpbiBhIHRyYW5zYWN0aW9u
IGl0c2VsZiBzbyBwbGFjaW5nIGFub3RoZXIgaGVyZSBpcyB1bm5lY2Vzc2FyeQorICAgICAgICAK
KyAgICAvLyBHZXQgdGhlIGljb25JRCBmb3IgdGhpcyB1cmwKKyAgICBpbnQ2NF90IGljb25JRCA9
IGdldEljb25JREZvckljb25VUkxGcm9tU1FMRGF0YWJhc2Uoc25hcHNob3QuaWNvblVSTCk7Cisg
ICAgCisgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBpY29uSUQgaW4gcGxhY2UsIHVwZGF0
ZSB0aGUgZGF0YWJhc2UuICAKKyAgICAvLyBPdGhlcndpc2UsIGluc2VydCBuZXcgcmVjb3Jkcwor
ICAgIGlmIChpY29uSUQpIHsgICAgCisgICAgICAgIHJlYWR5U1FMaXRlU3RhdGVtZW50KG1fdXBk
YXRlSWNvbkluZm9TdGF0ZW1lbnQsIG1fc3luY0RCLCAiVVBEQVRFIEljb25JbmZvIFNFVCBzdGFt
cCA9ID8sIHVybCA9ID8gV0hFUkUgaWNvbklEID0gPzsiKTsKKyAgICAgICAgbV91cGRhdGVJY29u
SW5mb1N0YXRlbWVudC0+YmluZEludDY0KDEsIHNuYXBzaG90LnRpbWVzdGFtcCk7CisgICAgICAg
IG1fdXBkYXRlSWNvbkluZm9TdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHNuYXBzaG90Lmljb25VUkwp
OworICAgICAgICBtX3VwZGF0ZUljb25JbmZvU3RhdGVtZW50LT5iaW5kSW50NjQoMywgaWNvbklE
KTsKKworICAgICAgICBpZiAobV91cGRhdGVJY29uSW5mb1N0YXRlbWVudC0+c3RlcCgpICE9IFNR
TFJlc3VsdERvbmUpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaWNv
biBpbmZvIGZvciB1cmwgJXMiLCB1cmxGb3JMb2dnaW5nKHNuYXBzaG90Lmljb25VUkwpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fdXBkYXRlSWNvbkluZm9TdGF0ZW1lbnQt
PnJlc2V0KCk7CisgICAgICAgIAorICAgICAgICByZWFkeVNRTGl0ZVN0YXRlbWVudChtX3VwZGF0
ZUljb25EYXRhU3RhdGVtZW50LCBtX3N5bmNEQiwgIlVQREFURSBJY29uRGF0YSBTRVQgZGF0YSA9
ID8gV0hFUkUgaWNvbklEID0gPzsiKTsKKyAgICAgICAgbV91cGRhdGVJY29uRGF0YVN0YXRlbWVu
dC0+YmluZEludDY0KDIsIGljb25JRCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIElm
IHdlICpoYXZlKiBpbWFnZSBkYXRhLCBiaW5kIGl0IHRvIHRoaXMgc3RhdGVtZW50IC0gT3RoZXJ3
aXNlIGJpbmQgIm51bGwiIGZvciB0aGUgYmxvYiBkYXRhLCAKKyAgICAgICAgLy8gc2lnbmlmeWlu
ZyB0aGF0IHRoaXMgaWNvbiBkb2Vzbid0IGhhdmUgYW55IGRhdGEgICAgCisgICAgICAgIGlmIChz
bmFwc2hvdC5kYXRhICYmIHNuYXBzaG90LmRhdGEtPnNpemUoKSkKKyAgICAgICAgICAgIG1fdXBk
YXRlSWNvbkRhdGFTdGF0ZW1lbnQtPmJpbmRCbG9iKDEsIHNuYXBzaG90LmRhdGEtPmRhdGEoKSwg
c25hcHNob3QuZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV91cGRh
dGVJY29uRGF0YVN0YXRlbWVudC0+YmluZE51bGwoMSk7CisgICAgICAgIAorICAgICAgICBpZiAo
bV91cGRhdGVJY29uRGF0YVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaWNvbiBkYXRhIGZvciB1cmwgJXMi
LCB1cmxGb3JMb2dnaW5nKHNuYXBzaG90Lmljb25VUkwpLmFzY2lpKCkuZGF0YSgpKTsKKworICAg
ICAgICBtX3VwZGF0ZUljb25EYXRhU3RhdGVtZW50LT5yZXNldCgpOworICAgIH0gZWxzZSB7ICAg
IAorICAgICAgICByZWFkeVNRTGl0ZVN0YXRlbWVudChtX3NldEljb25JbmZvU3RhdGVtZW50LCBt
X3N5bmNEQiwgIklOU0VSVCBJTlRPIEljb25JbmZvICh1cmwsc3RhbXApIFZBTFVFUyAoPywgPyk7
Iik7CisgICAgICAgIG1fc2V0SWNvbkluZm9TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHNuYXBzaG90
Lmljb25VUkwpOworICAgICAgICBtX3NldEljb25JbmZvU3RhdGVtZW50LT5iaW5kSW50NjQoMiwg
c25hcHNob3QudGltZXN0YW1wKTsKKworICAgICAgICBpZiAobV9zZXRJY29uSW5mb1N0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBzZXQgaWNvbiBpbmZvIGZvciB1cmwgJXMiLCB1cmxGb3JMb2dnaW5nKHNuYXBzaG90Lmlj
b25VUkwpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fc2V0SWNvbkluZm9T
dGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgICAgIAorICAgICAgICBpbnQ2NF90IGljb25JRCA9IG1f
c3luY0RCLmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAgIHJlYWR5U1FMaXRlU3RhdGVtZW50
KG1fc2V0SWNvbkRhdGFTdGF0ZW1lbnQsIG1fc3luY0RCLCAiSU5TRVJUIElOVE8gSWNvbkRhdGEg
KGljb25JRCwgZGF0YSkgVkFMVUVTICg/LCA/KTsiKTsKKyAgICAgICAgbV9zZXRJY29uRGF0YVN0
YXRlbWVudC0+YmluZEludDY0KDEsIGljb25JRCk7CisKKyAgICAgICAgLy8gSWYgd2UgKmhhdmUq
IGltYWdlIGRhdGEsIGJpbmQgaXQgdG8gdGhpcyBzdGF0ZW1lbnQgLSBPdGhlcndpc2UgYmluZCAi
bnVsbCIgZm9yIHRoZSBibG9iIGRhdGEsIAorICAgICAgICAvLyBzaWduaWZ5aW5nIHRoYXQgdGhp
cyBpY29uIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAgICAKKyAgICAgICAgaWYgKHNuYXBzaG90LmRh
dGEgJiYgc25hcHNob3QuZGF0YS0+c2l6ZSgpKQorICAgICAgICAgICAgbV9zZXRJY29uRGF0YVN0
YXRlbWVudC0+YmluZEJsb2IoMiwgc25hcHNob3QuZGF0YS0+ZGF0YSgpLCBzbmFwc2hvdC5kYXRh
LT5zaXplKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3NldEljb25EYXRhU3RhdGVt
ZW50LT5iaW5kTnVsbCgyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3NldEljb25EYXRhU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHNldCBpY29uIGRhdGEgZm9yIHVybCAlcyIsIHVybEZvckxvZ2dpbmcoc25hcHNo
b3QuaWNvblVSTCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgICAgIG1fc2V0SWNvbkRhdGFTdGF0
ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorfQorCit2b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OnNl
dEljb25VUkxGb3JQYWdlVVJMSW5TUUxEYXRhYmFzZShjb25zdCBTdHJpbmcmIGljb25VUkwsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpOwor
ICAgIAorICAgIGludDY0X3QgaWNvbklEID0gZ2V0SWNvbklERm9ySWNvblVSTEZyb21TUUxEYXRh
YmFzZShpY29uVVJMKTsKKworICAgIGlmICghaWNvbklEKQorICAgICAgICBpY29uSUQgPSBhZGRJ
Y29uVVJMVG9TUUxEYXRhYmFzZShpY29uVVJMKTsKKyAgICAKKyAgICBpZiAoIWljb25JRCkgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBlc3RhYmxpc2ggYW4gSUQgZm9yIGljb25VUkwg
JXMiLCB1cmxGb3JMb2dnaW5nKGljb25VUkwpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgQVNT
RVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzZXRJY29uSURG
b3JQYWdlVVJMSW5TUUxEYXRhYmFzZShpY29uSUQsIHBhZ2VVUkwpOworfQorCit2b2lkIFdlYklj
b25EYXRhYmFzZUltcGw6OnNldEljb25JREZvclBhZ2VVUkxJblNRTERhdGFiYXNlKGludDY0X3Qg
aWNvbklELCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgQVNTRVJUX0lDT05fU1lOQ19U
SFJFQUQoKTsKKyAgICAKKyAgICByZWFkeVNRTGl0ZVN0YXRlbWVudChtX3NldEljb25JREZvclBh
Z2VVUkxTdGF0ZW1lbnQsIG1fc3luY0RCLCAiSU5TRVJUIElOVE8gUGFnZVVSTCAodXJsLCBpY29u
SUQpIFZBTFVFUyAoKD8pLCA/KTsiKTsKKyAgICBtX3NldEljb25JREZvclBhZ2VVUkxTdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIHBhZ2VVUkwpOworICAgIG1fc2V0SWNvbklERm9yUGFnZVVSTFN0YXRl
bWVudC0+YmluZEludDY0KDIsIGljb25JRCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbV9zZXRJY29u
SURGb3JQYWdlVVJMU3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHREb25lKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIExPR19FUlJPUigic2V0
SWNvbklERm9yUGFnZVVSTFF1ZXJ5IGZhaWxlZCBmb3IgdXJsICVzIiwgdXJsRm9yTG9nZ2luZyhw
YWdlVVJMKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgfQorCisgICAgbV9zZXRJY29uSURGb3JQYWdl
VVJMU3RhdGVtZW50LT5yZXNldCgpOworfQorCitpbnQ2NF90IFdlYkljb25EYXRhYmFzZUltcGw6
OmdldEljb25JREZvckljb25VUkxGcm9tU1FMRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpY29uVVJM
KQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisgICAgCisgICAgcmVhZHlTUUxp
dGVTdGF0ZW1lbnQobV9nZXRJY29uSURGb3JJY29uVVJMU3RhdGVtZW50LCBtX3N5bmNEQiwgIlNF
TEVDVCBJY29uSW5mby5pY29uSUQgRlJPTSBJY29uSW5mbyBXSEVSRSBJY29uSW5mby51cmwgPSAo
Pyk7Iik7CisgICAgbV9nZXRJY29uSURGb3JJY29uVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBp
Y29uVVJMKTsKKyAgICAKKyAgICBpbnQ2NF90IHJlc3VsdCA9IG1fZ2V0SWNvbklERm9ySWNvblVS
TFN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KQorICAg
ICAgICByZXN1bHQgPSBtX2dldEljb25JREZvckljb25VUkxTdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOworICAgIGVsc2UgeworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUp
CisgICAgICAgICAgICBMT0dfRVJST1IoImdldEljb25JREZvckljb25VUkxGcm9tU1FMRGF0YWJh
c2UgZmFpbGVkIGZvciB1cmwgJXMiLCB1cmxGb3JMb2dnaW5nKGljb25VUkwpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisKKyAgICBtX2dldEljb25JREZvcklj
b25VUkxTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50NjRf
dCBXZWJJY29uRGF0YWJhc2VJbXBsOjphZGRJY29uVVJMVG9TUUxEYXRhYmFzZShjb25zdCBTdHJp
bmcmIGljb25VUkwpCit7CisgICAgQVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKTsKKyAgICAKKyAg
ICAvLyBUaGVyZSB3b3VsZCBiZSBhIHRyYW5zYWN0aW9uIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXNl
IHR3byBpbnNlcnRzIGFyZSBhdG9taWMKKyAgICAvLyBJbiBwcmFjdGljZSB0aGUgb25seSBjYWxs
ZXIgb2YgdGhpcyBtZXRob2QgaXMgYWx3YXlzIHdyYXBwZWQgaW4gYSB0cmFuc2FjdGlvbiBpdHNl
bGYgc28gcGxhY2luZyBhbm90aGVyCisgICAgLy8gaGVyZSBpcyB1bm5lY2Vzc2FyeQorICAgIAor
ICAgIHJlYWR5U1FMaXRlU3RhdGVtZW50KG1fYWRkSWNvblRvSWNvbkluZm9TdGF0ZW1lbnQsIG1f
c3luY0RCLCAiSU5TRVJUIElOVE8gSWNvbkluZm8gKHVybCwgc3RhbXApIFZBTFVFUyAoPywgMCk7
Iik7CisgICAgbV9hZGRJY29uVG9JY29uSW5mb1N0YXRlbWVudC0+YmluZFRleHQoMSwgaWNvblVS
TCk7CisgICAgCisgICAgaW50IHJlc3VsdCA9IG1fYWRkSWNvblRvSWNvbkluZm9TdGF0ZW1lbnQt
PnN0ZXAoKTsKKyAgICBtX2FkZEljb25Ub0ljb25JbmZvU3RhdGVtZW50LT5yZXNldCgpOworICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoImFkZElj
b25VUkxUb1NRTERhdGFiYXNlIGZhaWxlZCB0byBpbnNlcnQgJXMgaW50byBJY29uSW5mbyIsIHVy
bEZvckxvZ2dpbmcoaWNvblVSTCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgaW50NjRfdCBpY29uSUQgPSBtX3N5bmNEQi5sYXN0SW5zZXJ0Um93SUQoKTsK
KyAgICAKKyAgICByZWFkeVNRTGl0ZVN0YXRlbWVudChtX2FkZEljb25Ub0ljb25EYXRhU3RhdGVt
ZW50LCBtX3N5bmNEQiwgIklOU0VSVCBJTlRPIEljb25EYXRhIChpY29uSUQsIGRhdGEpIFZBTFVF
UyAoPywgPyk7Iik7CisgICAgbV9hZGRJY29uVG9JY29uRGF0YVN0YXRlbWVudC0+YmluZEludDY0
KDEsIGljb25JRCk7CisgICAgCisgICAgcmVzdWx0ID0gbV9hZGRJY29uVG9JY29uRGF0YVN0YXRl
bWVudC0+c3RlcCgpOworICAgIG1fYWRkSWNvblRvSWNvbkRhdGFTdGF0ZW1lbnQtPnJlc2V0KCk7
CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExPR19FUlJPUigi
YWRkSWNvblVSTFRvU1FMRGF0YWJhc2UgZmFpbGVkIHRvIGluc2VydCAlcyBpbnRvIEljb25EYXRh
IiwgdXJsRm9yTG9nZ2luZyhpY29uVVJMKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaWNvbklEOworfQorCit2b2lkIFdlYkljb25E
YXRhYmFzZUltcGw6OnBydW5lVW5yZXRhaW5lZEljb25zKCkKK3sKKyAgICBBU1NFUlRfSUNPTl9T
WU5DX1RIUkVBRCgpOworCisgICAgaWYgKCFpc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOyAgICAg
ICAgCisgICAgCisgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2Ug
cGVyIHJ1bgorICAgIEFTU0VSVCghbV9pbml0aWFsUHJ1bmluZ0NvbXBsZXRlKTsKKworICAgIC8v
IFRoaXMgbWV0aG9kIHJlbGllcyBvbiBoYXZpbmcgcmVhZCBpbiBhbGwgcGFnZSBVUkxzIGZyb20g
dGhlIGRhdGFiYXNlIGVhcmxpZXIuCisgICAgQVNTRVJUKG1faWNvblVSTEltcG9ydENvbXBsZXRl
KTsKKworICAgIC8vIEdldCB0aGUga25vd24gUGFnZVVSTHMgZnJvbSB0aGUgZGIsIGFuZCByZWNv
cmQgdGhlIElEIG9mIGFueSB0aGF0IGFyZSBub3QgaW4gdGhlIHJldGFpbiBjb3VudCBzZXQuCisg
ICAgVmVjdG9yPGludDY0X3Q+IHBhZ2VJRHNUb0RlbGV0ZTsgCisKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgcGFnZVNRTChtX3N5bmNEQiwgIlNFTEVDVCByb3dpZCwgdXJsIEZST00gUGFnZVVSTDsiKTsK
KyAgICBwYWdlU1FMLnByZXBhcmUoKTsKKyAgICAKKyAgICBpbnQgcmVzdWx0OworICAgIHdoaWxl
ICgocmVzdWx0ID0gcGFnZVNRTC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV91cmxBbmRJY29uTG9jayk7CisgICAgICAgIGlmICghbV9wYWdl
VVJMVG9SZWNvcmRNYXAuY29udGFpbnMocGFnZVNRTC5nZXRDb2x1bW5UZXh0KDEpKSkKKyAgICAg
ICAgICAgIHBhZ2VJRHNUb0RlbGV0ZS5hcHBlbmQocGFnZVNRTC5nZXRDb2x1bW5JbnQ2NCgwKSk7
CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciByZWFkaW5nIFBhZ2VVUkwgdGFibGUgZnJvbSBvbi1kaXNrIERCIik7
CisgICAgcGFnZVNRTC5maW5hbGl6ZSgpOworICAgIAorICAgIC8vIERlbGV0ZSBwYWdlIFVSTHMg
dGhhdCB3ZXJlIGluIHRoZSB0YWJsZSwgYnV0IG5vdCBpbiBvdXIgcmV0YWluIGNvdW50IHNldC4K
KyAgICBzaXplX3QgbnVtVG9EZWxldGUgPSBwYWdlSURzVG9EZWxldGUuc2l6ZSgpOworICAgIGlm
IChudW1Ub0RlbGV0ZSkgeworICAgICAgICBTUUxpdGVUcmFuc2FjdGlvbiBwcnVuaW5nVHJhbnNh
Y3Rpb24obV9zeW5jREIpOworICAgICAgICBwcnVuaW5nVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAg
ICAgICAgCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBwYWdlRGVsZXRlU1FMKG1fc3luY0RCLCAi
REVMRVRFIEZST00gUGFnZVVSTCBXSEVSRSByb3dpZCA9ICg/KTsiKTsKKyAgICAgICAgcGFnZURl
bGV0ZVNRTC5wcmVwYXJlKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtVG9E
ZWxldGU7ICsraSkgeworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgICAgICBMT0coSWNvbkRhdGFi
YXNlLCAiUHJ1bmluZyBwYWdlIHdpdGggcm93aWQgJUk2NGkgZnJvbSBkaXNrIiwgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihwYWdlSURzVG9EZWxldGVbaV0pKTsKKyNlbHNlCisgICAgICAgICAgICBM
T0coSWNvbkRhdGFiYXNlLCAiUHJ1bmluZyBwYWdlIHdpdGggcm93aWQgJWxsaSBmcm9tIGRpc2si
LCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHBhZ2VJRHNUb0RlbGV0ZVtpXSkpOworI2VuZGlmCisg
ICAgICAgICAgICBwYWdlRGVsZXRlU1FMLmJpbmRJbnQ2NCgxLCBwYWdlSURzVG9EZWxldGVbaV0p
OworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHBhZ2VEZWxldGVTUUwuc3RlcCgpOworICAgICAg
ICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKQorI2lmIE9TKFdJTkRPV1MpCisgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGRlbGV0ZSBwYWdlIHdpdGggaWQgJUk2
NGkgZnJvbSBkaXNrIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwYWdlSURzVG9EZWxldGVbaV0p
KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGRlbGV0ZSBw
YWdlIHdpdGggaWQgJWxsaSBmcm9tIGRpc2siLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHBhZ2VJ
RHNUb0RlbGV0ZVtpXSkpOworI2VuZGlmCisgICAgICAgICAgICBwYWdlRGVsZXRlU1FMLnJlc2V0
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSB0aHJlYWQgd2FzIGFza2Vk
IHRvIHRlcm1pbmF0ZSwgd2Ugc2hvdWxkIGNvbW1pdCB3aGF0IHBydW5pbmcgd2UndmUgZG9uZSBz
byBmYXIsIGZpZ3VyaW5nIHdlIGNhbgorICAgICAgICAgICAgLy8gZmluaXNoIHRoZSByZXN0IGxh
dGVyIChob3BlZnVsbHkpCisgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcFRocmVhZEFjdGl2aXR5
KCkpIHsKKyAgICAgICAgICAgICAgICBwcnVuaW5nVHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBy
dW5pbmdUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgcGFnZURlbGV0ZVNRTC5maW5hbGl6
ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBEZWxldGluZyB1bnJlZmVyZW5jZWQgaWNvbnMgZnJv
bSB0aGUgSWNvbiB0YWJsZXMgaGFzIHRvIGJlIGF0b21pYyAtIAorICAgIC8vIElmIHRoZSB1c2Vy
IHF1aXRzIHdoaWxlIHRoZXNlIGFyZSB0YWtpbmcgcGxhY2UsIHRoZXkgbWlnaHQgaGF2ZSB0byB3
YWl0LiAgVGhhbmtmdWxseSB0aGlzIHdpbGwgcmFyZWx5IGJlIGFuIGlzc3VlCisgICAgLy8gQSB1
c2VyIG9uIGEgbmV0d29yayBob21lIGRpcmVjdG9yeSB3aXRoIGEgd2lsZGx5IGluY29uc2lzdGVu
dCBkYXRhYmFzZSBtaWdodCBzZWUgcXVpdGUgYSBwYXVzZS4uLgorCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gcHJ1bmluZ1RyYW5zYWN0aW9uKG1fc3luY0RCKTsKKyAgICBwcnVuaW5nVHJhbnNhY3Rp
b24uYmVnaW4oKTsKKyAgICAKKyAgICAvLyBXaXBlIEljb25zIHRoYXQgYXJlbid0IHJldGFpbmVk
CisgICAgaWYgKCFtX3N5bmNEQi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkRhdGEg
V0hFUkUgaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIFBhZ2VVUkwpOyIpKQorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRlIFNRTCB0byBwcnVuZSB1bnJldGFpbmVk
IGljb25zIGZyb20gdGhlIG9uLWRpc2sgSWNvbkRhdGEgdGFibGUiKTsgICAgCisgICAgaWYgKCFt
X3N5bmNEQi5leGVjdXRlQ29tbWFuZCgiREVMRVRFIEZST00gSWNvbkluZm8gV0hFUkUgaWNvbklE
IE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIFBhZ2VVUkwpOyIpKQorICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBleGVjdXRlIFNRTCB0byBwcnVuZSB1bnJldGFpbmVkIGljb25zIGZyb20g
dGhlIG9uLWRpc2sgSWNvbkluZm8gdGFibGUiKTsgICAgCisgICAgCisgICAgcHJ1bmluZ1RyYW5z
YWN0aW9uLmNvbW1pdCgpOworICAgICAgICAKKyAgICBjaGVja0ZvckRhbmdsaW5nUGFnZVVSTHMo
dHJ1ZSk7CisKKyAgICBtX2luaXRpYWxQcnVuaW5nQ29tcGxldGUgPSB0cnVlOworfQorCitib29s
IFdlYkljb25EYXRhYmFzZUltcGw6OnNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKTsKKyAgICAKKyAgICByZXR1cm4gbV90aHJl
YWRUZXJtaW5hdGlvblJlcXVlc3RlZCB8fCBtX3JlbW92ZUljb25zUmVxdWVzdGVkOworfQorCit2
b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OnJlbW92ZVBhZ2VVUkxGcm9tU1FMRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7Cisg
ICAgCisgICAgcmVhZHlTUUxpdGVTdGF0ZW1lbnQobV9yZW1vdmVQYWdlVVJMU3RhdGVtZW50LCBt
X3N5bmNEQiwgIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgdXJsID0gKD8pOyIpOworICAgIG1f
cmVtb3ZlUGFnZVVSTFN0YXRlbWVudC0+YmluZFRleHQoMSwgcGFnZVVSTCk7CisKKyAgICBpZiAo
bV9yZW1vdmVQYWdlVVJMU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAg
ICAgTE9HX0VSUk9SKCJyZW1vdmVQYWdlVVJMRnJvbVNRTERhdGFiYXNlIGZhaWxlZCBmb3IgdXJs
ICVzIiwgdXJsRm9yTG9nZ2luZyhwYWdlVVJMKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgCisgICAg
bV9yZW1vdmVQYWdlVVJMU3RhdGVtZW50LT5yZXNldCgpOworfQorCitzdGF0aWMgaW50IGRhdGFi
YXNlVmVyc2lvbk51bWJlcihTUUxpdGVEYXRhYmFzZSYgZGIpCit7CisgICAgcmV0dXJuIFNRTGl0
ZVN0YXRlbWVudChkYiwgIlNFTEVDVCB2YWx1ZSBGUk9NIEljb25EYXRhYmFzZUluZm8gV0hFUkUg
a2V5ID0gJ1ZlcnNpb24nOyIpLmdldENvbHVtbkludCgwKTsKK30KKworc3RhdGljIGJvb2wgaXNW
YWxpZERhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYikKK3sKKyAgICAvLyBUaGVzZSBmb3VyIHRh
YmxlcyBzaG91bGQgYWx3YXlzIGV4aXN0IGluIGEgdmFsaWQgZGIKKyAgICBpZiAoIWRiLnRhYmxl
RXhpc3RzKCJJY29uSW5mbyIpIHx8ICFkYi50YWJsZUV4aXN0cygiSWNvbkRhdGEiKSB8fCAhZGIu
dGFibGVFeGlzdHMoIlBhZ2VVUkwiKSB8fCAhZGIudGFibGVFeGlzdHMoIkljb25EYXRhYmFzZUlu
Zm8iKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChkYXRhYmFzZVZlcnNp
b25OdW1iZXIoZGIpIDwgY3VycmVudERhdGFiYXNlVmVyc2lvbikgeworICAgICAgICBMT0coSWNv
bkRhdGFiYXNlLCAiREIgdmVyc2lvbiBpcyBub3QgZm91bmQgb3IgYmVsb3cgZXhwZWN0ZWQgdmFs
aWQgdmVyc2lvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OnBlcmZvcm1PcGVuSW5p
dGlhbGl6YXRpb24oKQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisgICAgCisg
ICAgaWYgKCFpc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjaGVja0lu
dGVncml0eU9uT3BlbikgeworICAgICAgICBjaGVja0ludGVncml0eU9uT3BlbiA9IGZhbHNlOwor
ICAgICAgICBpZiAoIWNoZWNrSW50ZWdyaXR5KCkpIHsKKyAgICAgICAgICAgIExPRyhJY29uRGF0
YWJhc2UsICJJbnRlZ3JpdHkgY2hlY2sgd2FzIGJhZCAtIGR1bXBpbmcgSWNvbkRhdGFiYXNlIik7
CisKKyAgICAgICAgICAgIG1fc3luY0RCLmNsb3NlKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zeW5jTG9jayk7Cisg
ICAgICAgICAgICAgICAgLy8gU2hvdWxkJ3ZlIGJlZW4gY29uc3VtZWQgYnkgU1FMaXRlLCBkZWxl
dGUganVzdCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc2VlIGl0IGFnYWluIGluIHRoZSBmdXR1cmU7
CisgICAgICAgICAgICAgICAgZGVsZXRlRmlsZShtX2NvbXBsZXRlRGF0YWJhc2VQYXRoICsgIi1q
b3VybmFsIik7CisgICAgICAgICAgICAgICAgZGVsZXRlRmlsZShtX2NvbXBsZXRlRGF0YWJhc2VQ
YXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUmVvcGVu
IHRoZSB3cml0ZSBkYXRhYmFzZSwgY3JlYXRpbmcgaXQgZnJvbSBzY3JhdGNoCisgICAgICAgICAg
ICBpZiAoIW1fc3luY0RCLm9wZW4obV9jb21wbGV0ZURhdGFiYXNlUGF0aCkpIHsKKyAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIGljb24gZGF0YWJhc2UgYXQgcGF0aCAl
cyAtICVzIiwgbV9jb21wbGV0ZURhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSwgbV9zeW5jREIu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0g
ICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50IHZlcnNpb24gPSBkYXRh
YmFzZVZlcnNpb25OdW1iZXIobV9zeW5jREIpOworICAgIAorICAgIGlmICh2ZXJzaW9uID4gY3Vy
cmVudERhdGFiYXNlVmVyc2lvbikgeworICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRGF0YWJh
c2UgdmVyc2lvbiBudW1iZXIgJWkgaXMgZ3JlYXRlciB0aGFuIG91ciBjdXJyZW50IHZlcnNpb24g
bnVtYmVyICVpIC0gY2xvc2luZyB0aGUgZGF0YWJhc2UgdG8gcHJldmVudCBvdmVyd3JpdGluZyBu
ZXdlciB2ZXJzaW9ucyIsIHZlcnNpb24sIGN1cnJlbnREYXRhYmFzZVZlcnNpb24pOworICAgICAg
ICBtX3N5bmNEQi5jbG9zZSgpOworICAgICAgICBtX3RocmVhZFRlcm1pbmF0aW9uUmVxdWVzdGVk
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzVmFsaWRE
YXRhYmFzZShtX3N5bmNEQikpIHsKKyAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIiVzIGlzIG1p
c3Npbmcgb3IgaW4gYW4gaW52YWxpZCBzdGF0ZSAtIHJlY29uc3RydWN0aW5nIiwgbV9jb21wbGV0
ZURhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIG1fc3luY0RCLmNsZWFyQWxs
VGFibGVzKCk7CisgICAgICAgIGNyZWF0ZURhdGFiYXNlVGFibGVzKG1fc3luY0RCKTsKKyAgICB9
CisKKyAgICAvLyBSZWR1Y2Ugc3FsaXRlIFJBTSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCAyMDAw
IHBhZ2VzICh+MS41a0IgcGVyIHBhZ2UpLiAzTUIgb2YgY2FjaGUgZm9yIGljb24gZGF0YWJhc2Ug
aXMgb3ZlcmtpbGwKKyAgICBpZiAoIVNRTGl0ZVN0YXRlbWVudChtX3N5bmNEQiwgIlBSQUdNQSBj
YWNoZV9zaXplID0gMjAwOyIpLmV4ZWN1dGVDb21tYW5kKCkpICAgICAgICAgCisgICAgICAgIExP
R19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQgY2FjaGVfc2l6ZSIpOworCisg
ICAgLy8gVGVsbCBiYWNrdXAgc29mdHdhcmUgKGkuZS4sIFRpbWUgTWFjaGluZSkgdG8gbmV2ZXIg
YmFjayB1cCB0aGUgaWNvbiBkYXRhYmFzZSwgYmVjYXVzZSAgCisgICAgLy8gaXQncyBhIGxhcmdl
IGZpbGUgdGhhdCBjaGFuZ2VzIGZyZXF1ZW50bHksIHRodXMgdXNpbmcgYSBsb3Qgb2YgYmFja3Vw
IGRpc2sgc3BhY2UsIGFuZCAKKyAgICAvLyBpdCdzIHVubGlrZWx5IHRoYXQgbWFueSB1c2VycyB3
b3VsZCBiZSB1cHNldCBhYm91dCBpdCBub3QgYmVpbmcgYmFja2VkIHVwLiBXZSBjb3VsZCAKKyAg
ICAvLyBtYWtlIHRoaXMgY29uZmlndXJhYmxlIG9uIGEgcGVyLWNsaWVudCBiYXNpcyBzb21lIGRh
eSBpZiBzb21lIGNsaWVudHMgZG9uJ3Qgd2FudCB0aGlzLgorICAgIGlmIChjYW5FeGNsdWRlRnJv
bUJhY2t1cCgpICYmICF3YXNFeGNsdWRlZEZyb21CYWNrdXAoKSAmJiBleGNsdWRlRnJvbUJhY2t1
cChtX2NvbXBsZXRlRGF0YWJhc2VQYXRoKSkKKyAgICAgICAgc2V0V2FzRXhjbHVkZWRGcm9tQmFj
a3VwKCk7Cit9CisKK3ZvaWQgV2ViSWNvbkRhdGFiYXNlSW1wbDo6cmVtb3ZlSWNvbkZyb21TUUxE
YXRhYmFzZShjb25zdCBTdHJpbmcmIGljb25VUkwpCit7CisgICAgQVNTRVJUX0lDT05fU1lOQ19U
SFJFQUQoKTsKKyAgICAKKyAgICBpZiAoaWNvblVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoZXJlIHdvdWxkIGJlIGEgdHJhbnNhY3Rpb24gaGVyZSB0byBtYWtlIHN1
cmUgdGhlc2UgcmVtb3ZhbHMgYXJlIGF0b21pYworICAgIC8vIEluIHByYWN0aWNlIHRoZSBvbmx5
IGNhbGxlciBvZiB0aGlzIG1ldGhvZCBpcyBhbHdheXMgd3JhcHBlZCBpbiBhIHRyYW5zYWN0aW9u
IGl0c2VsZiBzbyBwbGFjaW5nIGFub3RoZXIgaGVyZSBpcyB1bm5lY2Vzc2FyeQorICAgIAorICAg
IC8vIEl0J3MgcG9zc2libGUgdGhpcyBpY29uIGlzIG5vdCBpbiB0aGUgZGF0YWJhc2UgYmVjYXVz
ZSBvZiBjZXJ0YWluIHJhcGlkIGJyb3dzaW5nIHBhdHRlcm5zIChzdWNoIGFzIGEgc3RyZXNzIHRl
c3QpIHdoZXJlIHRoZQorICAgIC8vIGljb24gaXMgbWFya2VkIHRvIGJlIGFkZGVkIHRoZW4gbWFy
a2VkIGZvciByZW1vdmFsIGJlZm9yZSBpdCBpcyBldmVyIHdyaXR0ZW4gdG8gZGlzay4gIE5vIGJp
ZyBkZWFsLCBlYXJseSByZXR1cm4KKyAgICBpbnQ2NF90IGljb25JRCA9IGdldEljb25JREZvcklj
b25VUkxGcm9tU1FMRGF0YWJhc2UoaWNvblVSTCk7CisgICAgaWYgKCFpY29uSUQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICByZWFkeVNRTGl0ZVN0YXRlbWVudChtX2RlbGV0ZVBhZ2VVUkxz
Rm9ySWNvblVSTFN0YXRlbWVudCwgbV9zeW5jREIsICJERUxFVEUgRlJPTSBQYWdlVVJMIFdIRVJF
IFBhZ2VVUkwuaWNvbklEID0gKD8pOyIpOworICAgIG1fZGVsZXRlUGFnZVVSTHNGb3JJY29uVVJM
U3RhdGVtZW50LT5iaW5kSW50NjQoMSwgaWNvbklEKTsKKyAgICAKKyAgICBpZiAobV9kZWxldGVQ
YWdlVVJMc0Zvckljb25VUkxTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAg
ICAgICBMT0dfRVJST1IoIm1fZGVsZXRlUGFnZVVSTHNGb3JJY29uVVJMU3RhdGVtZW50IGZhaWxl
ZCBmb3IgdXJsICVzIiwgdXJsRm9yTG9nZ2luZyhpY29uVVJMKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgCisgICAgcmVhZHlTUUxpdGVTdGF0ZW1lbnQobV9kZWxldGVJY29uRnJvbUljb25JbmZvU3Rh
dGVtZW50LCBtX3N5bmNEQiwgIkRFTEVURSBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLmlj
b25JRCA9ICg/KTsiKTsKKyAgICBtX2RlbGV0ZUljb25Gcm9tSWNvbkluZm9TdGF0ZW1lbnQtPmJp
bmRJbnQ2NCgxLCBpY29uSUQpOworICAgIAorICAgIGlmIChtX2RlbGV0ZUljb25Gcm9tSWNvbklu
Zm9TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBMT0dfRVJST1Io
Im1fZGVsZXRlSWNvbkZyb21JY29uSW5mb1N0YXRlbWVudCBmYWlsZWQgZm9yIHVybCAlcyIsIHVy
bEZvckxvZ2dpbmcoaWNvblVSTCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAKKyAgICByZWFk
eVNRTGl0ZVN0YXRlbWVudChtX2RlbGV0ZUljb25Gcm9tSWNvbkRhdGFTdGF0ZW1lbnQsIG1fc3lu
Y0RCLCAiREVMRVRFIEZST00gSWNvbkRhdGEgV0hFUkUgSWNvbkRhdGEuaWNvbklEID0gKD8pOyIp
OworICAgIG1fZGVsZXRlSWNvbkZyb21JY29uRGF0YVN0YXRlbWVudC0+YmluZEludDY0KDEsIGlj
b25JRCk7CisgICAgCisgICAgaWYgKG1fZGVsZXRlSWNvbkZyb21JY29uRGF0YVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigibV9kZWxldGVJY29u
RnJvbUljb25EYXRhU3RhdGVtZW50IGZhaWxlZCBmb3IgdXJsICVzIiwgdXJsRm9yTG9nZ2luZyhp
Y29uVVJMKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIAorICAgIG1fZGVsZXRlUGFnZVVSTHNG
b3JJY29uVVJMU3RhdGVtZW50LT5yZXNldCgpOworICAgIG1fZGVsZXRlSWNvbkZyb21JY29uSW5m
b1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBtX2RlbGV0ZUljb25Gcm9tSWNvbkRhdGFTdGF0ZW1l
bnQtPnJlc2V0KCk7Cit9CisKK2Jvb2wgV2ViSWNvbkRhdGFiYXNlSW1wbDo6d2FzRXhjbHVkZWRG
cm9tQmFja3VwKCkKK3sKKyAgICBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpOworCisgICAgcmV0
dXJuIFNRTGl0ZVN0YXRlbWVudChtX3N5bmNEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIEljb25EYXRh
YmFzZUluZm8gV0hFUkUga2V5ID0gJ0V4Y2x1ZGVkRnJvbUJhY2t1cCc7IikuZ2V0Q29sdW1uSW50
KDApOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OnNldFdhc0V4Y2x1ZGVkRnJvbUJh
Y2t1cCgpCit7CisgICAgQVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKTsKKworICAgIFNRTGl0ZVN0
YXRlbWVudChtX3N5bmNEQiwgIklOU0VSVCBJTlRPIEljb25EYXRhYmFzZUluZm8gKGtleSwgdmFs
dWUpIFZBTFVFUyAoJ0V4Y2x1ZGVkRnJvbUJhY2t1cCcsIDEpIikuZXhlY3V0ZUNvbW1hbmQoKTsK
K30KKworYm9vbCBXZWJJY29uRGF0YWJhc2VJbXBsOjpjaGVja0ludGVncml0eSgpCit7CisgICAg
QVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKTsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW50
ZWdyaXR5KG1fc3luY0RCLCAiUFJBR01BIGludGVncml0eV9jaGVjazsiKTsKKyAgICBpZiAoaW50
ZWdyaXR5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoImNo
ZWNrSW50ZWdyaXR5IGZhaWxlZCB0byBleGVjdXRlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgaW50IHJlc3VsdENvZGUgPSBpbnRlZ3JpdHkuc3RlcCgpOworICAg
IGlmIChyZXN1bHRDb2RlID09IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgCisgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpbnQgY29sdW1ucyA9IGludGVncml0eS5jb2x1bW5Db3VudCgpOwor
ICAgIGlmIChjb2x1bW5zICE9IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJSZWNlaXZlZCAlaSBj
b2x1bW5zIHBlcmZvcm1pbmcgaW50ZWdyaXR5IGNoZWNrLCBzaG91bGQgYmUgMSIsIGNvbHVtbnMp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBTdHJpbmcgcmVz
dWx0VGV4dCA9IGludGVncml0eS5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICAKKyAgICAvLyBB
IHN1Y2Nlc3NmdWwsIG5vLWVycm9yIGludGVncml0eSBjaGVjayB3aWxsIGJlICJvayIgLSBhbGwg
b3RoZXIgc3RyaW5ncyBpbXBseSBmYWlsdXJlCisgICAgaWYgKHJlc3VsdFRleHQgPT0gIm9rIikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTE9HX0VSUk9SKCJJY29uIGRhdGFiYXNl
IGludGVncml0eSBjaGVjayBmYWlsZWQgLSBcbiVzIiwgcmVzdWx0VGV4dC5hc2NpaSgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkljb25EYXRhYmFzZUltcGw6OnJl
YWRGcm9tRGF0YWJhc2UoKQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisgICAg
CisjaWZuZGVmIE5ERUJVRworICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBjdXJyZW50VGltZSgpOwor
I2VuZGlmCisKKyAgICBib29sIGRpZEFueVdvcmsgPSBmYWxzZTsKKworICAgIC8vIFdlJ2xsIG1h
a2UgYSBjb3B5IG9mIHRoZSBzZXRzIG9mIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgcmVhZC4gIFRo
ZW4gd2UnbGwgdmVyaWZ5IGF0IHRoZSB0aW1lIG9mIHVwZGF0aW5nIHRoZSByZWNvcmQgdGhhdCBp
dCBzdGlsbCB3YW50cyB0byBiZSB1cGRhdGVkCisgICAgLy8gVGhpcyB3YXkgd2Ugd29uJ3QgaG9s
ZCB0aGUgbG9jayBmb3IgYSBsb25nIHBlcmlvZCBvZiB0aW1lCisgICAgVmVjdG9yPEljb25SZWNv
cmQqPiBpY29uczsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BlbmRpbmdS
ZWFkaW5nTG9jayk7CisgICAgICAgIGljb25zLmFwcGVuZFJhbmdlKG1faWNvbnNQZW5kaW5nUmVh
ZGluZy5iZWdpbigpLCBtX2ljb25zUGVuZGluZ1JlYWRpbmcuZW5kKCkpOworICAgIH0KKyAgICAK
KyAgICAvLyBLZWVwIHRyYWNrIG9mIGljb25zIHdlIGFjdHVhbGx5IHJlYWQgdG8gbm90aWZ5IHRo
ZW0gb2YgdGhlIG5ldyBpY29uICAgIAorICAgIEhhc2hTZXQ8U3RyaW5nPiB1cmxzVG9Ob3RpZnk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGljb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGRpZEFueVdvcmsgPSB0cnVlOworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGFGb3JJY29uVVJMRnJvbVNRTERhdGFiYXNlKGljb25z
W2ldLT5pY29uVVJMKCkpOworCisgICAgICAgIC8vIFZlcmlmeSB0aGlzIGljb24gc3RpbGwgd2Fu
dHMgdG8gYmUgcmVhZCBmcm9tIGRpc2sKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgdXJsTG9ja2VyKG1fdXJsQW5kSWNvbkxvY2spOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIE11dGV4TG9ja2VyIHJlYWRMb2NrZXIobV9wZW5kaW5nUmVhZGluZ0xvY2spOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtX2ljb25zUGVuZGluZ1JlYWRpbmcu
Y29udGFpbnMoaWNvbnNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3
IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWNvbnNbaV0tPnNldEltYWdlRGF0YShpbWFnZURh
dGEuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIHRoaXMgaWNvbiBmcm9tIHRoZSBzZXQgdGhhdCBuZWVkcyB0byBiZSByZWFkCisgICAg
ICAgICAgICAgICAgICAgIG1faWNvbnNQZW5kaW5nUmVhZGluZy5yZW1vdmUoaWNvbnNbaV0pOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNl
dCBvZiBhbGwgUGFnZSBVUkxzIHRoYXQgcmV0YWluIHRoaXMgaWNvbiBhcyB3ZWxsIGFzIGFsbCBQ
YWdlVVJMcyB3YWl0aW5nIGZvciBhbiBpY29uCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdh
bnQgdG8gZmluZCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIHR3byBzZXRzIHRvIG5vdGlmeSB0
aGVtCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBzaXplcyBvZiB0aGVzZSB0d28g
c2V0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+KiBvdXRlckhhc2g7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiogaW5uZXJIYXNoOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGljb25zW2ldLT5yZXRhaW5pbmdQYWdlVVJMcygp
LnNpemUoKSA+IG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29ucy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dGVySGFzaCA9ICZtX3BhZ2VVUkxzSW50ZXJlc3RlZEluSWNvbnM7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhhc2ggPSAmKGljb25zW2ldLT5yZXRhaW5p
bmdQYWdlVVJMcygpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlubmVySGFzaCA9ICZtX3BhZ2VVUkxzSW50ZXJlc3RlZEluSWNvbnM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRlckhhc2ggPSAmKGljb25zW2ldLT5yZXRhaW5pbmdQ
YWdlVVJMcygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gb3V0ZXJIYXNoLT5iZWdpbigpOworICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG91dGVySGFzaC0+ZW5kKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5uZXJIYXNoLT5jb250YWlucygqaXRlcikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiJXMgaXMgaW50ZXJlc3RpbmcgaW4gdGhlIGlj
b24gd2UganVzdCByZWFkLiAgQWRkaW5nIGl0IHRvIHRoZSBsaXN0IGFuZCByZW1vdmluZyBpdCBm
cm9tIHRoZSBpbnRlcmVzdGVkIHNldCIsIHVybEZvckxvZ2dpbmcoKml0ZXIpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzVG9Ob3RpZnkuYWRkKCppdGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZXZlciBnZXQgdG8gdGhlIHBvaW50IHdl
cmUgd2UndmUgc2VlbiBldmVyeSB1cmwgaW50ZXJlc3RlZCBpbiB0aGlzIGljb24sIGJyZWFrIGVh
cmx5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsc1RvTm90aWZ5LnNpemUoKSA9PSBt
X3BhZ2VVUkxzSW50ZXJlc3RlZEluSWNvbnMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG5vdGlmeSBhIFBhZ2VV
UkwgdHdpY2UsIHNvIGFsbCB0aGUgb25lcyB3ZSdyZSBhYm91dCB0byBub3RpZnkgY2FuIGJlIHJl
bW92ZWQgZnJvbSB0aGUgaW50ZXJlc3RlZCBzZXQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVy
bHNUb05vdGlmeS5zaXplKCkgPT0gbV9wYWdlVVJMc0ludGVyZXN0ZWRJbkljb25zLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29ucy5jbGVh
cigpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGl0ZXIgPSB1cmxzVG9Ob3RpZnkuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZCA9IHVybHNUb05vdGlmeS5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBp
dGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZVVS
THNJbnRlcmVzdGVkSW5JY29ucy5yZW1vdmUoKml0ZXIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAg
ICAgIGlmIChzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBk
aWRBbnlXb3JrOworCisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGRvbid0IGhvbGQgYW55IGxvY2tz
LCBwZXJmb3JtIHRoZSBhY3R1YWwgbm90aWZpY2F0aW9ucworICAgICAgICBIYXNoU2V0PFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ZXIgPSB1cmxzVG9Ob3RpZnkuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNl
dDxTdHJpbmc+OjppdGVyYXRvciBlbmQgPSB1cmxzVG9Ob3RpZnkuZW5kKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaXRlcmF0aW9uID0gMDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpdGVyYXRp
b24pIHsKKyAgICAgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJOb3RpZnlpbmcgaWNvbiByZWNl
aXZlZCBmb3IgcGFnZVVSTCAlcyIsIHVybEZvckxvZ2dpbmcoKml0ZXIpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpj
cmVhdGUodGhpcywgJldlYkljb25EYXRhYmFzZUltcGw6OmRpc3BhdGNoRGlkSW1wb3J0SWNvbkZv
clBhZ2VVUkwsICppdGVyKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcFRocmVhZEFjdGl2
aXR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpZEFueVdvcms7CisgICAgICAgIH0KKwor
ICAgICAgICBMT0coSWNvbkRhdGFiYXNlLCAiRG9uZSBub3RpZnlpbmcgJWkgcGFnZVVSTHMgd2hv
IGp1c3QgcmVjZWl2ZWQgdGhlaXIgaWNvbnMiLCB1cmxzVG9Ob3RpZnkuc2l6ZSgpKTsKKyAgICAg
ICAgdXJsc1RvTm90aWZ5LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkU3Rv
cFRocmVhZEFjdGl2aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZGlkQW55V29yazsKKyAgICB9
CisKKyAgICBMT0coSWNvbkRhdGFiYXNlLCAiUmVhZGluZyBmcm9tIGRhdGFiYXNlIHRvb2sgJS40
ZiBzZWNvbmRzIiwgY3VycmVudFRpbWUoKSAtIHRpbWVTdGFtcCk7CisKKyAgICByZXR1cm4gZGlk
QW55V29yazsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYkljb25EYXRhYmFzZUlt
cGw6OmdldEltYWdlRGF0YUZvckljb25VUkxGcm9tU1FMRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBp
Y29uVVJMKQoreworICAgIEFTU0VSVF9JQ09OX1NZTkNfVEhSRUFEKCk7CisgICAgCisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gaW1hZ2VEYXRhOworICAgIAorICAgIHJlYWR5U1FMaXRlU3RhdGVt
ZW50KG1fZ2V0SW1hZ2VEYXRhRm9ySWNvblVSTFN0YXRlbWVudCwgbV9zeW5jREIsICJTRUxFQ1Qg
SWNvbkRhdGEuZGF0YSBGUk9NIEljb25EYXRhIFdIRVJFIEljb25EYXRhLmljb25JRCBJTiAoU0VM
RUNUIGljb25JRCBGUk9NIEljb25JbmZvIFdIRVJFIEljb25JbmZvLnVybCA9ICg/KSk7Iik7Cisg
ICAgbV9nZXRJbWFnZURhdGFGb3JJY29uVVJMU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBpY29uVVJM
KTsKKyAgICAKKyAgICBpbnQgcmVzdWx0ID0gbV9nZXRJbWFnZURhdGFGb3JJY29uVVJMU3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIG1fZ2V0SW1hZ2VEYXRhRm9ySWNvblVSTFN0YXRl
bWVudC0+Z2V0Q29sdW1uQmxvYkFzVmVjdG9yKDAsIGRhdGEpOworICAgICAgICBpbWFnZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIH0g
ZWxzZSBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIExPR19FUlJPUigiZ2V0
SW1hZ2VEYXRhRm9ySWNvblVSTEZyb21TUUxEYXRhYmFzZSBmYWlsZWQgZm9yIHVybCAlcyIsIHVy
bEZvckxvZ2dpbmcoaWNvblVSTCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9nZXRJbWFnZURh
dGFGb3JJY29uVVJMU3RhdGVtZW50LT5yZXNldCgpOworICAgIAorICAgIHJldHVybiBpbWFnZURh
dGEucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkljb25EYXRhYmFzZUltcGw6OmNoZWNrRm9yRGFu
Z2xpbmdQYWdlVVJMcyhib29sIHBydW5lSWZGb3VuZCkKK3sKKyAgICBBU1NFUlRfSUNPTl9TWU5D
X1RIUkVBRCgpOworCisgICAgLy8gVGhpcyBjaGVjayBjYW4gYmUgcmVsYXRpdmVseSBleHBlbnNp
dmUgc28gd2UgZG9uJ3QgZG8gaXQgaW4gYSByZWxlYXNlIGJ1aWxkIHVubGVzcyB0aGUgY2FsbGVy
IGhhcyBhc2tlZCB1cyB0byBwcnVuZSBhbnkgZGFuZ2xpbmcKKyAgICAvLyBlbnRyaWVzLiAgV2Ug
YWxzbyBkb24ndCB3YW50IHRvIGtlZXAgcGVyZm9ybWluZyB0aGlzIGNoZWNrIGFuZCByZXBvcnRp
bmcgdGhpcyBlcnJvciBpZiBpdCBoYXMgYWxyZWFkeSBmb3VuZCBkYW5nbGVycyBiZWZvcmUgc28g
d2UKKyAgICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgd2UndmUgZm91bmQgYW55LiAgV2Ugc2tp
cCB0aGUgY2hlY2sgaW4gdGhlIHJlbGVhc2UgYnVpbGQgcHJldGVuZGluZyB0byBoYXZlIGFscmVh
ZHkgZm91bmQgZGFuZ2xlcnMgYWxyZWFkeS4KKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGJv
b2wgZGFuZ2xlcnNGb3VuZCA9IHRydWU7CisjZWxzZQorICAgIHN0YXRpYyBib29sIGRhbmdsZXJz
Rm91bmQgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKChwcnVuZUlmRm91bmQgfHwgIWRhbmds
ZXJzRm91bmQpICYmIFNRTGl0ZVN0YXRlbWVudChtX3N5bmNEQiwgIlNFTEVDVCB1cmwgRlJPTSBQ
YWdlVVJMIFdIRVJFIFBhZ2VVUkwuaWNvbklEIE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIElj
b25JbmZvKSBMSU1JVCAxOyIpLnJldHVybnNBdExlYXN0T25lUmVzdWx0KCkpIHsKKyAgICAgICAg
ZGFuZ2xlcnNGb3VuZCA9IHRydWU7CisgICAgICAgIExPRyhJY29uRGF0YWJhc2UsICJEYW5nbGlu
ZyBQYWdlVVJMIGVudHJpZXMgZm91bmQiKTsKKyAgICAgICAgaWYgKHBydW5lSWZGb3VuZCAmJiAh
bV9zeW5jREIuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9NIFBhZ2VVUkwgV0hFUkUgaWNvbklE
IE5PVCBJTiAoU0VMRUNUIGljb25JRCBGUk9NIEljb25JbmZvKTsiKSkKKyAgICAgICAgICAgIExP
RyhJY29uRGF0YWJhc2UsICJVbmFibGUgdG8gcHJ1bmUgZGFuZ2xpbmcgUGFnZVVSTHMiKTsKKyAg
ICB9Cit9CisKK3ZvaWQqIFdlYkljb25EYXRhYmFzZUltcGw6OmNsZWFudXBTeW5jVGhyZWFkKCkK
K3sKKyAgICBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpOworICAgIAorI2lmbmRlZiBOREVCVUcK
KyAgICBkb3VibGUgdGltZVN0YW1wID0gY3VycmVudFRpbWUoKTsKKyNlbmRpZiAKKworICAgIC8v
IElmIHRoZSByZW1vdmVJY29ucyBmbGFnIGlzIHNldCwgcmVtb3ZlIGFsbCBpY29ucyBmcm9tIHRo
ZSBkYi4KKyAgICBpZiAobV9yZW1vdmVJY29uc1JlcXVlc3RlZCkKKyAgICAgICAgcmVtb3ZlQWxs
SWNvbnNPblRocmVhZCgpOworCisgICAgLy8gU3luYyByZW1haW5pbmcgaWNvbnMgb3V0CisgICAg
TE9HKEljb25EYXRhYmFzZSwgIihUSFJFQUQpIERvaW5nIGZpbmFsIHdyaXRlb3V0IGFuZCBjbG9z
dXJlIG9mIHN5bmMgdGhyZWFkIik7CisgICAgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAgCisgICAg
Ly8gQ2xvc2UgdGhlIGRhdGFiYXNlCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xvY2sp
OworICAgIAorICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBTdHJpbmcoKTsKKyAgICBtX2NvbXBs
ZXRlRGF0YWJhc2VQYXRoID0gU3RyaW5nKCk7CisgICAgZGVsZXRlQWxsUHJlcGFyZWRTdGF0ZW1l
bnRzKCk7ICAgIAorICAgIG1fc3luY0RCLmNsb3NlKCk7CisgICAgCisjaWZuZGVmIE5ERUJVRwor
ICAgIExPRyhJY29uRGF0YWJhc2UsICIoVEhSRUFEKSBGaW5hbCBjbG9zdXJlIHRvb2sgJS40ZiBz
ZWNvbmRzIiwgY3VycmVudFRpbWUoKSAtIHRpbWVTdGFtcCk7CisjZW5kaWYKKyAgICAKKyAgICBt
X3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7CisgICAgcmV0dXJuIDA7Cit9CisKKworLy8gKioq
KioqKioqKioqKioqKioqCisvLyAqKiogQW55IFRocmVhZCAqKioKKy8vICoqKioqKioqKioqKioq
KioqKgorCisvLyBVbmxpa2UgZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKCksIGdldE9yQ3JlYXRl
SWNvblJlY29yZCgpIGRvZXMgbm90IG1hcmsgdGhlIGljb24gYXMgImludGVyZXN0ZWQgaW4gaW1w
b3J0IgorUGFzc1JlZlB0cjxJY29uUmVjb3JkPiBXZWJJY29uRGF0YWJhc2VJbXBsOjpnZXRPckNy
ZWF0ZUljb25SZWNvcmQoY29uc3QgU3RyaW5nJiBpY29uVVJMKQoreworICAgIC8vIENsaWVudHMg
b2YgZ2V0T3JDcmVhdGVJY29uUmVjb3JkKCkgYXJlIHJlcXVpcmVkIHRvIGFjcXVpcmUgdGhlIG1f
dXJsQW5kSWNvbkxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QKKyAgICBBU1NFUlQoIW1f
dXJsQW5kSWNvbkxvY2sudHJ5TG9jaygpKTsKKworICAgIGlmIChJY29uUmVjb3JkKiBpY29uID0g
bV9pY29uVVJMVG9SZWNvcmRNYXAuZ2V0KGljb25VUkwpKQorICAgICAgICByZXR1cm4gaWNvbjsK
KworICAgIFJlZlB0cjxJY29uUmVjb3JkPiBuZXdJY29uID0gSWNvblJlY29yZDo6Y3JlYXRlKGlj
b25VUkwpOworICAgIG1faWNvblVSTFRvUmVjb3JkTWFwLnNldChpY29uVVJMLCBuZXdJY29uLmdl
dCgpKTsKKworICAgIHJldHVybiBuZXdJY29uLnJlbGVhc2UoKTsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25E
YXRhYmFzZUltcGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2VJbXBsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyAKKyNpZm5kZWYgV2ViSWNvbkRhdGFiYXNlSW1wbF9oCisjZGVmaW5lIFdlYkljb25EYXRh
YmFzZUltcGxfaAorCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9J
Y29uRGF0YWJhc2VCYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JY29uUmVjb3JkLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CitjbGFzcyBJ
Y29uUmVjb3JkOworY2xhc3MgSWNvblNuYXBzaG90OworY2xhc3MgS1VSTDsKK2NsYXNzIFBhZ2VV
UkxSZWNvcmQ7CitjbGFzcyBQYWdlVVJMU25hcHNob3Q7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7IAorCitjbGFzcyBXZWJJY29uRGF0YWJhc2VJbXBsQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VV
UkwoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRJbXBvcnRJY29uRGF0
YUZvckljb25VUkwoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlbW92ZUFsbEljb25zKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hVUkxJbXBv
cnQoKSA9IDA7CisgICAgCisgICAgdmlydHVhbCB+V2ViSWNvbkRhdGFiYXNlSW1wbENsaWVudCgp
IHsgfQorfTsKKworY2xhc3MgV2ViSWNvbkRhdGFiYXNlSW1wbCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxXZWJJY29uRGF0YWJhc2VJbXBsPnsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXZWJJY29uRGF0YWJhc2VJbXBsKTsKKyAgICAKKy8vICoqKiBNYWluIFRocmVhZCBPbmx5ICoq
KgorcHVibGljOgorICAgIFdlYkljb25EYXRhYmFzZUltcGwoV2ViSWNvbkRhdGFiYXNlSW1wbENs
aWVudCopOworICAgIAorICAgIGJvb2wgb3Blbihjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZv
aWQgY2xvc2UoKTsKKyAgICAgICAgICAgIAorICAgIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKTsKKwor
ICAgIHZvaWQgcmVhZEljb25Gb3JQYWdlVVJMRnJvbURpc2soY29uc3QgU3RyaW5nJik7CisKKyAg
ICB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVs
ZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0SWNvbkRhdGFG
b3JJY29uVVJMKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRhLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHNldEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgaWNv
blVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKTsKKworLy8gICAgSW1hZ2UqIHN5bmNocm9ub3Vz
SWNvbkRhdGFGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFNpemUmKTsKKy8vICAg
IFN0cmluZyBzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworLy8g
ICAgYm9vbCBzeW5jaHJvbm91c0ljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYp
OworICAgIFdlYkNvcmU6Okljb25Mb2FkRGVjaXNpb24gc3luY2hyb25vdXNMb2FkRGVjaXNpb25G
b3JJY29uVVJMKGNvbnN0IFN0cmluZyYpOyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZWxh
eURhdGFiYXNlQ2xlYW51cCgpOworICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJhc2VDbGVhbnVw
KCk7CisgICAgc3RhdGljIHZvaWQgY2hlY2tJbnRlZ3JpdHlCZWZvcmVPcGVuaW5nKCk7CisgICAg
ICAgIAorICAgIC8vIFN1cHBvcnQgZm9yIFdlYkNvcmVTdGF0aXN0aWNzIGluIFdlYktpdAorICAg
IHNpemVfdCBwYWdlVVJMTWFwcGluZ0NvdW50KCk7CisgICAgc2l6ZV90IHJldGFpbmVkUGFnZVVS
TENvdW50KCk7CisgICAgc2l6ZV90IGljb25SZWNvcmRDb3VudCgpOworICAgIHNpemVfdCBpY29u
UmVjb3JkQ291bnRXaXRoRGF0YSgpOworCitwcml2YXRlOgorICAgIH5XZWJJY29uRGF0YWJhc2VJ
bXBsKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoRGlkSW1wb3J0SWNvbkZvclBhZ2VVUkwoU3RyaW5n
KTsKKyAgICB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoU3RyaW5nKTsKKyAg
ICB2b2lkIGRpc3BhdGNoRGlkUmVtb3ZlQWxsSWNvbnMoKTsKKyAgICB2b2lkIGRpc3BhdGNoRGlk
RmluaXNoVVJMSW1wb3J0KCk7CisgICAgCisgICAgdm9pZCB3YWtlU3luY1RocmVhZCgpOworICAg
IHZvaWQgc2NoZWR1bGVPckRlZmVyU3luY1RpbWVyKCk7CisKKyAgICB2b2lkIHN5bmNUaW1lckZp
cmVkKCk7CisgICAgUnVuTG9vcDo6VGltZXI8V2ViSWNvbkRhdGFiYXNlSW1wbD4gbV9zeW5jVGlt
ZXI7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fc3luY1RocmVhZDsKKyAgICBib29sIG1fc3lu
Y1RocmVhZFJ1bm5pbmc7CisgICAgCisgICAgUmVmUHRyPFdlYkNvcmU6Okljb25SZWNvcmQ+IG1f
ZGVmYXVsdEljb25SZWNvcmQ7CisgICAgCisgICAgV2ViSWNvbkRhdGFiYXNlSW1wbENsaWVudCog
bV9jbGllbnQ7CisKKy8vICoqKiBBbnkgVGhyZWFkICoqKgorcHVibGljOgorICAgIGJvb2wgaXNP
cGVuKCkgY29uc3Q7CisgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHN0YXRp
YyBTdHJpbmcgZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKKworcHJpdmF0ZToKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6Okljb25SZWNvcmQ+IGdldE9yQ3JlYXRlSWNvblJlY29yZChjb25zdCBT
dHJpbmcmIGljb25VUkwpOworICAgIFdlYkNvcmU6OlBhZ2VVUkxSZWNvcmQqIGdldE9yQ3JlYXRl
UGFnZVVSTFJlY29yZChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpOworICAgIAorICAgIGJvb2wgbV9p
c0VuYWJsZWQ7CisgICAgCisgICAgbXV0YWJsZSBNdXRleCBtX3N5bmNMb2NrOworICAgIFRocmVh
ZENvbmRpdGlvbiBtX3N5bmNDb25kaXRpb247CisgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3Rv
cnk7CisgICAgLy8gSG9sZGluZyBtX3N5bmNMb2NrIGlzIHJlcXVpcmVkIHdoZW4gYWNjZXNzaW5n
IG1fY29tcGxldGVEYXRhYmFzZVBhdGgKKyAgICBTdHJpbmcgbV9jb21wbGV0ZURhdGFiYXNlUGF0
aDsKKworICAgIGJvb2wgbV90aHJlYWRUZXJtaW5hdGlvblJlcXVlc3RlZDsKKyAgICBib29sIG1f
cmVtb3ZlSWNvbnNSZXF1ZXN0ZWQ7CisgICAgYm9vbCBtX2ljb25VUkxJbXBvcnRDb21wbGV0ZTsK
KyAgICBib29sIG1fZGlzYWJsZWRTdWRkZW5UZXJtaW5hdGlvbkZvclN5bmNUaHJlYWQ7CisKKyAg
ICBNdXRleCBtX3VybEFuZEljb25Mb2NrOworICAgIC8vIEhvbGRpbmcgbV91cmxBbmRJY29uTG9j
ayBpcyByZXF1aXJlZCB3aGVuIGFjY2Vzc2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBkYXRhIHN0
cnVjdHVyZXMgb3IgdGhlIG9iamVjdHMgdGhleSBjb250YWluCisgICAgSGFzaE1hcDxTdHJpbmcs
IFdlYkNvcmU6Okljb25SZWNvcmQqPiBtX2ljb25VUkxUb1JlY29yZE1hcDsKKyAgICBIYXNoTWFw
PFN0cmluZywgV2ViQ29yZTo6UGFnZVVSTFJlY29yZCo+IG1fcGFnZVVSTFRvUmVjb3JkTWFwOwor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JldGFpbmVkUGFnZVVSTHM7CisKKyAgICBNdXRleCBtX3Bl
bmRpbmdTeW5jTG9jazsKKyAgICAvLyBIb2xkaW5nIG1fcGVuZGluZ1N5bmNMb2NrIGlzIHJlcXVp
cmVkIHdoZW4gYWNjZXNzaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlcwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpQYWdlVVJMU25hcHNob3Q+IG1fcGFnZVVSTHNQ
ZW5kaW5nU3luYzsKKyAgICBIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6SWNvblNuYXBzaG90PiBt
X2ljb25zUGVuZGluZ1N5bmM7CisgICAgCisgICAgTXV0ZXggbV9wZW5kaW5nUmVhZGluZ0xvY2s7
ICAgIAorICAgIC8vIEhvbGRpbmcgbV9wZW5kaW5nU3luY0xvY2sgaXMgcmVxdWlyZWQgd2hlbiBh
Y2Nlc3NpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIC0gd2hlbiBkZWFs
aW5nIHdpdGggSWNvblJlY29yZCpzLCBob2xkaW5nIG1fdXJsQW5kSWNvbkxvY2sgaXMgYWxzbyBy
ZXF1aXJlZAorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3BhZ2VVUkxzUGVuZGluZ0ltcG9ydDsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9wYWdlVVJMc0ludGVyZXN0ZWRJbkljb25zOworICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6SWNvblJlY29yZCo+IG1faWNvbnNQZW5kaW5nUmVhZGluZzsKKworLy8gKioq
IFN5bmMgVGhyZWFkIE9ubHkgKioqCitwdWJsaWM6CisgICAgLy8gU2hvdWxkIGJlIHVzZWQgb25s
eSBvbiB0aGUgc3luYyB0aHJlYWQgYW5kIG9ubHkgYnkgdGhlIFNhZmFyaSAyIEljb25zIGltcG9y
dCBwcm9jZWR1cmUKKyAgICB2b2lkIGltcG9ydEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYgaWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKTsKKyAgICB2b2lkIGltcG9ydEljb25E
YXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29u
c3QgU3RyaW5nJiBpY29uVVJMKTsKKyAgICAKKyAgICBib29sIHNob3VsZFN0b3BUaHJlYWRBY3Rp
dml0eSgpIGNvbnN0OworCitwcml2YXRlOiAgICAKKyAgICBzdGF0aWMgdm9pZCogaWNvbkRhdGFi
YXNlU3luY1RocmVhZFN0YXJ0KHZvaWQgKik7CisgICAgdm9pZCogaWNvbkRhdGFiYXNlU3luY1Ro
cmVhZCgpOworICAgIAorICAgIC8vIFRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgbWV0aG9kcyBhcmUg
Y2FsbGVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBzeW5jIHRocmVhZCB0byBtYW5hZ2UgaS9vIHRvIGFu
ZCBmcm9tIHRoZSBkYXRhYmFzZQorICAgIC8vIEVhY2ggbWV0aG9kIHNob3VsZCBwZXJpb2RpY2Fs
bHkgbW9uaXRvciBtX3RocmVhZFRlcm1pbmF0aW9uUmVxdWVzdGVkIHdoZW4gaXQgbWFrZXMgc2Vu
c2UgdG8gcmV0dXJuIGVhcmx5IG9uIHNodXRkb3duCisgICAgdm9pZCBwZXJmb3JtT3BlbkluaXRp
YWxpemF0aW9uKCk7CisgICAgYm9vbCBjaGVja0ludGVncml0eSgpOworICAgIHZvaWQgcGVyZm9y
bVVSTEltcG9ydCgpOworICAgIHZvaWQqIHN5bmNUaHJlYWRNYWluTG9vcCgpOworICAgIGJvb2wg
cmVhZEZyb21EYXRhYmFzZSgpOworICAgIGJvb2wgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAgdm9p
ZCBwcnVuZVVucmV0YWluZWRJY29ucygpOworICAgIHZvaWQgY2hlY2tGb3JEYW5nbGluZ1BhZ2VV
UkxzKGJvb2wgcHJ1bmVJZkZvdW5kKTsKKyAgICB2b2lkIHJlbW92ZUFsbEljb25zT25UaHJlYWQo
KTsKKyAgICB2b2lkIGRlbGV0ZUFsbFByZXBhcmVkU3RhdGVtZW50cygpOworICAgIHZvaWQqIGNs
ZWFudXBTeW5jVGhyZWFkKCk7CisKKyAgICAvLyBSZWNvcmQgKG9uIGRpc2spIHdoZXRoZXIgb3Ig
bm90IFNhZmFyaSAyLXN0eWxlIGljb25zIHdlcmUgaW1wb3J0ZWQgKG9uY2UgcGVyIGRhdGFhYnNl
KQorICAgIGJvb2wgaW1wb3J0ZWQoKTsKKyAgICB2b2lkIHNldEltcG9ydGVkKGJvb2wpOworICAg
IAorICAgIGJvb2wgd2FzRXhjbHVkZWRGcm9tQmFja3VwKCk7CisgICAgdm9pZCBzZXRXYXNFeGNs
dWRlZEZyb21CYWNrdXAoKTsKKworICAgIGJvb2wgbV9pbml0aWFsUHJ1bmluZ0NvbXBsZXRlOwor
ICAgICAgICAKKyAgICB2b2lkIHNldEljb25VUkxGb3JQYWdlVVJMSW5TUUxEYXRhYmFzZShjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEljb25JREZvclBhZ2VVUkxJ
blNRTERhdGFiYXNlKGludDY0X3QsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlUGFn
ZVVSTEZyb21TUUxEYXRhYmFzZShjb25zdCBTdHJpbmcmIHBhZ2VVUkwpOworICAgIGludDY0X3Qg
Z2V0SWNvbklERm9ySWNvblVSTEZyb21TUUxEYXRhYmFzZShjb25zdCBTdHJpbmcmIGljb25VUkwp
OworICAgIGludDY0X3QgYWRkSWNvblVSTFRvU1FMRGF0YWJhc2UoY29uc3QgU3RyaW5nJik7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGdldEltYWdlRGF0YUZvckljb25V
UkxGcm9tU1FMRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpY29uVVJMKTsKKyAgICB2b2lkIHJlbW92
ZUljb25Gcm9tU1FMRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpY29uVVJMKTsKKyAgICB2b2lkIHdy
aXRlSWNvblNuYXBzaG90VG9TUUxEYXRhYmFzZShjb25zdCBXZWJDb3JlOjpJY29uU25hcHNob3Qm
KTsgICAgCisgICAgCisgICAgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9zeW5jREI7CisgICAg
CisgICAgLy8gVHJhY2sgd2hldGhlciB0aGUgIlNhZmFyaSAyIiBpbXBvcnQgaXMgY29tcGxldGUg
YW5kL29yIHNldCBpbiB0aGUgZGF0YWJhc2UKKyAgICBib29sIG1faW1wb3J0ZWQ7CisgICAgYm9v
bCBtX2lzSW1wb3J0ZWRTZXQ7CisgICAgCisgICAgT3duUHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9zZXRJY29uSURGb3JQYWdlVVJMU3RhdGVtZW50OworICAgIE93blB0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVtb3ZlUGFnZVVSTFN0YXRlbWVudDsKKyAgICBPd25QdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEljb25JREZvckljb25VUkxTdGF0ZW1lbnQ7
CisgICAgT3duUHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRJbWFnZURhdGFGb3JJ
Y29uVVJMU3RhdGVtZW50OworICAgIE93blB0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
YWRkSWNvblRvSWNvbkluZm9TdGF0ZW1lbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9hZGRJY29uVG9JY29uRGF0YVN0YXRlbWVudDsKKyAgICBPd25QdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEltYWdlRGF0YVN0YXRlbWVudDsKKyAgICBPd25QdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RlbGV0ZVBhZ2VVUkxzRm9ySWNvblVSTFN0YXRl
bWVudDsKKyAgICBPd25QdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RlbGV0ZUljb25G
cm9tSWNvbkluZm9TdGF0ZW1lbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4gbV9kZWxldGVJY29uRnJvbUljb25EYXRhU3RhdGVtZW50OworICAgIE93blB0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlSWNvbkluZm9TdGF0ZW1lbnQ7CisgICAgT3duUHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVJY29uRGF0YVN0YXRlbWVudDsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NldEljb25JbmZvU3RhdGVtZW50
OworICAgIE93blB0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc2V0SWNvbkRhdGFTdGF0
ZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkljb25E
YXRhYmFzZUltcGxfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2
ICszMTAsOCBAQAogCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRN
ZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTUzNTY5QjEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50Lmgg
Ki87IH07CiAJCTUxNTc4QjgzMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTU3OEI4MjEyMDlFQ0VGMDBB
MzdDNEEgLyogV2ViRGF0YS5oICovOyB9OwogCQk1MTYwQkZFMTEzMzgxREY5MDA5MTg5OTkgLyog
TG9nZ2luZy5tYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYwQkZFMDEzMzgxREY5MDA5MTg5OTkgLyogTG9nZ2luZy5tYWMubW0gKi87IH07CisJ
CTUxNjBCRkU0MTMzODJDMjEwMDkxODk5OSAvKiBXZWJJY29uRGF0YWJhc2VJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBCRkUyMTMzODJD
MjEwMDkxODk5OSAvKiBXZWJJY29uRGF0YWJhc2VJbXBsLmNwcCAqLzsgfTsKKwkJNTE2MEJGRTUx
MzM4MkMyMTAwOTE4OTk5IC8qIFdlYkljb25EYXRhYmFzZUltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBCRkUzMTMzODJDMjEwMDkxODk5OSAv
KiBXZWJJY29uRGF0YWJhc2VJbXBsLmggKi87IH07CiAJCTUxNkE0QTVEMTIwQTJDQ0QwMEMwNUI3
RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi87IH07CiAJCTUx
ODcxQjVCMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg3MUI1OTEyN0NCODlEMDBGNzYy
MzIgLyogV2ViQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBGNzYy
MzIgLyogV2ViQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxODcxQjVBMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5o
ICovOyB9OwpAQCAtMTE2Niw2ICsxMTY4LDggQEAKIAkJNTE1MzU2OUIxMjkxQjFEMjAwMDc0OURD
IC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTE1NzhCODIxMjA5RUNFRjAwQTM3QzRBIC8qIFdlYkRhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTYwQkZFMDEzMzgxREY5MDA5MTg5OTkgLyogTG9nZ2luZy5tYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nLm1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2MEJGRTIxMzM4MkMyMTAwOTE4OTk5IC8qIFdlYklj
b25EYXRhYmFzZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViSWNvbkRhdGFiYXNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUx
NjBCRkUzMTMzODJDMjEwMDkxODk5OSAvKiBXZWJJY29uRGF0YWJhc2VJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZUltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0IzMTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDgzLDYgKzI0ODcs
OCBAQAogCQkJCTUxMUIyNEE4MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3Bw
ICovLAogCQkJCTUxMUIyNEE5MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCAq
LywKIAkJCQk1MTg0QkM0QTEzMkU5MDdBMDA2QjlFMjggLyogV2ViSWNvbkRhdGFiYXNlLm1lc3Nh
Z2VzLmluICovLAorCQkJCTUxNjBCRkUyMTMzODJDMjEwMDkxODk5OSAvKiBXZWJJY29uRGF0YWJh
c2VJbXBsLmNwcCAqLywKKwkJCQk1MTYwQkZFMzEzMzgyQzIxMDA5MTg5OTkgLyogV2ViSWNvbkRh
dGFiYXNlSW1wbC5oICovLAogCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3JQcm94eS5jcHAgKi8sCiAJCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYklu
c3BlY3RvclByb3h5LmggKi8sCiAJCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtMzUzNyw2ICszNTQzLDcgQEAKIAkJCQk1
MTFCMjRBQjEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQwMkY2QTEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDAyRjZDMTMyRUM3MzcwMEJFQUE5NiAvKiBXZWJJ
Y29uRGF0YWJhc2VQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTYwQkZFNTEz
MzgyQzIxMDA5MTg5OTkgLyogV2ViSWNvbkRhdGFiYXNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC00MTUwLDYgKzQxNTcsNyBAQAogCQkJCTUxRDAyRjY0MTMyRUM1QjkwMEJFQUE5NiAvKiBXZWJJ
Y29uRGF0YWJhc2VNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJG
NkIxMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjBCRkUxMTMzODFERjkwMDkxODk5OSAvKiBMb2dn
aW5nLm1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNjBCRkU0MTMzODJDMjEwMDkxODk5OSAv
KiBXZWJJY29uRGF0YWJhc2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYklj
b25EYXRhYmFzZVByb3h5LmNwcAkocmV2aXNpb24gODE2NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9XZWJJY29uRGF0YWJhc2VQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6cmVsZWFz
ZUljb25GbwogSW1hZ2UqIFdlYkljb25EYXRhYmFzZVByb3h5OjpzeW5jaHJvbm91c0ljb25Gb3JQ
YWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VsdDsKLSAgICBpZiAoIW1fcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlOjpJY29uRGF0YUZv
clBhZ2VVUkwocGFnZVVSTCksIE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6Okljb25EYXRhRm9y
UGFnZVVSTDo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgaWYgKCFtX3Byb2Nlc3MtPmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6U3luY2hyb25vdXNJY29u
RGF0YUZvclBhZ2VVUkwocGFnZVVSTCksIE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6OlN5bmNo
cm9ub3VzSWNvbkRhdGFGb3JQYWdlVVJMOjpSZXBseShyZXN1bHQpLCAwKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCiAgICAgLy8gRklYTUU6IFJldHVybiBJbWFnZSBjcmVhdGVkIHdpdGggdGhl
IGFib3ZlIGRhdGEuCkBAIC0xMTEsNiArMTExLDE3IEBAIGJvb2wgV2ViSWNvbkRhdGFiYXNlUHJv
eHk6OnN1cHBvcnRzQXN5bmMKIAogdm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6bG9hZERlY2lz
aW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiBjYWxsYmFjaykKIHsKKyAgICB1aW50NjRfdCBpZCA9
IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CisgICAgbV9pY29uTG9hZERlY2lzaW9uQ2FsbGJhY2tz
LmFkZChpZCwgY2FsbGJhY2spOworICAgIAorICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6OkdldExvYWREZWNpc2lvbkZvckljb25VUkwo
aWNvblVSTCwgaWQpLCAwKTsKK30KKwordm9pZCBXZWJJY29uRGF0YWJhc2VQcm94eTo6cmVjZWl2
ZWRJY29uTG9hZERlY2lzaW9uKGludCBkZWNpc2lvbiwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sK
KyAgICBSZWZQdHI8V2ViQ29yZTo6SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiBjYWxsYmFjayA9
IG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOworICAgIGlmIChj
YWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFjayhzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpJY29uTG9hZERlY2lzaW9uPihkZWNpc2lvbikpOwogfQogCiB2b2lkIFdlYkljb25E
YXRhYmFzZVByb3h5OjppY29uRGF0YUZvckljb25VUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6Okljb25EYXRhQ2FsbGJhY2s+IGNhbGxiYWNrKQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZS9X
ZWJJY29uRGF0YWJhc2VQcm94eS5oCShyZXZpc2lvbiA4MTY3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlL1dlYkljb25EYXRhYmFzZVByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNl
QmFzZS5oPgogCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CkBAIC02Niw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBBc3luY2hyb25vdXMgY2FsbHMgd2Ug
c2hvdWxkIHVzZSB0byByZXBsYWNlIHRoZSBhYm92ZSB3aGVuIHN1cHBvcnRlZC4KICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNBc3luY2hyb25vdXNNb2RlKCk7CiAgICAgdmlydHVhbCB2b2lkIGxv
YWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
Y29uTG9hZERlY2lzaW9uQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHJlY2VpdmVkSWNvbkxvYWREZWNp
c2lvbihpbnQgZGVjaXNpb24sIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZpcnR1YWwgdm9p
ZCBpY29uRGF0YUZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
Y29uRGF0YUNhbGxiYWNrPik7CiAgICAgICAgIAogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CkBAIC03OCw2ICs4MCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNF
bmFibGVkOwogICAgIFdlYlByb2Nlc3MqIG1fcHJvY2VzczsKKyAgICAKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6SWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrPiA+IG1faWNv
bkxvYWREZWNpc2lvbkNhbGxiYWNrczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNl
UHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JY29uRGF0YWJhc2UvV2ViSWNvbkRhdGFiYXNlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDgxNjc0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UvV2ViSWNv
bkRhdGFiYXNlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyLDQgKzIyLDUg
QEAKIAogbWVzc2FnZXMgLT4gV2ViSWNvbkRhdGFiYXNlUHJveHkgewogICAgIFVSTEltcG9ydEZp
bmlzaGVkKCkKKyAgICBSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oaW50IGxvYWREZWNpc2lvbiwg
dWludDY0X3QgY2FsbGJhY2tJRCkKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQy
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJ
KHJldmlzaW9uIDgxNjc0KQorKysgU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjIzLDYgKzI2MjMsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYkljb25EYXRhYmFzZUlt
cGwuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxVSVByb2Nlc3NcV2ViSWNvbkRhdGFiYXNlSW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViSW5zcGVjdG9yUHJveHku
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86991</attachid>
            <date>2011-03-25 16:09:21 -0700</date>
            <delta_ts>2011-03-25 17:02:33 -0700</delta_ts>
            <desc>Patch - Add minimal WK2 API</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="79369"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86996</attachid>
            <date>2011-03-25 17:02:33 -0700</date>
            <delta_ts>2011-03-25 17:03:50 -0700</delta_ts>
            <desc>Patch v2 - Fix Qt also</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16555</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxOTk3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDMtMjUgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NjQ4MzExPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDI1CisgICAgICAgIFdlYktpdDIgSWNv
bkRhdGFiYXNlIGFuZCBBUEkKKworICAgICAgICBUaGlzIGdldHMgYSBiYXNpYywgdXNhYmxlIEFQ
SSBpbiBwbGFjZS4KKyAgICAgICAgRW5oYW5jZW1lbnRzIGNhbiBjb21lIGluIG90aGVyIGJ1Z3Mg
YXMgdGhleSdyZSBuZWVkZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tJY29uRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VSZXRhaW5JY29uRm9yVVJMKToKKyAg
ICAgICAgKFdLSWNvbkRhdGFiYXNlUmVsZWFzZUljb25Gb3JVUkwpOgorICAgICAgICAoV0tJY29u
RGF0YWJhc2VFbmFibGVEYXRhYmFzZUNsZWFudXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0ljb25EYXRhYmFzZS5oOgorICAgICAgICAKKyAgICAgICAgVGhlIGZpcnN0IGFjdHVhbCBh
Y2Nlc3NvciBmb3IgYW4gImljb24gZm9yIGEgVVJMIiBpcyBmb3IgYSBDR0ltYWdlUmVmOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZzogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLSWNvbkRhdGFi
YXNlR2V0Q0dJbWFnZUZvclVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNv
bkRhdGFiYXNlQ0cuaDogQWRkZWQuCisgICAgICAgIAorICAgICAgICBFeHBvc2UgcmVsZXZhbnQg
bWV0aG9kcyB0byBzdXBwb3J0IHRoZSBhYm92ZSBBUEk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
Ykljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6V2Vi
SWNvbkRhdGFiYXNlKTogTmV3IEljb25EYXRhYmFzZXMgd2lsbCBoYXZlIGNsZWFudXAgZGlzYWJs
ZWQgZnJvbSB0aGUgc3RhcnQsCisgICAgICAgICAgYW5kIHJlcXVpcmUgYSBzaW5nbGUgY2FsbCB0
byAiZW5hYmxlRGF0YWJhc2VDbGVhbnVwIiB0byBhbGxvdyBjbGVhbnVwLgorICAgICAgICAoV2Vi
S2l0OjpXZWJJY29uRGF0YWJhc2U6OnNldERhdGFiYXNlUGF0aCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkljb25EYXRhYmFzZTo6ZW5hYmxlRGF0YWJhc2VDbGVhbnVwKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSWNvbkRhdGFiYXNlOjppbWFnZUZvclBhZ2VVUkwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJJY29uRGF0YWJhc2UuaDoKKyAgICAgICAgCisgICAgICAgIFByb2plY3QgZmlsZSBzdHVm
ZjoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDExLTAzLTI1ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGNvcnJlY3Rpb24u
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gODE5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBXZWJJY29uRGF0YWJhc2U6
On5XZWJJY29uRGF0YWJhc2UoKQogV2ViSWNvbkRhdGFiYXNlOjpXZWJJY29uRGF0YWJhc2UoV2Vi
Q29udGV4dCogY29udGV4dCkKICAgICA6IG1fd2ViQ29udGV4dChjb250ZXh0KQogICAgICwgbV91
cmxJbXBvcnRDb21wbGV0ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlQ2xlYW51cERpc2FibGVk
KGZhbHNlKQogewogfQogCkBAIC02NywxNSArNjgsMzYgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6
OnNldERhdGFiYXNlUGF0aChjbwogCiAgICAgbV9pY29uRGF0YWJhc2VJbXBsID0gIEljb25EYXRh
YmFzZTo6Y3JlYXRlKCk7CiAgICAgbV9pY29uRGF0YWJhc2VJbXBsLT5zZXRDbGllbnQodGhpcyk7
CisgICAgSWNvbkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgpOworICAgIG1fZGF0YWJh
c2VDbGVhbnVwRGlzYWJsZWQgPSB0cnVlOwogICAgIG1faWNvbkRhdGFiYXNlSW1wbC0+c2V0RW5h
YmxlZCh0cnVlKTsKICAgICBpZiAoIW1faWNvbkRhdGFiYXNlSW1wbC0+b3BlbihkaXJlY3RvcnlO
YW1lKHBhdGgpLCBwYXRoR2V0RmlsZU5hbWUocGF0aCkpKSB7CiAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIG9wZW4gV2ViS2l0MiBpY29uIGRhdGFiYXNlIG9uIGRpc2siKTsKICAgICAgICAg
bV9pY29uRGF0YWJhc2VJbXBsLmNsZWFyKCk7CiAgICAgICAgIHNldEdsb2JhbEljb25EYXRhYmFz
ZSgwKTsKKyAgICAgICAgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpOworICAg
ICAgICBtX2RhdGFiYXNlQ2xlYW51cERpc2FibGVkID0gZmFsc2U7CiAgICAgfQogICAgIHNldEds
b2JhbEljb25EYXRhYmFzZShtX2ljb25EYXRhYmFzZUltcGwuZ2V0KCkpOwogfQogCit2b2lkIFdl
Ykljb25EYXRhYmFzZTo6ZW5hYmxlRGF0YWJhc2VDbGVhbnVwKCkKK3sKKyAgICBpZiAoIW1faWNv
bkRhdGFiYXNlSW1wbCkgeworICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCBlbmFibGVkIEljb24g
RGF0YWJhc2UgY2xlYW51cCAtIGl0IGhhc24ndCBiZWVuIG9wZW5lZCB5ZXQuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2VDbGVhbnVwRGlzYWJsZWQpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGVuYWJsZSBkYXRhYmFzZSBjbGVhbnVwLCBi
dXQgaXQncyBhbHJlYWR5IGVuYWJsZWQuIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEljb25EYXRhYmFzZTo6YWxsb3dE
YXRhYmFzZUNsZWFudXAoKTsKKyAgICBtX2RhdGFiYXNlQ2xlYW51cERpc2FibGVkID0gZmFsc2U7
Cit9CisKIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmIHBhZ2VVUkwpCiB7CiAgICAgTE9HKEljb25EYXRhYmFzZSwgIldLMiBVSVByb2Nlc3Mg
cmV0YWluaW5nIGljb24gZm9yIHBhZ2UgVVJMICVzIiwgcGFnZVVSTC5hc2NpaSgpLmRhdGEoKSk7
CkBAIC0xNTIsNiArMTc0LDIwIEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpnZXRMb2FkRGVjaXNp
b25Gb3IKICAgICBtX3dlYkNvbnRleHQtPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViSWNv
bkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbigoaW50KWRlY2lzaW9uLCBj
YWxsYmFja0lEKSwgMCk7CiB9CiAKK0ltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgaWYgKCFtX3dlYkNvbnRleHQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX2ljb25EYXRhYmFzZUltcGwgfHwgIW1faWNv
bkRhdGFiYXNlSW1wbC0+aXNPcGVuKCkgfHwgcGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gVGhlIFdlYkNvcmUgSWNvbkRhdGFiYXNlIGlnbm9yZXMgdGhlIHBh
c3NlZCBpbiBzaXplIHBhcmFtZXRlci4KKyAgICAvLyBJZiB0aGF0IGNoYW5nZXMgd2UnbGwgbmVl
ZCB0byByZXRoaW5rIGhvdyB0aGlzIEFQSSBpcyBleHBvc2VkLgorICAgIHJldHVybiBtX2ljb25E
YXRhYmFzZUltcGwtPnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6
SW50U2l6ZSgzMiwgMzIpKTsKK30KKworCiAvLyBXZWJDb3JlOjpJY29uRGF0YWJhc2VDbGllbnQK
IGJvb2wgV2ViSWNvbkRhdGFiYXNlOjpwZXJmb3JtSW1wb3J0KCkKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgJKHJldmlzaW9uIDgxOTkxKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIE1lc3NhZ2VJRDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgSWNvbkRhdGFiYXNlOworY2xhc3MgSW1hZ2U7CiB9CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAg
ICAgdm9pZCBjbGVhckNvbnRleHQoKSB7IG1fd2ViQ29udGV4dCA9IDA7IH0KICAgICB2b2lkIHNl
dERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGVuYWJsZURhdGFiYXNlQ2xl
YW51cCgpOwogCiAgICAgdm9pZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKQEAgLTczLDYg
Kzc1LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2V0TG9hZERlY2lzaW9uRm9ySWNvblVS
TChjb25zdCBTdHJpbmcmLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKIAorICAgIFdlYkNvcmU6Oklt
YWdlKiBpbWFnZUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7CisgICAgCiAgICAgLy8gV2ViQ29y
ZTo6SWNvbkRhdGFiYXNlQ2xpZW50CiAgICAgdmlydHVhbCBib29sIHBlcmZvcm1JbXBvcnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
Jik7CkBAIC05Niw2ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE93blB0cjxXZWJDb3Jl
OjpJY29uRGF0YWJhc2U+IG1faWNvbkRhdGFiYXNlSW1wbDsKICAgICBib29sIG1fdXJsSW1wb3J0
Q29tcGxldGVkOworICAgIGJvb2wgbV9kYXRhYmFzZUNsZWFudXBEaXNhYmxlZDsKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBTdHJpbmc+IG1fcGVuZGluZ0xvYWREZWNpc2lvblVSTE1hcDsKIAogfTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0ljb25EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLSWNvbkRhdGFi
YXNlLmNwcAkocmV2aXNpb24gODE5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tJY29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzICszNSwxOCBAQCBX
S1R5cGVJRCBXS0ljb25EYXRhYmFzZUdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvQVBJKFdl
Ykljb25EYXRhYmFzZTo6QVBJVHlwZSk7CiB9CisKK3ZvaWQgV0tJY29uRGF0YWJhc2VSZXRhaW5J
Y29uRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFn
ZVVSTFJlZikKK3sKKyAgICB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+cmV0YWluSWNvbkZvclBh
Z2VVUkwodG9XVEZTdHJpbmcocGFnZVVSTFJlZikpOworfQorCit2b2lkIFdLSWNvbkRhdGFiYXNl
UmVsZWFzZUljb25Gb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VS
TFJlZiBwYWdlVVJMUmVmKQoreworICAgIHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5yZWxlYXNl
SWNvbkZvclBhZ2VVUkwodG9XVEZTdHJpbmcocGFnZVVSTFJlZikpOworfQorCit2b2lkIFdLSWNv
bkRhdGFiYXNlRW5hYmxlRGF0YWJhc2VDbGVhbnVwKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRh
YmFzZVJlZikKK3sKKyAgICB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+ZW5hYmxlRGF0YWJhc2VD
bGVhbnVwKCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tJY29u
RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tJY29uRGF0YWJhc2UuaAkocmV2aXNpb24gODE5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tJY29uRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
MTAgQEAgZXh0ZXJuICJDIiB7CiAKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS0ljb25EYXRhYmFzZUdl
dFR5cGVJRCgpOwogCitXS19FWFBPUlQgdm9pZCBXS0ljb25EYXRhYmFzZVJldGFpbkljb25Gb3JV
UkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMKTsKK1dL
X0VYUE9SVCB2b2lkIFdLSWNvbkRhdGFiYXNlUmVsZWFzZUljb25Gb3JVUkwoV0tJY29uRGF0YWJh
c2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMKTsKK1dLX0VYUE9SVCB2b2lkIFdL
SWNvbkRhdGFiYXNlRW5hYmxlRGF0YWJhc2VDbGVhbnVwKFdLSWNvbkRhdGFiYXNlUmVmIGljb25E
YXRhYmFzZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dL
SWNvbkRhdGFiYXNlQ0cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBd0JJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFzZUNHLmgi
CisKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
KyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Q0dJbWFnZVJlZiBXS0ljb25EYXRhYmFzZUdldENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VS
ZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCit7CisgICAgSW1hZ2UqIGltYWdl
ID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1
cmxSZWYpKTsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpIDogMDsK
K30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFz
ZUNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dL
SWNvbkRhdGFiYXNlQ0cuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLSWNvbkRhdGFiYXNlQ0dfaAorI2RlZmluZSBXS0lj
b25EYXRhYmFzZUNHX2gKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisjaW5j
bHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorCitXS19FWFBPUlQgQ0dJbWFnZVJlZiBXS0ljb25EYXRhYmFzZUdldENHSW1h
Z2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiB1cmxTdHJp
bmcpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tJY29u
RGF0YWJhc2VDR19oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MTk5MSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgy
LDYgKzI4Miw4IEBACiAJCTUxMUIyNEE3MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJh
c2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExQjI0QTUxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggKi87IH07
CiAJCTUxMUIyNEFBMTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExQjI0QTgxMzJFMDk3
MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgKi87IH07CiAJCTUxMUIyNEFCMTMyRTA5
NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUIyNEE5MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29u
RGF0YWJhc2UuaCAqLzsgfTsKKwkJNTEyM0NGMUIxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRh
dGFiYXNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEyM0NGMTkxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuY3BwICovOyB9
OworCQk1MTIzQ0YxQzEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0YWJhc2VDRy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyM0NGMUExMzNEMjYw
QTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CiAJCTUxMjkzNUQ3MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJD
b250ZXh0TWVudUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEyOTM1RDUxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5j
cHAgKi87IH07CiAJCTUxMjkzNUQ4MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkz
NUQ2MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCAqLzsgfTsKIAkJNTEy
OTM1RTMxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MjkzNUUxMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNs
aWVudC5jcHAgKi87IH07CkBAIC0xMTU4LDYgKzExNjAsOCBAQAogCQk1MTFCMjRBNTEzMkUwOTU3
MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViSWNvbkRhdGFiYXNlUHJveHkuaDsgcGF0aCA9IEljb25EYXRhYmFzZS9X
ZWJJY29uRGF0YWJhc2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFC
MjRBODEzMkUwOTcyMDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMUIyNEE5MTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0
YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMjNDRjE5MTMzRDI2MEEwMDU2Rjgw
MCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdLSWNvbkRhdGFiYXNlQ0cuY3BwOyBwYXRoID0gY2cvV0tJY29uRGF0YWJhc2VDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMjNDRjFBMTMzRDI2MEEwMDU2Rjgw
MCAvKiBXS0ljb25EYXRhYmFzZUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLSWNvbkRhdGFiYXNlQ0cuaDsgcGF0aCA9IGNnL1dLSWNvbkRhdGFiYXNlQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyOTM1RDUxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNv
bnRleHRNZW51SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJDb250ZXh0TWVudUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTI5
MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51SXRlbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3OSw2ICsyMjgzLDE1IEBACiAJCQluYW1lID0gY2Y7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MTIzQ0YxODEzM0QyNUU2MDA1
NkY4MDAgLyogY2cgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTUxMjNDRjE5MTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCAqLywK
KwkJCQk1MTIzQ0YxQTEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0YWJhc2VDRy5oICovLAor
CQkJKTsKKwkJCW5hbWUgPSBjZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CTUxMkUzNTJBMTMwQjU1OTkwMEFCRDE5QSAvKiBBcHBsaWNhdGlvbkNhY2hlICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1OTIsNiArMjYwNSw3IEBACiAJ
CUJDMEMzNzY2MTBGODA3NjYwMDc2RDdDQiAvKiBDICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTIzQ0YxODEzM0QyNUU2MDA1NkY4MDAgLyogY2cgKi8s
CiAJCQkJQkNCNjM0NzcxMTZCRjEwNjAwNjAzMjE1IC8qIFdlYktpdDIuaCAqLywKIAkJCQlCQ0RE
QjMyQzEyNEVDMkUxMDA0OEQxM0MgLyogV0tBUElDYXN0LmggKi8sCiAJCQkJNTE3QTMzQjMxMzBC
MzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwICovLApAQCAtMzYz
Niw2ICszNjUwLDcgQEAKIAkJCQkzM0QzQTNDQjEzMzk2MTc5MDA3MDlCRTQgLyogV2ViTWVkaWFD
YWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMDY0NTA0QTEz
M0JFNzA5MDAzNDcwRTIgLyogTGF5ZXJUcmVlSG9zdENBLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTEwQUUwRDEzM0MxNkNCMDA3MjcxN0EgLyogV0tJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUxMjNDRjFDMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTQyNTcsNiArNDI3Miw3IEBACiAJCQkJQzBENzREREUxMzNCRTJEOTAw
ODlDRDQ0IC8qIExheWVyVHJlZUhvc3RDQS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDNBMTM2
QzEzM0JFQkY5MDBENzY3RDEgLyogTGF5ZXJUcmVlSG9zdENBTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTExMEFFMEMxMzNDMTZDQjAwNzI3MTdBIC8qIFdLSWNvbkRhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFz
ZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY2QTkwODEzMTMzQzIwNTEwMDgyQzNGNCAvKiBX
ZWJDb29raWVNYW5hZ2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjZENjMyQkMxMzNEMTk4
MjAwNzQzRDc3IC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9uIDgxOTkxKQor
KysgU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODQ0LDYgKzI4NDQsMTggQEAKIAkJCQk8RmlsdGVyCiAJCQkJCU5hbWU9IkMiCiAJCQkJCT4KKyAg
ICAJCQkJPEZpbHRlcgorICAgIAkJCQkJTmFtZT0iY2ciCisgICAgCQkJCQk+CisgICAgCQkJCQk8
RmlsZQorICAgIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEFQSVxDXGNnXFdLSWNv
bkRhdGFiYXNlQ0cuY3BwIgorICAgIAkJCQkJCT4KKyAgICAJCQkJCTwvRmlsZT4KKyAgICAJCQkJ
CTxGaWxlCisgICAgCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcY2dcV0tJ
Y29uRGF0YWJhc2VDRy5oIgorICAgIAkJCQkJCT4KKyAgICAJCQkJCTwvRmlsZT4KKyAgICAJCQkJ
PC9GaWx0ZXI+CiAJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xB
UElcQ1xXZWJLaXQyLmgiCiAJCQkJCQk+Cg==
</data>
<flag name="review"
          id="79374"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="79375"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>