<?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>26148</bug_id>
          
          <creation_ts>2009-06-02 15:09:17 -0700</creation_ts>
          <short_desc>Unfork RenderThemeChromium{Win,Linux}.{h,cc}</short_desc>
          <delta_ts>2009-06-18 00:12:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Albert J. Wong">ajwong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>124063</commentid>
    <comment_count>0</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-02 15:09:17 -0700</bug_when>
    <thetext>There is a lot of duplicated code between RenderThemeChromiumWin and Linux.  Currently the Linux branch is completely generic Skia code. Thus, rename RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia. Then have RenderThemeChromiumWin inherit off of RenderThemeChromiumSkia.

Since this code&apos;s dependencies straddle the chromium and webkit trees, the refactor will require multiple commits as to keep both trees green.

Expected Steps:
  1) _copy_ RenderThemeChromiumLinux to RenderThemeChromiumSkia with appropriate renamings internally.
  2) Update chromium code to break dependency on RenderThemeChromiumLinux (send announcement to chromium-dev), and to build RenderThemeChromiumSkia files.
  3) Make RenderThemeChromiumWin inherit off of RenderThemeChromiumSkia. Delete RenderThemeChromiumLinux files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124067</commentid>
    <comment_count>1</comment_count>
      <attachid>30882</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-02 15:34:27 -0700</bug_when>
    <thetext>Created attachment 30882
Step 1: copying RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124072</commentid>
    <comment_count>2</comment_count>
      <attachid>30884</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-02 15:47:52 -0700</bug_when>
    <thetext>Created attachment 30884
copy RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia

This patch modifies the copied RenderThemeChromiumLinux in the following ways:
  (1) RenderThemeChromiumLinux renamed RenderThemeChromiumSkia
  (2) Some trailing whitespace was deleted.
  (3) RenderThemer* theme(){} was removed.  This will need to stay in RenderThemeChromiumLinux after all since this is how the compilation determines which version of render theme to instantiate.
  (4) Moved the destructor definition into the implementation file, and added a missing &quot;virtual&quot;.
  (5) Fixed an #endif comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124352</commentid>
    <comment_count>3</comment_count>
      <attachid>30884</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 12:14:00 -0700</bug_when>
    <thetext>Comment on attachment 30884
copy RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia

I think this would be less error-prone if you renamed the class inside RenderThemeChromiumLinux.* first.  Then you could make Windows depend on it.  And then you could finally move the file instead of copying it, as the last step.  If you feel strongly this order is better, that&apos;s OK with me, but you&apos;ll just have to be sure to check extra careful at the end to make sure no other modifications to the file slipped in during your move...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124353</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 12:15:55 -0700</bug_when>
    <thetext>No file outside of RenderThemeChromiumLinux knows that it&apos;s called RenderThemeChromiumLinux.  So you can rename the class inside the file w/o anyone notcing.  When you make Windows depend on it, it will have a strange header name for a bit, but fixing that name is a much smaller diff than changing the class name.  moving the file at the same time as you&apos;re changing the class internals makes it hard to tell from the diff if its&apos; correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124357</commentid>
    <comment_count>5</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-04 12:38:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; No file outside of RenderThemeChromiumLinux knows that it&apos;s called
&gt; RenderThemeChromiumLinux.  So you can rename the class inside the file w/o
&gt; anyone notcing.  When you make Windows depend on it, it will have a strange
&gt; header name for a bit, but fixing that name is a much smaller diff than
&gt; changing the class name.  moving the file at the same time as you&apos;re changing
&gt; the class internals makes it hard to tell from the diff if its&apos; correct.
&gt; 

The file that I was having problems with is actually webkit.gyp in the chromium tree.  There needs to be a point where it can list both RenderThemeChromiumSkia.cpp and RenderThemeChromiumLinux.cpp.

I agree with the diffing issue if someone updates RenderThemeChromiumLinux during the migration.

Now that I&apos;ve gotten further into the merging, I actually don&apos;t think I can remove RenderThemeChromiumLinux.cpp completely.  At the very least, it needs to contain the RenderTheme* renderTheme() factory function since that cannot be colocated in the RenderThemeChromiumSkia.cpp file.

How about this:
  1) Create a blank RenderThemeChromiumSkia.cpp and .h file to make gyp happy.
  2) Extract a RenderThemeChromiumSkia out of RenderThemeChromiumLinux, but leave it in the linux file for sane diffing.  (I&apos;ve already got most things done locally, so I know which functions need to go where).
  3) Move RenderThemeChromiumSkia into it&apos;s file.  This should be a pure move at this point because all the style and factoring issues would have been hammered out in #2
  4) Clean up RenderThemeChromiumWin.

will upload a patch with empty files shorty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124371</commentid>
    <comment_count>6</comment_count>
      <attachid>30958</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-04 13:20:43 -0700</bug_when>
    <thetext>Created attachment 30958
Adding in empty skia files for step 1 of patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124378</commentid>
    <comment_count>7</comment_count>
      <attachid>30958</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 13:43:10 -0700</bug_when>
    <thetext>Comment on attachment 30958
Adding in empty skia files for step 1 of patch.

Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124379</commentid>
    <comment_count>8</comment_count>
      <attachid>30958</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 13:44:49 -0700</bug_when>
    <thetext>Comment on attachment 30958
Adding in empty skia files for step 1 of patch.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/rendering/RenderThemeChromiumSkia.cpp
	A	WebCore/rendering/RenderThemeChromiumSkia.h
Committed r44426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124380</commentid>
    <comment_count>9</comment_count>
      <attachid>30958</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 13:45:21 -0700</bug_when>
    <thetext>Comment on attachment 30958
Adding in empty skia files for step 1 of patch.

Clearing r+ now that this is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124416</commentid>
    <comment_count>10</comment_count>
      <attachid>30974</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-04 17:16:32 -0700</bug_when>
    <thetext>Created attachment 30974
Factors out a common RenderThemeChromiumSkia class and makes RenderThemeChromiumLinux and RenderThemeChromiumWin depend on it.

The only bits left in RenderThemeChromiumLinux are the methods taht the windows version does not override itself.

Here are the changes that were not just pure code shuffling:
  1) defaultFontSize was combined, and turned into a protected class member
  2) defaultGUIFont was combined, and turned into a protected class member.  The windows code needed some extra type conversion code added to make this work.
  3) caretBlinkInterval was split into caretBlinkInterval and caretBlinkIntervalInternal to centralize the layout test special code path.

The rest should be just shuffling of code around.

Note that there is a bit of a wart in that some resources referred to by RenderThemeChromiumSkia have names like themeWinUserAgentStyleSheet, or linuxCheckboxOn.  I dont&apos; think the naming is hurtful enough to bother cleaning up at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124424</commentid>
    <comment_count>11</comment_count>
      <attachid>30974</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 19:21:56 -0700</bug_when>
    <thetext>Comment on attachment 30974
Factors out a common RenderThemeChromiumSkia class and makes RenderThemeChromiumLinux and RenderThemeChromiumWin depend on it.

This will be easier to review in two parts.  One part which is just the changes to RenderThemeChromiumLinux, and the other which is the changes to RenderThemeChromiumWin.  Sure you only get the big gains with the second part, but there is no change in behavior by separating them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124426</commentid>
    <comment_count>12</comment_count>
      <attachid>30974</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 19:27:23 -0700</bug_when>
    <thetext>Comment on attachment 30974
Factors out a common RenderThemeChromiumSkia class and makes RenderThemeChromiumLinux and RenderThemeChromiumWin depend on it.

Why re-order paintMediaButtonInternal ?  Leaving it where it was makes the patch easier to read.

Why re-order menuListInternalPadding?  Same as above...

Why wouldn&apos;t this just be a String or an AtomicString?
static const char* defaultGUIFont;
That would save conversions on every use.

Yeah, I think a little shuffling and splitting could make this diff much smaller.  Hard to review at this size. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124438</commentid>
    <comment_count>13</comment_count>
      <attachid>30983</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-04 20:10:42 -0700</bug_when>
    <thetext>Created attachment 30983
Factor out RenderThemeChromiumSkia from just the RenderThemeChromiumLinux portion.

Hey Eric, here&apos;s another shot.

It&apos;s not a pure move, but went through the diff this time and listed all the non-move changes I made.

The reason the functions were shuffled last time was cause they were moved from RenderThemeChromiumLinux to RenderThemeChromiumSkia and I was trying to keep each classes methods together.  However, since it&apos;s all going to another file anwyays, no need to worry about that. :)

I don&apos;t actually know what the difference between String and AtomicString are so I just chose String. Let me know if you want me to use the other.  I assume that there WebKit doesn&apos;t ban using non-POD data types in globals/statics like Chromium does?

I&apos;ll upload the windows side of this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124461</commentid>
    <comment_count>14</comment_count>
      <attachid>30983</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-04 20:50:57 -0700</bug_when>
    <thetext>Comment on attachment 30983
Factor out RenderThemeChromiumSkia from just the RenderThemeChromiumLinux portion.

Looks great!

In response to your IRC question, yes WebKit avoids non pod globals because they slow down library load/startup time.  So you&apos;re right that you&apos;ll need to fix defaultGUIFont to use a function or some other solution.

Typo:
+           1) Createion of a caretBlinkIntervalInternal.

Looks great otherwise.

r- because I&apos;m worried the global constructor could cause build bots to break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124562</commentid>
    <comment_count>15</comment_count>
      <attachid>31007</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-05 12:21:06 -0700</bug_when>
    <thetext>Created attachment 31007
Fix typo and make defaultGUIFont into function again

this time for sure! :D :D :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124583</commentid>
    <comment_count>16</comment_count>
      <attachid>31015</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-05 15:40:24 -0700</bug_when>
    <thetext>Created attachment 31015
Move RenderThemeChromiumSkia into its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124626</commentid>
    <comment_count>17</comment_count>
      <attachid>31007</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-06 01:19:26 -0700</bug_when>
    <thetext>Comment on attachment 31007
Fix typo and make defaultGUIFont into function again

const String&amp; RenderThemeChromiumSkia::defaultGUIFont() {

{ should be on it&apos;s own line.  someone can fix that when landing this.
Also WebKit uses 4 spaces, not 2!
+  static String fontFace(&quot;Arial&quot;);


If this needed to be compiled on Mac, due to a GCC bug we would need to use DEFINE_STATIC_LOCAL for:
+  static String fontFace(&quot;Arial&quot;);
but it does not, so you&apos;re fine.

Needs tiny fixes when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124627</commentid>
    <comment_count>18</comment_count>
      <attachid>31015</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-06 01:20:06 -0700</bug_when>
    <thetext>Comment on attachment 31015
Move RenderThemeChromiumSkia into its own file.

Assuming you&apos;re *only* moving code, then you have my rubber-stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124643</commentid>
    <comment_count>19</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-06 08:42:30 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 31015 [review])
&gt; Assuming you&apos;re *only* moving code, then you have my rubber-stamp.
&gt; 

The only extra change was to #include &quot;Color.h&quot; in RenderThemeChromiumLinux.cpp cause that class used the color class directly.  Otherwise, yes, pure move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125058</commentid>
    <comment_count>20</comment_count>
      <attachid>31119</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-09 17:56:08 -0700</bug_when>
    <thetext>Created attachment 31119
Remove common code from RenderThemeChromiumWin

Reviewing this one is going to be the difficult one.

The 2 checks I did was as follows:
  1) Verify that all functions in RenderThemeChromiumSkia were in the original RenderThemeChromiumWin.
  2) Verify that all removed functions from RenderThemeChromiumWin were identical to the Skai versions.

For check #1, I found two functions that slipped through last time.

  supportsControlTint -&gt; Moved to RenderThemeChromiumLinux
  platformTextSearchHighlightColor -&gt; This isn&apos;t in RenderTheme.  Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125060</commentid>
    <comment_count>21</comment_count>
      <attachid>31119</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-09 18:00:46 -0700</bug_when>
    <thetext>Comment on attachment 31119
Remove common code from RenderThemeChromiumWin

I like minus lines.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125719</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-13 20:37:21 -0700</bug_when>
    <thetext>Looks complicated, but I&apos;ll try to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125724</commentid>
    <comment_count>23</comment_count>
      <attachid>31007</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-13 21:06:48 -0700</bug_when>
    <thetext>Comment on attachment 31007
Fix typo and make defaultGUIFont into function again

The patch does not apply to TOT.  The fixup might be easy or hard.  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125726</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-13 21:07:39 -0700</bug_when>
    <thetext>Unassigning.  First patch does not apply cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125982</commentid>
    <comment_count>25</comment_count>
      <attachid>31297</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-15 10:45:19 -0700</bug_when>
    <thetext>Created attachment 31297
Rebased patch to tip of tree for extracting RenderThemeChromiumSkia out of RenderThemeChromiumLinux.  Other patches to follow.

The updated patch has 3 changes:

  (1) Handles the addition of systemColor into RenderThemeChromiumLinux.  This was left in RenderThemeChromiumLinux and not put in RenderThemeChromiumSkia because it is not shared with windows.
  (2) Moved the adding of the linux specific user agent style sheet into RenderThemeChromiumLinux.  This required splitting the extraDefaultStyleSheet function
  (3) Updated the patch to respect the changes to paintButtonLike.  This has no effective changes since it is just a static function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125991</commentid>
    <comment_count>26</comment_count>
      <attachid>31299</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-15 11:31:02 -0700</bug_when>
    <thetext>Created attachment 31299
Rebased patch to tip of tree for extracting RenderThemeChromiumSkia out of RenderThemeChromiumLinux, with Eric&apos;s landing fixes. Other patches to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126005</commentid>
    <comment_count>27</comment_count>
      <attachid>31302</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-15 12:42:05 -0700</bug_when>
    <thetext>Created attachment 31302
Move RenderThemeChromiumSkia into its own file.  (Rebased to tip of tree after patch 31299)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126008</commentid>
    <comment_count>28</comment_count>
      <attachid>31303</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-06-15 12:55:57 -0700</bug_when>
    <thetext>Created attachment 31303
Remove common code from RenderThemeChromiumWin (Rebased to tip of tree after patch 31302)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126404</commentid>
    <comment_count>29</comment_count>
      <attachid>31299</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-17 00:20:56 -0700</bug_when>
    <thetext>Comment on attachment 31299
Rebased patch to tip of tree for extracting RenderThemeChromiumSkia out of RenderThemeChromiumLinux, with Eric&apos;s landing fixes. Other patches to follow.

The ChangeLog is doubled.

Indent:
bool RenderThemeChromiumSkia::supportsHover(const RenderStyle* style) const
 141 {
 142   return true;
 143 }

Unused parameters can cause warnings and thus compile failures:
bool RenderThemeChromiumSkia::supportsFocusRing(const RenderStyle* style) const
155146 {
156      return supportsFocus(style-&gt;appearance());
 147     // This causes WebKit to draw the focus rings for us.
 148     return false;
157149 }

Otherwise looks fine.  Someone could fix this when landing I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126405</commentid>
    <comment_count>30</comment_count>
      <attachid>31302</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-17 00:22:34 -0700</bug_when>
    <thetext>Comment on attachment 31302
Move RenderThemeChromiumSkia into its own file.  (Rebased to tip of tree after patch 31299)

WARNING: NO TEST CASES ADDED OR CHANGED
should be replaced by an explanation as to why testing is impossible or why it does not need tests.  In this case, no tests are needed.  You should note that your&apos;e only moving code.

The ChangeLog can be fixed on landing.  This looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126407</commentid>
    <comment_count>31</comment_count>
      <attachid>31303</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-17 00:28:46 -0700</bug_when>
    <thetext>Comment on attachment 31303
Remove common code from RenderThemeChromiumWin (Rebased to tip of tree after patch 31302)

Looks fine.  WARNING: NO TEST CASES ADDED OR CHANGED should have been replaced by a sentence explaing why this does not need testing.  I filed bug 26475 about this common point of confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126522</commentid>
    <comment_count>32</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-17 12:19:47 -0700</bug_when>
    <thetext>The three r+ patches were committed in http://trac.webkit.org/changeset/44774, http://trac.webkit.org/changeset/44775, http://trac.webkit.org/changeset/44776.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126662</commentid>
    <comment_count>33</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 00:12:21 -0700</bug_when>
    <thetext>Subsequent patches that fixed merge mistakes:
http://trac.webkit.org/changeset/44777
http://trac.webkit.org/changeset/44783
http://trac.webkit.org/changeset/44798</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30882</attachid>
            <date>2009-06-02 15:34:27 -0700</date>
            <delta_ts>2009-06-02 15:47:52 -0700</delta_ts>
            <desc>Step 1: copying RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia</desc>
            <filename>copy</filename>
            <type>text/plain</type>
            <size>30673</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uN2M0NDY2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wNi0wMiAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBBZGQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgYXMgYSByZW5hbWVk
IHZlcnNpb24gb2YKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IGluIHByZXBhcmF0
aW9uIGZvciB1bmZvcmtpbmcgb2YKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IGFu
ZCBSZW5kZXJUaGVtZUNocm9taXVtV2luLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FT
RVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmNwcDogQ29waWVkIGZyb20KKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaDog
Q29waWVkIGZyb20KKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKwogMjAwOS0w
Ni0wMSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Ni
NDRhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCkBAIC0wLDAgKzEsNjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVu
dHMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUmVuZGVy
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVzZXJB
Z2VudFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlICJTa1NoYWRlci5oIgorI2luY2x1ZGUgIlNr
R3JhZGllbnRTaGFkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFBhZGRpbmdU
eXBlIHsKKyAgICBUb3BQYWRkaW5nLAorICAgIFJpZ2h0UGFkZGluZywKKyAgICBCb3R0b21QYWRk
aW5nLAorICAgIExlZnRQYWRkaW5nCit9OworCitzdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0IH07CisKKy8vIFRoZSBkZWZhdWx0
IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZv
bnQKKy8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdo
aWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKKy8vIGZvcm0gY29udHJvbCBmb250cy4KK3N0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOworCisvLyBUaGUgYmFja2dyb3VuZCBm
b3IgdGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQgYmUgYSA2MCUgb3BhcXVlIGJsYWNr
IHJlY3RhbmdsZS4gVGhpcworLy8gbWF0Y2hlcyB0aGUgVUkgbW9ja3VwcyBmb3IgdGhlIGRlZmF1
bHQgVUkgdGhlbWUuCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdE1lZGlhQ29udHJvbE9wYWNp
dHkgPSAwLjZmOworCisvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNhZmFyaS9XaW4uCitzdGF0
aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMg
Y29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZs
b2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNl
bEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBk
ZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKKworc3RhdGljIGJvb2wg
c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQoreworICAgIC8vIFRoaXMgY2F1
c2VzIFdlYktpdCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKworLy8gV2Ug
YWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVu
Y29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCisvLyAtR2Vja28g
dXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRf
R1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCisvLyAtU2FmYXJpIHVz
ZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBr
bm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KKy8vIElFIHVzZXMg
TVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFp
biBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFy
aWFsLgorc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRHVUlGb250KCkKK3sKKyAgICByZXR1cm4g
IkFyaWFsIjsKK30KKworI2lmIEVOQUJMRShWSURFTykKKy8vIEF0dGVtcHQgdG8gcmV0cmlldmUg
YSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5VTEwgaWYgb25lIGNhbm5v
dCBiZSBmb3VuZC4KK3N0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQo
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIE5v
ZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghbWVk
aWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYm
ICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVk
aWFOb2RlKTsKK30KKyNlbmRpZgorCitSZW5kZXJUaGVtZSogdGhlbWUoKQoreworICAgIHN0YXRp
YyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQor
CitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQorewor
fQorCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkg
eworfQorCisvLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNoIHRoZWlyIG1l
dHJpY3MuCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhRGVmYXVsdFN0eWxl
U2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0
LCBzaXplb2YodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9CisKK1N0cmluZyBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1l
V2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQor
U3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2Vu
dFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNo
ZWV0KSk7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9y
dHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVy
biBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworfQorCitDb2xvciBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigweGM4LCAweGM4LCAweGM4
KTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNr
OworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDB4MzIs
IDB4MzIsIDB4MzIpOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZv
cm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigw
eGZmLCAweGZmLCAweDk2KTsKK30KKworZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpj
YXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAoreworICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5n
IGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0IGludHJvZHVjZXMKKyAgICAvLyBhIHJh
Y2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKKyAgICBp
ZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gV2UgY2FjaGUgdGhlIGludGVydmFsIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVwZWF0
ZWRseSByZXF1ZXN0IGl0IGZyb20gZ3RrLgorICAgIHJldHVybiAwLjU7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgZmxvYXQgZm9udFNpemUgPSBkZWZh
dWx0Rm9udFNpemU7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgor
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAvLyBXaHkgMiBwb2ludHMg
c21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKKyAg
ICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVs
dCB0aGF0IHdlIHVzZSBvbgorICAgICAgICAvLyBXaW5kb3dzLgorICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBv
aW50c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRDaGVj
a2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZElt
YWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eENoZWNrYm94T24iKS5yZWxl
YXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCB1bmNoZWNrZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9mZiIpLnJlbGVhc2VSZWYoKTsK
KworICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tlZChvKSA/IGNoZWNrZWRJbWFnZSA6
IHVuY2hlY2tlZEltYWdlOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQg
bmVjZXNzYXJ5CisgICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZveC4gIEF0IGRpZmZl
cmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywKKyAgICAvLyBxdWVyeWluZyB0aGUgdGhlbWUg
Z2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIGhpZ2hlcgorICAg
IC8vIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90
aGVyIHRoYW4gOTYsIHdlCisgICAgLy8gY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncyBtZXRyaWNz
LgorICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOworICAgIHNldFNpemVJZkF1dG8oc3R5
bGUsIHNpemUpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFJhZGlv
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2Ug
PSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9PbiIpLnJlbGVhc2VSZWYo
KTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVsZWFzZVJlZigpOworCisgICAgSW1h
Z2UqIGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hlY2tlZEltYWdlIDogdW5jaGVja2Vk
SW1hZ2U7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBVc2Ugc2FtZSBzaXppbmcgZm9y
IHJhZGlvIGJveCBhcyBjaGVja2JveC4KKyAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOworfQor
CitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByZWN0KSB7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgU2tSZWN0IHNr
cmVjdDsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAg
ICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworCisgICAgLy8g
SWYgdGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRyYXdpbmcgYSBzaW5nbGUs
IHNvbGlkIGNvbG9yCisgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwgcmVjdC5oZWlnaHQoKSA8
IDUpIHsKKyAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGU5LCAweGU5LCAweGU5KTsKKyAg
ICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20pOworICAg
ICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgaW50IGJvcmRlckFscGhhID0gdGhlbWUtPmlzSG92ZXJlZChvKSA/
IDB4ODAgOiAweDU1OworICAgIHBhaW50LnNldEFSR0IoYm9yZGVyQWxwaGEsIDAsIDAsIDApOwor
ICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCByZWN0LnkoKSwgcmlnaHQgLSAxLCBy
ZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmlnaHQgLSAxLCByZWN0Lnko
KSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xp
bmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdodCAtIDEsIGJvdHRvbSAtIDEsIHBhaW50
KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3QueCgp
LCBib3R0b20gLSAxLCBwYWludCk7CisKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDAp
OworICAgIFNrUG9pbnQgcFsyXTsKKyAgICBjb25zdCBpbnQgbGlnaHRFbmQgPSB0aGVtZS0+aXNQ
cmVzc2VkKG8pID8gMSA6IDA7CisgICAgY29uc3QgaW50IGRhcmtFbmQgPSAhbGlnaHRFbmQ7Cisg
ICAgcFtsaWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFy
KHJlY3QueSgpKSk7CisgICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSks
IFNrSW50VG9TY2FsYXIoYm90dG9tIC0gMSkpOworICAgIFNrQ29sb3IgY29sb3JzWzJdOworICAg
IGNvbG9yc1swXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZjgsIDB4ZjgsIDB4ZjgpOworICAg
IGNvbG9yc1sxXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4ZGQpOworCisg
ICAgU2tTaGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIoCisgICAgICAg
IHAsIGNvbG9ycywgTlVMTCwgMiwgU2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSwgTlVMTCk7Cisg
ICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOworICAgIHBhaW50LnNldFNo
YWRlcihzKTsKKyAgICBzLT51bnJlZigpOworCisgICAgc2tyZWN0LnNldChyZWN0LngoKSArIDEs
IHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKKyAgICBjYW52YXMtPmRyYXdS
ZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOworICAgIHBh
aW50LnNldEFSR0IoMHhmZiwgMHhjZSwgMHhjZSwgMHhjZSk7CisgICAgY2FudmFzLT5kcmF3UG9p
bnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdQ
b2ludChyaWdodCAtIDIsIHJlY3QueSgpICsgMSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd1Bv
aW50KHJlY3QueCgpICsgMSwgYm90dG9tIC0gMiwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd1Bv
aW50KHJpZ2h0IC0gMiwgYm90dG9tIC0gMiwgcGFpbnQpOworfQorCitib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50QnV0
dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU2NhbGUgdGhlIGJ1dHRv
biBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgY2Fu
Y2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluQ2FuY2VsQnV0dG9u
U2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0
b25TaXplKSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBG
aXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZp
eGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Cisg
ICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJl
bnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyQm94KiBw
YXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0
IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZp
dCBpbiBpdHMgcGFyZW50J3MgYm94CisgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJl
bnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0
KCkpKSk7CisgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAvLyBD
ZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBo
YXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4
ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29r
IGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAo
cGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKworICAgIHN0
YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNl
YXJjaENhbmNlbCIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNz
ZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3Nl
ZCIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykg
PyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAoreworICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKKyAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24g
dGhlIGZvbnQgc2l6ZQorICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8g
ZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGludCBtYWduaWZpZXJTaXplID0gbHJv
dW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6
ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplKSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWdu
aWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmll
clNpemUsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEludFJlY3Qg
Ym91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOworICAgIGlmICghby0+cGFyZW50
KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsK
KyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50
Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNx
dWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAorICAgIGJvdW5kcy5zZXRIZWln
aHQoc3RkOjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQo
KSwgYm91bmRzLmhlaWdodCgpKSkpOworICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0
KCkpOworCisgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1
cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2ls
bAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQu
ICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgYm91bmRzLnNl
dFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkg
KyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOworICAg
IGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJh
c2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNp
emUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgbWFnbmlmaWVySGVp
Z2h0ID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9u
dFNjYWxlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsKKyAgICBpbnQgbWFnbmlmaWVyV2lk
dGggPSBscm91bmRmKG1hZ25pZmllckhlaWdodCAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSk7Cisg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWlnaHQsIEZpeGVkKSk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIEFTU0VSVChvLT5w
YXJlbnQoKSk7CisgICAgaWYgKCFvLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVy
Qm94KG8tPnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJv
eC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBk
ZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVp
Z2h0KHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CisgICAg
Ym91bmRzLnNldFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGJvdW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0
aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKKworICAgIC8v
IENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0
IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBw
aXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxv
b2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSAr
IChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAg
c3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQt
PmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5h
bChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBp
bWFnZSkKK3sKKyAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGRlZmF1bHRNZWRp
YUNvbnRyb2xPcGFjaXR5KTsKKworICAgIC8vIERyYXcgYmFja2dyb3VuZC4KKyAgICBDb2xvciBv
bGRGaWxsID0gY29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAgQ29sb3Igb2xkU3Ryb2tlID0gY29u
dGV4dC0+c3Ryb2tlQ29sb3IoKTsKKworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2spOworICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAg
Y29udGV4dC0+ZHJhd1JlY3QocmVjdCk7CisKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Iob2xk
RmlsbCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlKTsKKworICAgIC8v
IENyZWF0ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2Vu
dGVyZWQgaW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgor
ICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoKTsKKyAgICBpbWFnZVJlY3Quc2V0
WShyZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsK
KyAgICBpbWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lk
dGgoKSArIDEpIC8gMik7CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVj
dCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lm
IEVOQUJMRShWSURFTykKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRp
YUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheSIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0
aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlh
UGF1c2UiKS5yZWxlYXNlUmVmKCk7CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVy
bmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpID8gbWVk
aWFQbGF5IDogbWVkaWFQYXVzZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwor
ICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0
aWMgSW1hZ2UqIHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFT
b3VuZEZ1bGwiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBzb3VuZE5vbmUgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmROb25lIikucmVsZWFzZVJlZigp
OworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4
dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291bmROb25lOiBzb3VuZEZ1bGwpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAoreworICAg
IC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3NlcnMuCisgICAgc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworfQorCiti
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpOworICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53
aWR0aCgpOworICAgIGNvbnN0IGludCBtaWRkbGUgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkg
LyAyOworCisgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJlY3QpOworCisgICAgU2tQ
YWludCBwYWludDsKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOworICAgIHBhaW50
LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9T
dHlsZSk7CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVUbyhyaWdodCAtIDEzLCBt
aWRkbGUgLSAzKTsKKyAgICBwYXRoLnJMaW5lVG8oNiwgMCk7CisgICAgcGF0aC5yTGluZVRvKC0z
LCA2KTsKKyAgICBwYXRoLmNsb3NlKCk7CisgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGp1c3RNZW51
TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKKy8vIFVzZWQgdG8gcGFpbnQgc3R5
bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVyKQorYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHJldHVybiBwYWludE1lbnVMaXN0KG8sIGksIHJlY3QpOworfQorCitpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxl
LCBMZWZ0UGFkZGluZyk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBSaWdodFBhZGRpbmcpOworfQorCitp
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRp
bmcoc3R5bGUsIFRvcFBhZGRpbmcpOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRvbVBhZGRpbmcp
OworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z0xlZnQoKSBjb25zdAoreworICAgIHJldHVybiAzOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMzsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBh
ZGRpbmdUb3AoKSBjb25zdAoreworICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDE7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICByZXR1cm4gaXNF
bmFibGVkKG8pOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWN0aXZlTGlz
dEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9y
KDB4MjgsIDB4MjgsIDB4MjgpOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Omlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yKDB4YzgsIDB4YzgsIDB4YzgpOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7Cit9CisKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0
eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpbnRlcm5hbCBwYWRk
aW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCisgICAgLy8g
TWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCisgICAgaW50IHBhZGRpbmcgPSBzdHlsZWRNZW51TGlz
dEludGVybmFsUGFkZGluZ1twYWRkaW5nVHlwZV07CisKKyAgICAvLyBSZXNlcnZlIHRoZSBzcGFj
ZSBmb3IgcmlnaHQgYXJyb3cgaGVyZS4gVGhlIHJlc3Qgb2YgdGhlIHBhZGRpbmcgaXMKKyAgICAv
LyBzZXQgYnkgYWRqdXN0TWVudUxpc3RTdHlsZSwgc2luY2UgUG9wTWVudVdpbi5jcHAgdXNlcyB0
aGUgcGFkZGluZyBmcm9tCisgICAgLy8gUmVuZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5k
aXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAuCisgICAgLy8gSWYgdGhlIE1lbnVMaXN0IGFjdHVh
bGx5IGhhcyBhcHBlYXJhbmNlICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMKKyAgICAv
LyB3ZSBkb24ndCBkcmF3IGEgYnV0dG9uLCBzbyBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBpdC4K
KyAgICBjb25zdCBpbnQgYmFyX3R5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmln
aHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7CisgICAgaWYgKHBhZGRpbmdUeXBlID09IGJhcl90eXBl
ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydCkKKyAgICAgICAgcGFkZGlu
ZyArPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7
CisKKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzJjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCkBAIC0wLDAgKzEsMTM4IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29v
Z2xlLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYV9oCisjZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhX2gKKworI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIDogcHVibGljIFJlbmRlclRoZW1lIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCk7CisgICAgICAgIHZpcnR1YWwg
flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCk7CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0
cmFEZWZhdWx0U3R5bGVTaGVldCgpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJr
c1N0eWxlU2hlZXQoKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIHZpcnR1YWwgU3RyaW5n
IGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCisgICAgICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0
IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hv
dmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1
cyByaW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNv
bG9yLgorICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3Q7CisKKyAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgorICAgICAgICB2aXJ0dWFs
IHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKwor
ICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KKworICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBpLCByKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICAgICAgLy8gTWVudUxpc3QgcmVmZXJzIHRvIGFuIHVuc3R5bGVkIG1lbnVsaXN0IChtZWFuaW5n
IGEgbWVudWxpc3Qgd2l0aG91dAorICAgICAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRl
ciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRvbiByZWZlcnMgdG8gYSBzdHlsZWQKKyAgICAgICAgLy8g
bWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0aCBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRlciBzZXQp
LiBUaGV5IGhhdmUKKyAgICAgICAgLy8gdGhpcyBkaXN0aW5jdGlvbiB0byBzdXBwb3J0IHNob3dp
bmcgYXF1YSBzdHlsZSB0aGVtZXMgd2hlbmV2ZXIgdGhleQorICAgICAgICAvLyBwb3NzaWJseSBj
YW4sIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBkb24ndCB3YW50IHRvIHJlcGxpY2F0ZS4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gSW4gc2hvcnQsIHdlIGVpdGhlciBnbyBkb3duIHRoZSBNZW51TGlz
dCBjb2RlIHBhdGggb3IgdGhlIE1lbnVMaXN0QnV0dG9uCisgICAgICAgIC8vIGNvZGVwYXRoLiBX
ZSBuZXZlciBnbyBkb3duIGJvdGguIEFuZCBpbiBib3RoIGNhc2VzLCB0aGV5IHJlbmRlciB0aGUK
KyAgICAgICAgLy8gZW50aXJlIG1lbnVsaXN0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZGVm
aW5lIHRoZSBwYWRkaW5nIGZvciB0aGUgTWVudUxpc3QncyBpbm5lciBibG9jay4KKyAgICAgICAg
dmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGludCBi
dXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGJ1
dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGJ1
dHRvbkludGVybmFsUGFkZGluZ1RvcCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBidXR0
b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdDsKKworICAgICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFz
IGZvY3VzIG9yIG5vdC4KKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRz
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgICAgIC8vIEEgZ2VuZXJhbCBtZXRo
b2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KKyAg
ICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgICAgIC8vIExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgorICAgICAgICB2
aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgaW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBp
bnQgcGFkZGluZ1R5cGUpIGNvbnN0OworICAgICAgICBib29sIHBhaW50TWVkaWFCdXR0b25JbnRl
cm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgSW1hZ2UqKTsKKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30884</attachid>
            <date>2009-06-02 15:47:52 -0700</date>
            <delta_ts>2009-06-04 13:20:43 -0700</delta_ts>
            <desc>copy RenderThemeChromiumLinux -&gt; RenderThemeChromiumSkia</desc>
            <filename>copy</filename>
            <type>text/plain</type>
            <size>30580</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uN2M0NDY2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wNi0wMiAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBBZGQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgYXMgYSByZW5hbWVk
IHZlcnNpb24gb2YKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IGluIHByZXBhcmF0
aW9uIGZvciB1bmZvcmtpbmcgb2YKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IGFu
ZCBSZW5kZXJUaGVtZUNocm9taXVtV2luLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FT
RVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmNwcDogQ29waWVkIGZyb20KKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaDog
Q29waWVkIGZyb20KKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKwogMjAwOS0w
Ni0wMSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDAx
ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCkBAIC0wLDAgKzEsNjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVu
dHMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUmVuZGVy
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVzZXJB
Z2VudFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlICJTa1NoYWRlci5oIgorI2luY2x1ZGUgIlNr
R3JhZGllbnRTaGFkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFBhZGRpbmdU
eXBlIHsKKyAgICBUb3BQYWRkaW5nLAorICAgIFJpZ2h0UGFkZGluZywKKyAgICBCb3R0b21QYWRk
aW5nLAorICAgIExlZnRQYWRkaW5nCit9OworCitzdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0IH07CisKKy8vIFRoZSBkZWZhdWx0
IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZv
bnQKKy8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdo
aWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKKy8vIGZvcm0gY29udHJvbCBmb250cy4KK3N0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOworCisvLyBUaGUgYmFja2dyb3VuZCBm
b3IgdGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQgYmUgYSA2MCUgb3BhcXVlIGJsYWNr
IHJlY3RhbmdsZS4gVGhpcworLy8gbWF0Y2hlcyB0aGUgVUkgbW9ja3VwcyBmb3IgdGhlIGRlZmF1
bHQgVUkgdGhlbWUuCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdE1lZGlhQ29udHJvbE9wYWNp
dHkgPSAwLjZmOworCisvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNhZmFyaS9XaW4uCitzdGF0
aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMg
Y29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZs
b2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNl
bEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBk
ZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKKworc3RhdGljIGJvb2wg
c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQoreworICAgIC8vIFRoaXMgY2F1
c2VzIFdlYktpdCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKworLy8gV2Ug
YWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVu
Y29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCisvLyAtR2Vja28g
dXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRf
R1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCisvLyAtU2FmYXJpIHVz
ZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBr
bm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KKy8vIElFIHVzZXMg
TVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFp
biBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFy
aWFsLgorc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRHVUlGb250KCkKK3sKKyAgICByZXR1cm4g
IkFyaWFsIjsKK30KKworI2lmIEVOQUJMRShWSURFTykKKy8vIEF0dGVtcHQgdG8gcmV0cmlldmUg
YSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5VTEwgaWYgb25lIGNhbm5v
dCBiZSBmb3VuZC4KK3N0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQo
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIE5v
ZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghbWVk
aWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYm
ICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVk
aWFOb2RlKTsKK30KKyNlbmRpZgorCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEoKQoreworfQorCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhKCkgeworfQorCisvLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hl
ZXRzIHRvIG1hdGNoIHRoZWlyIG1ldHJpY3MuCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcodGhlbWVX
aW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0
KSk7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFRdWlya3NTdHls
ZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5
bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpOworfQor
CisjaWYgRU5BQkxFKFZJREVPKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRy
YU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29u
dHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzQ2hy
b21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkp
OworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigweDFlLCAw
eDkwLCAweGZmKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvcigweGM4LCAweGM4LCAweGM4KTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOworfQorCitDb2xvciBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAor
eworICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsKK30KKworZG91YmxlIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAoreworICAgIC8v
IERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0IGlu
dHJvZHVjZXMKKyAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMuIGh0
dHA6Ly9iLzExOTg0NDAKKyAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2UgY2FjaGUgdGhlIGludGVydmFsIHNvIHdl
IGRvbid0IGhhdmUgdG8gcmVwZWF0ZWRseSByZXF1ZXN0IGl0IGZyb20gZ3RrLgorICAgIHJldHVy
biAwLjU7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50
IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAg
ZmxvYXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkg
eworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVl
V2Via2l0U21hbGxDb250cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAg
ICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBk
b2VzLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVu
LCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0aGF0IHdlIHVzZSBvbgorICAgICAgICAvLyBXaW5kb3dz
LgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgICAgICBm
b250U2l6ZSAtPSAoMi4wZiAvIHBvaW50c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0
RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKGZvbnRTaXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUo
dHJ1ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpOb0ZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0
Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKK30KKworaW50
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJ
bWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJs
aW51eENoZWNrYm94T24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCB1
bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2Jv
eE9mZiIpLnJlbGVhc2VSZWYoKTsKKworICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tl
ZChvKSA/IGNoZWNrZWRJbWFnZSA6IHVuY2hlY2tlZEltYWdlOworICAgIGkuY29udGV4dC0+ZHJh
d0ltYWdlKGltYWdlLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2Vk
LiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5CisgICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNo
ZXMgRmlyZWZveC4gIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywKKyAgICAv
LyBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50
cyBmb3IgdGhlIGhpZ2hlcgorICAgIC8vIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhv
bm9ycyBhIERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlCisgICAgLy8gY2FuJ3QgcmVseSBv
biB0aGUgdGhlbWUncyBtZXRyaWNzLgorICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOwor
ICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdl
KiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4
UmFkaW9PbiIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tl
ZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVs
ZWFzZVJlZigpOworCisgICAgSW1hZ2UqIGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hl
Y2tlZEltYWdlIDogdW5jaGVja2VkSW1hZ2U7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UsIHJlY3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAv
LyBVc2Ugc2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KKyAgICBzZXRDaGVj
a2JveFNpemUoc3R5bGUpOworfQorCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVy
VGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KSB7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZh
cyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFNrUGFpbnQg
cGFpbnQ7CisgICAgU2tSZWN0IHNrcmVjdDsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0
LmhlaWdodCgpOworCisgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNr
IHRvIGRyYXdpbmcgYSBzaW5nbGUsIHNvbGlkIGNvbG9yCisgICAgaWYgKHJlY3Qud2lkdGgoKSA8
IDUgfHwgcmVjdC5oZWlnaHQoKSA8IDUpIHsKKyAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAw
eGU5LCAweGU5LCAweGU5KTsKKyAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCks
IHJpZ2h0LCBib3R0b20pOworICAgICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgaW50IGJvcmRlckFscGhhID0g
dGhlbWUtPmlzSG92ZXJlZChvKSA/IDB4ODAgOiAweDU1OworICAgIHBhaW50LnNldEFSR0IoYm9y
ZGVyQWxwaGEsIDAsIDAsIDApOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBy
ZWN0LnkoKSwgcmlnaHQgLSAxLCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xp
bmUocmlnaHQgLSAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQp
OworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdodCAt
IDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCBy
ZWN0LnkoKSArIDEsIHJlY3QueCgpLCBib3R0b20gLSAxLCBwYWludCk7CisKKyAgICBwYWludC5z
ZXRBUkdCKDB4ZmYsIDAsIDAsIDApOworICAgIFNrUG9pbnQgcFsyXTsKKyAgICBjb25zdCBpbnQg
bGlnaHRFbmQgPSB0aGVtZS0+aXNQcmVzc2VkKG8pID8gMSA6IDA7CisgICAgY29uc3QgaW50IGRh
cmtFbmQgPSAhbGlnaHRFbmQ7CisgICAgcFtsaWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVj
dC54KCkpLCBTa0ludFRvU2NhbGFyKHJlY3QueSgpKSk7CisgICAgcFtkYXJrRW5kXS5zZXQoU2tJ
bnRUb1NjYWxhcihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIoYm90dG9tIC0gMSkpOworICAgIFNr
Q29sb3IgY29sb3JzWzJdOworICAgIGNvbG9yc1swXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4
ZjgsIDB4ZjgsIDB4ZjgpOworICAgIGNvbG9yc1sxXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4
ZGQsIDB4ZGQsIDB4ZGQpOworCisgICAgU2tTaGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpD
cmVhdGVMaW5lYXIoCisgICAgICAgIHAsIGNvbG9ycywgTlVMTCwgMiwgU2tTaGFkZXI6OmtDbGFt
cF9UaWxlTW9kZSwgTlVMTCk7CisgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5
bGUpOworICAgIHBhaW50LnNldFNoYWRlcihzKTsKKyAgICBzLT51bnJlZigpOworCisgICAgc2ty
ZWN0LnNldChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAx
KTsKKyAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0
U2hhZGVyKE5VTEwpOworICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhjZSwgMHhjZSwgMHhjZSk7
CisgICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHBhaW50
KTsKKyAgICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIHJlY3QueSgpICsgMSwgcGFpbnQp
OworICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJlY3QueCgpICsgMSwgYm90dG9tIC0gMiwgcGFpbnQp
OworICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgYm90dG9tIC0gMiwgcGFpbnQpOwor
fQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7Cisg
ICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBp
eGVsU2l6ZTsKKyAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3Rk
OjptYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBmb250
U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBJ
bnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKKyAgICBpZiAoIW8t
PnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJl
bnQoKSk7CisKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1
dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3Rh
eXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CisgICAgYm91bmRzLnNl
dEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94Lmhl
aWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CisgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5o
ZWlnaHQoKSk7CisKKyAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQg
dXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdp
bGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxk
LiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5z
ZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgp
ICsgMSkgLyAyKTsKKworICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0
aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRy
YXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwg
Ym91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEludFNpemUgZW1w
dHlTaXplKDEsIDExKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0
aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFNjYWxlIHRoZSBkZWNv
cmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQorICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGlu
dCBtYWduaWZpZXJTaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplICogZm9udFNjYWxlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7CisgICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIEludFJlY3QgYm91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkp
OworICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVu
ZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRl
ckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxl
ZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJv
eAorICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0ZDo6
bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSkpOworICAgIGJvdW5kcy5z
ZXRXaWR0aChib3VuZHMuaGVpZ2h0KCkpOworCisgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9u
IHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4
ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhl
IGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhl
IHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0
KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBtYWdu
aWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVy
IikucmVsZWFzZVJlZigpOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdl
LCBib3VuZHMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU2Nh
bGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsK
KyAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5T
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsK
KyAgICBpbnQgbWFnbmlmaWVyV2lkdGggPSBscm91bmRmKG1hZ25pZmllckhlaWdodCAqIGRlZmF1
bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJX
aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWln
aHQsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMg
PSByOworICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CisgICAgaWYgKCFvLT5wYXJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgp
LT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIHBhcmVu
dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVu
dEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBN
YWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBi
b3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91
bmRzLmhlaWdodCgpKSk7CisgICAgYm91bmRzLnNldFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53
aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU2l6ZSkpKTsKKworICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3Vu
ZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQg
d2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmll
bGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgYm91bmRz
LnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0
KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VS
ZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKK3sKKyAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFjaXR5KTsKKworICAgIC8vIERyYXcgYmFj
a2dyb3VuZC4KKyAgICBDb2xvciBvbGRGaWxsID0gY29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAg
Q29sb3Igb2xkU3Ryb2tlID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKworICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7CisgICAgY29udGV4dC0+ZHJhd1JlY3QocmVjdCk7CisKKyAgICBjb250
ZXh0LT5zZXRGaWxsQ29sb3Iob2xkRmlsbCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
b2xkU3Ryb2tlKTsKKworICAgIC8vIENyZWF0ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBmb3Ig
dGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQgaW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCByb3Vu
ZGVkIGxlZnQsIGFuZCBkb3duLgorICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3Qo
KTsKKyAgICBpbWFnZVJlY3Quc2V0WShyZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1hZ2Ut
PmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICBpbWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSArIDEpIC8gMik7CisKKyAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCwgQ29tcG9zaXRlU291cmNlQXRvcCk7CisgICAgY29udGV4
dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKKyAgICBpZiAo
IW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdl
KiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheSIpLnJl
bGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoIm1lZGlhUGF1c2UiKS5yZWxlYXNlUmVmKCk7CisKKyAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVs
ZW1lbnQtPnBhdXNlZCgpID8gbWVkaWFQbGF5IDogbWVkaWFQYXVzZSk7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVu
dFBhcmVudChvLT5ub2RlKCkpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1bGwiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGlj
IEltYWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291
bmROb25lIikucmVsZWFzZVJlZigpOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRl
cm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291
bmROb25lOiBzb3VuZEZ1bGwpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwg
YnJvd3NlcnMuCisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGku
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIGNvbnN0IGludCByaWdo
dCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBtaWRkbGUgPSByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOworCisgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8s
IGksIHJlY3QpOworCisgICAgU2tQYWludCBwYWludDsKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYs
IDAsIDAsIDApOworICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICBwYWludC5zZXRT
dHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICBwYXRo
Lm1vdmVUbyhyaWdodCAtIDEzLCBtaWRkbGUgLSAzKTsKKyAgICBwYXRoLnJMaW5lVG8oNiwgMCk7
CisgICAgcGF0aC5yTGluZVRvKC0zLCA2KTsKKyAgICBwYXRoLmNsb3NlKCk7CisgICAgY2FudmFz
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisK
Ky8vIFVzZWQgdG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1
bHQgYm9yZGVyKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludE1lbnVMaXN0KG8sIGksIHJl
Y3QpOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0
SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBMZWZ0UGFkZGluZyk7Cit9CisKK2ludCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBS
aWdodFBhZGRpbmcpOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIFRvcFBhZGRpbmcpOworfQorCitpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmco
c3R5bGUsIEJvdHRvbVBhZGRpbmcpOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmJ1dHRvbkludGVybmFsUGFkZGluZ0xlZnQoKSBjb25zdAoreworICAgIHJldHVybiAzOworfQor
CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMzsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdAoreworICAgIHJldHVybiAxOwor
fQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0Jv
dHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29u
c3QKK3sKKyAgICByZXR1cm4gaXNFbmFibGVkKG8pOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yKDB4MjgsIDB4MjgsIDB4MjgpOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDB4YzgsIDB4YzgsIDB4YzgpOworfQorCitD
b2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgz
Mik7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBh
ZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0Cit7CisgICAg
Ly8gVGhpcyBpbnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBs
aWVkIHBhZGRpbmcuCisgICAgLy8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCisgICAgaW50IHBh
ZGRpbmcgPSBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1twYWRkaW5nVHlwZV07CisKKyAg
ICAvLyBSZXNlcnZlIHRoZSBzcGFjZSBmb3IgcmlnaHQgYXJyb3cgaGVyZS4gVGhlIHJlc3Qgb2Yg
dGhlIHBhZGRpbmcgaXMKKyAgICAvLyBzZXQgYnkgYWRqdXN0TWVudUxpc3RTdHlsZSwgc2luY2Ug
UG9wTWVudVdpbi5jcHAgdXNlcyB0aGUgcGFkZGluZyBmcm9tCisgICAgLy8gUmVuZGVyTWVudUxp
c3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAuCisgICAgLy8g
SWYgdGhlIE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBlYXJhbmNlICJOb0FwcGVhcmFuY2UiLCB0
aGVuIHRoYXQgbWVhbnMKKyAgICAvLyB3ZSBkb24ndCBkcmF3IGEgYnV0dG9uLCBzbyBkb24ndCBy
ZXNlcnZlIHNwYWNlIGZvciBpdC4KKyAgICBjb25zdCBpbnQgYmFyX3R5cGUgPSBzdHlsZS0+ZGly
ZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7CisgICAgaWYgKHBh
ZGRpbmdUeXBlID09IGJhcl90eXBlICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9s
UGFydCkKKyAgICAgICAgcGFkZGluZyArPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+
c2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisKKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzJjYTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5o
CkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYV9oCisjZGVmaW5lIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhX2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIDogcHVibGljIFJl
bmRlclRoZW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
KCk7CisgICAgICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCk7CisKKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyNl
bmRpZgorCisgICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9s
cyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMg
YWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICAvLyBUaGUg
cGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBk
b3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CisKKyAgICAgICAgLy8gU3lzdGVtIGZv
bnRzLgorICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RT
aXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owor
CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7
IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7
IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11
dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgLy8gTWVudUxpc3QgcmVmZXJzIHRvIGFuIHVuc3R5
bGVkIG1lbnVsaXN0IChtZWFuaW5nIGEgbWVudWxpc3Qgd2l0aG91dAorICAgICAgICAvLyBiYWNr
Z3JvdW5kLWNvbG9yIG9yIGJvcmRlciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRvbiByZWZlcnMgdG8g
YSBzdHlsZWQKKyAgICAgICAgLy8gbWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0aCBiYWNrZ3JvdW5k
LWNvbG9yIG9yIGJvcmRlciBzZXQpLiBUaGV5IGhhdmUKKyAgICAgICAgLy8gdGhpcyBkaXN0aW5j
dGlvbiB0byBzdXBwb3J0IHNob3dpbmcgYXF1YSBzdHlsZSB0aGVtZXMgd2hlbmV2ZXIgdGhleQor
ICAgICAgICAvLyBwb3NzaWJseSBjYW4sIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBkb24ndCB3YW50
IHRvIHJlcGxpY2F0ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gc2hvcnQsIHdlIGVpdGhl
ciBnbyBkb3duIHRoZSBNZW51TGlzdCBjb2RlIHBhdGggb3IgdGhlIE1lbnVMaXN0QnV0dG9uCisg
ICAgICAgIC8vIGNvZGVwYXRoLiBXZSBuZXZlciBnbyBkb3duIGJvdGguIEFuZCBpbiBib3RoIGNh
c2VzLCB0aGV5IHJlbmRlciB0aGUKKyAgICAgICAgLy8gZW50aXJlIG1lbnVsaXN0LgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAg
IC8vIFRoZXNlIG1ldGhvZHMgZGVmaW5lIHRoZSBwYWRkaW5nIGZvciB0aGUgTWVudUxpc3QncyBp
bm5lciBibG9jay4KKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKwor
ICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFkZGluZ1RvcCgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdDsKKwor
ICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGlu
dCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAgICAgICAgdmlydHVhbCBib29s
IGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAg
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRp
bnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIC8vIExpc3QgQm94IHNlbGVj
dGlvbiBjb2xvcgorICAgICAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBh
ZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OworICAgICAgICBib29s
IHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiwgSW1hZ2UqKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYV9oCg==
</data>
<flag name="review"
          id="15687"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30958</attachid>
            <date>2009-06-04 13:20:43 -0700</date>
            <delta_ts>2009-06-04 13:45:21 -0700</delta_ts>
            <desc>Adding in empty skia files for step 1 of patch.</desc>
            <filename>new_skia.patch</filename>
            <type>text/plain</type>
            <size>1593</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uZjM0ZGM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNi0wNCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBBZGRpbmcgaW4gZW1wdHkgZmlsZXMgdG8gc3RhZ2UgdGhlIGV4dHJh
Y3Qgb2YgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEKKyAgICAgICAgZnJvbSBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXggYW5kIFJlbmRlclRoZW1lQ2hyb21pdW1XaW5kb3dzLgorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcDogQWRkZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmg6IEFkZGVkLgorCiAyMDA5LTA2LTAx
ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjE3YzgK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5jcHAKQEAgLTAsMCArMSwyIEBACisvLyBGSVhNRTogVGhpcyBpcyBhIHBsYWNlaG9sZGVy
IHRvIGF2b2lkIHNvbWUgaXNzdWVzIHdpdGggd2Via2l0Lmd5cCBpbiB0aGUgY2hyb21pdW0gdHJl
ZS4gSGF2aW5nIHRoaXMgcGxhY2Vob2xkZXIgdW50aWwgd2UgY2FuIGZhY3RvciBvdXQKKy8vIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IHdpbGwg
a2VlcCB0aGUgSEVBRCBvZiBib3RoIHRyZWVzIGNvbXBhdGlibGUuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iZjIxN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWEuaApAQCAtMCwwICsxLDIgQEAKKy8vIEZJWE1FOiBUaGlzIGlz
IGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgc29tZSBpc3N1ZXMgd2l0aCB3ZWJraXQuZ3lwIGluIHRo
ZSBjaHJvbWl1bSB0cmVlLiBIYXZpbmcgdGhpcyBwbGFjZWhvbGRlciB1bnRpbCB3ZSBjYW4gZmFj
dG9yIG91dAorLy8gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgZnJvbSBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXggd2lsbCBrZWVwIHRoZSBIRUFEIG9mIGJvdGggdHJlZXMgY29tcGF0aWJsZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30974</attachid>
            <date>2009-06-04 17:16:32 -0700</date>
            <delta_ts>2009-06-04 20:10:42 -0700</delta_ts>
            <desc>Factors out a common RenderThemeChromiumSkia class and makes RenderThemeChromiumLinux and RenderThemeChromiumWin depend on it.</desc>
            <filename>factor_out_skia</filename>
            <type>text/plain</type>
            <size>60965</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uYTUzNDUyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAwOS0wNi0wNCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBGYWN0b3Igb3V0IGNvbW1vbmFsaXRpZXMgaW4gUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4IGFuZCBSZW5kZXJUaGVtZUNocm9taXVtV2luIGludG8gUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBD
SEFOR0VECisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlz
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRk
aW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0
b25JbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRv
bkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6flJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51
eC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
V2luOjpSZW5kZXJUaGVtZUNocm9taXVtV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46On5SZW5kZXJUaGVtZUNocm9taXVtV2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJu
YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmg6CisKIDIw
MDktMDYtMDEgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA5NGVlNjRmLi41ODNlYTA2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKQEAgLTUyLDExICs1
Miw2IEBAIGVudW0gUGFkZGluZ1R5cGUgewogCiBzdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0IH07CiAKLS8vIFRoZSBkZWZhdWx0
IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZv
bnQKLS8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdo
aWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLS8vIGZvcm0gY29udHJvbCBmb250cy4KLXN0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOwotCiAvLyBUaGUgYmFja2dyb3VuZCBm
b3IgdGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQgYmUgYSA2MCUgb3BhcXVlIGJsYWNr
IHJlY3RhbmdsZS4gVGhpcwogLy8gbWF0Y2hlcyB0aGUgVUkgbW9ja3VwcyBmb3IgdGhlIGRlZmF1
bHQgVUkgdGhlbWUuCiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdE1lZGlhQ29udHJvbE9wYWNp
dHkgPSAwLjZmOwpAQCAtNzEsMTIgKzY2LDYgQEAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gOTsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMwOwogc3RhdGljIGNvbnN0IGZsb2F0
IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCA9IDE4OwogCi1zdGF0aWMgYm9v
bCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCi17Ci0gICAgLy8gVGhpcyBj
YXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1cy4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpKQpAQCAtODUsMjAgKzc0LDYgQEAgc3RhdGljIHZvaWQgc2V0U2l6ZUlmQXV0
byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKLS8vIFdlIGFp
bSB0byBtYXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRoZSBlbmNv
ZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgotLy8gLUdlY2tvIHVz
ZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZBVUxUX0dV
SV9GT05UKSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQotLy8gLVNhZmFyaSB1c2Vz
IEx1Y2lkYSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Uga25v
dyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCi0vLyBJRSB1c2VzIE1T
IFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNlcnRhaW4g
cGl4ZWwKLS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVzZSBBcmlh
bC4KLXN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgcmV0dXJuICJB
cmlhbCI7Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiAvLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEg
SFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJucyBOVUxMIGlmIG9uZSBjYW5ub3Qg
YmUgZm91bmQuCiBzdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5v
ZGUqIG5vZGUpCkBAIC0xMTMsNzYgKzg4LDkyIEBAIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKIH0KICNlbmRpZgogCi1SZW5kZXJUaGVtZSog
dGhlbWUoKQorLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUgdXNlcyBhIGZvbnQg
YmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJv
bHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2Nr
T2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcp
CisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhNRTogVGhlIG9ubHkg
Y2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5n
cy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3Jy
ZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93
IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgY2hhciogUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmRlZmF1bHRHVUlGb250ID0gIkFyaWFsIjsKKworZmxvYXQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmRlZmF1bHRGb250U2l6ZSA9IDE2LjA7CisKK1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpCiB7Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eCB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1lOwogfQogCi1SZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpCitSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkKIHsKIH0KIAogLy8gVXNlIHRoZSBXaW5k
b3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgotU3RyaW5nIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewogICAgIHJldHVy
biBTdHJpbmcodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5Vc2Vy
QWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblF1
aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLVN0cmluZyBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQorU3RyaW5nIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKICAg
ICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQs
IHNpemVvZihtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAj
ZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewot
ICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICByZXR1cm4g
dHJ1ZTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZv
ciB1cy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIENvbG9yKDB4MWUsIDB4OTAsIDB4ZmYpOwogfQogCi1Db2xvciBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigweGM4
LCAweGM4LCAweGM4KTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAogewogICAgIHJldHVybiBDb2xvcjo6YmxhY2s7CiB9CiAKLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yKDB4
MzIsIDB4MzIsIDB4MzIpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBs
YXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOwogfQogCi1kb3VibGUgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAorZG91YmxlIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogewogICAg
IC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0
IGludHJvZHVjZXMKICAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMu
IGh0dHA6Ly9iLzExOTg0NDAKICAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2Rl
KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gV2UgY2FjaGUgdGhlIGludGVydmFsIHNv
IHdlIGRvbid0IGhhdmUgdG8gcmVwZWF0ZWRseSByZXF1ZXN0IGl0IGZyb20gZ3RrLgotICAgIHJl
dHVybiAwLjU7CisgICAgcmV0dXJuIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6
ZTsKIApAQCAtMTk5LDcgKzE5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZh
bWlseShkZWZhdWx0R1VJRm9udCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKGZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNp
emUodHJ1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpOb0ZhbWlseSk7CkBAIC0yMDcsMTIgKzE5OCwxMiBAQCB2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwogfQogCi1pbnQg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWluaW11bU1lbnVM
aXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludENoZWNrYm94KFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgc3RhdGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hPbiIpLnJlbGVhc2VSZWYoKTsKICAg
ICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJsaW51eENoZWNrYm94T2ZmIikucmVsZWFzZVJlZigpOwpAQCAtMjIyLDcgKzIx
Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludENoZWNrYm94KFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
ICAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKQEAgLTIzNyw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAg
ICBzZXRTaXplSWZBdXRvKHN0eWxlLCBzaXplKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2Uq
IGNvbnN0IGNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhS
YWRpb09uIikucmVsZWFzZVJlZigpOwogICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2Vk
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9PZmYiKS5yZWxl
YXNlUmVmKCk7CkBAIC0yNDcsNyArMjM4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRS
YWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAv
LyBVc2Ugc2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KICAgICBzZXRDaGVj
a2JveFNpemUoc3R5bGUpOwpAQCAtMzAyLDE4ICsyOTMsMjggQEAgc3RhdGljIHZvaWQgcGFpbnRC
dXR0b25MaWtlKFJlbmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmoKICAgICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIGJvdHRvbSAtIDIsIHBhaW50
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAg
IC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCiAgICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhl
bFNpemU7CkBAIC0zMjIsMTcgKzMyMywxNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdAogICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSBy
OwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+
cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFJl
bmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwogCiAg
ICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJv
eCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNx
dWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWln
aHQoc3RkOjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQo
KSwgYm91bmRzLmhlaWdodCgpKSkpOwogICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0
KCkpOwpAQCAtMzQ3LDE0ICszNDgsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb24KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgZW1wdHlTaXplKDEs
IDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4
ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUg
ZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAg
LTM2NCwxNiArMzY1LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTCiAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwog
ICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFy
ZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFJlbmRl
ckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwogICAgIElu
dFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsK
LSAgICAKKwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1
YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdo
dChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgp
LCBib3VuZHMuaGVpZ2h0KCkpKSk7CiAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQo
KSk7CkBAIC0zODEsMTMgKzM4MiwxMyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbwogICAgIC8v
IENlbnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBp
ZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBv
bmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0
byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgogICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55
KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLSAg
ICAKKwogICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmllciIpLnJlbGVhc2VSZWYoKTsKICAgICBpLmNvbnRl
eHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBi
YXNlZCBvbiB0aGUgZm9udCBzaXplCiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRT
aXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CkBAIC0zOTgsNyArMzk5LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWMKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWdu
aWZpZXJIZWlnaHQsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsK
QEAgLTQwNiwxMCArNDA3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3go
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgUmVuZGVyQm94KiBwYXJlbnRS
ZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRC
b3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAorCiAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50
J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCks
IGJvdW5kcy5oZWlnaHQoKSkpOwogICAgIGJvdW5kcy5zZXRXaWR0aChzdGQ6Om1pbihwYXJlbnRC
b3gud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZHMuaGVpZ2h0KCkgKiBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUpKSk7CkBAIC00MjMsMzMgKzQyNCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQotewotICAgIGNvbnRleHQtPmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZGVmYXVsdE1lZGlhQ29udHJvbE9wYWNpdHkpOwotCi0gICAgLy8gRHJh
dyBiYWNrZ3JvdW5kLgotICAgIENvbG9yIG9sZEZpbGwgPSBjb250ZXh0LT5maWxsQ29sb3IoKTsK
LSAgICBDb2xvciBvbGRTdHJva2UgPSBjb250ZXh0LT5zdHJva2VDb2xvcigpOwotCi0gICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBjb250ZXh0LT5kcmF3UmVjdChyZWN0KTsKLQotICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihvbGRGaWxsKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihvbGRTdHJva2UpOwotCi0gICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xl
IGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUs
IHJvdW5kZWQgbGVmdCwgYW5kIGRvd24uCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+
cmVjdCgpOwotICAgIGltYWdlUmVjdC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBp
bWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOwotICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsg
KHJlY3Qud2lkdGgoKSAtIGltYWdlLT53aWR0aCgpICsgMSkgLyAyKTsKLQotICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKLSAgICBj
b250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURF
TykKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJl
bnQoby0+bm9kZSgpKTsKQEAgLTQ2NSw3ICs0NDAsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZQogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lZGlh
TXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1l
ZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwpAQCAtNDgxLDEzICs0NTYsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAog
ewogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3NlcnMuCiAgICAg
c3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKTsKQEAgLTUxMCw1NyArNDg1LDEyMCBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAg
ICBhZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CiB9CiAKIC8vIFVzZWQg
dG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVy
KQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVudUxpc3RCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3RC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBpLCBy
ZWN0KTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIExlZnRQYWRk
aW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQ
YWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRk
aW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0
b21QYWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50
ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1
dHRvbkludGVybmFsUGFkZGluZ0xlZnQoKSBjb25zdAogewogICAgIHJldHVybiAzOwogfQogCi1p
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCgp
IGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z1JpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMzsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKCkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gMTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50
ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKIH0K
IAorZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWxJbnRl
cm5hbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpjYXJldEJsaW5rSW50ZXJ2
YWwoKTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFs
UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKK3sKKyAg
ICAvLyBUaGlzIGludGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzZXItc3Vw
cGxpZWQgcGFkZGluZy4KKyAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4KKyAgICBpbnQg
cGFkZGluZyA9IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nW3BhZGRpbmdUeXBlXTsKKwor
ICAgIC8vIFJlc2VydmUgdGhlIHNwYWNlIGZvciByaWdodCBhcnJvdyBoZXJlLiBUaGUgcmVzdCBv
ZiB0aGUgcGFkZGluZyBpcyBzZXQKKyAgICAvLyBieSBhZGp1c3RNZW51TGlzdFN0eWxlLCBzaW5j
ZSBQb3B1cE1lbnVDaHJvbWl1bS5jcHAgdXNlcyB0aGUgcGFkZGluZworICAgIC8vIGZyb20gUmVu
ZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAu
ICBJZgorICAgIC8vIHRoZSBNZW51TGlzdCBhY3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9BcHBl
YXJhbmNlIiwgdGhlbiB0aGF0IG1lYW5zIHdlCisgICAgLy8gZG9uJ3QgZHJhdyBhIGJ1dHRvbiwg
c28gZG9uJ3QgcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuCisgICAgY29uc3QgaW50IGJhclR5cGUgPSBz
dHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7Cisg
ICAgaWYgKHBhZGRpbmdUeXBlID09IGJhclR5cGUgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBO
b0NvbnRyb2xQYXJ0KQorICAgICAgICBwYWRkaW5nICs9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKKworICAgIHJldHVybiBwYWRkaW5nOworfQor
Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1h
Z2UpCit7CisgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihkZWZhdWx0TWVkaWFD
b250cm9sT3BhY2l0eSk7CisKKyAgICAvLyBEcmF3IGJhY2tncm91bmQuCisgICAgQ29sb3Igb2xk
RmlsbCA9IGNvbnRleHQtPmZpbGxDb2xvcigpOworICAgIENvbG9yIG9sZFN0cm9rZSA9IGNvbnRl
eHQtPnN0cm9rZUNvbG9yKCk7CisKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJs
YWNrKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOworICAgIGNv
bnRleHQtPmRyYXdSZWN0KHJlY3QpOworCisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG9sZEZp
bGwpOworICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZSk7CisKKyAgICAvLyBD
cmVhdGUgYSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0IGlzIGNlbnRl
cmVkIGluIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQgZG93bi4KKyAg
ICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7CisgICAgaW1hZ2VSZWN0LnNldFko
cmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEpIC8gMik7Cisg
ICAgaW1hZ2VSZWN0LnNldFgocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1hZ2UtPndpZHRo
KCkgKyAxKSAvIDIpOworCisgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3Qs
IENvbXBvc2l0ZVNvdXJjZUF0b3ApOworICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7Cisg
ICAgc3RhdGljIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCB0aGVtZTsKKyAgICByZXR1cm4gJnRo
ZW1lOworfQorCitSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OlJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eCgpCit7Cit9CisKK1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6flJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eCgpCit7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGlzRW5hYmxlZChvKTsKQEAgLTU4NiwyMiArNjI0LDQgQEAgQ29sb3IgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAogICAgIHJldHVybiBDb2xvcigweDMyLCAweDMyLCAweDMyKTsKIH0KIAotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUq
IHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBpbnRlcm5hbCBw
YWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCi0gICAg
Ly8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCi0gICAgaW50IHBhZGRpbmcgPSBzdHlsZWRNZW51
TGlzdEludGVybmFsUGFkZGluZ1twYWRkaW5nVHlwZV07Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSBz
cGFjZSBmb3IgcmlnaHQgYXJyb3cgaGVyZS4gVGhlIHJlc3Qgb2YgdGhlIHBhZGRpbmcgaXMKLSAg
ICAvLyBzZXQgYnkgYWRqdXN0TWVudUxpc3RTdHlsZSwgc2luY2UgUG9wTWVudVdpbi5jcHAgdXNl
cyB0aGUgcGFkZGluZyBmcm9tCi0gICAgLy8gUmVuZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUg
aW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAuCi0gICAgLy8gSWYgdGhlIE1lbnVMaXN0IGFj
dHVhbGx5IGhhcyBhcHBlYXJhbmNlICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMKLSAg
ICAvLyB3ZSBkb24ndCBkcmF3IGEgYnV0dG9uLCBzbyBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBp
dC4KLSAgICBjb25zdCBpbnQgYmFyX3R5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
UmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7Ci0gICAgaWYgKHBhZGRpbmdUeXBlID09IGJhcl90
eXBlICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydCkKLSAgICAgICAgcGFk
ZGluZyArPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNz
KCk7Ci0KLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1MaW51eC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmgKaW5kZXggNzgzODUwOS4uM2M3ZTRjMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKQEAgLTMyLDEwICszMiwxMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtTGludXgg
OiBwdWJsaWMgUmVuZGVyVGhlbWUgeworICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
IDogcHVibGljIFJlbmRlclRoZW1lIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eCgpOwotICAgICAgICB+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCkgeyB9
CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCk7CisgICAgICAgIHZpcnR1YWwgflJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhKCk7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFE
ZWZhdWx0U3R5bGVTaGVldCgpOwogICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0
eWxlU2hlZXQoKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFj
dHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CiAKICAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBp
cyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtNTYsNiArNTYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CiAKKyAgICAgICAg
Ly8gVG8gY2hhbmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3ZlcnJpZGUgY2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0aGF0IHdlIG1heSBzaGFyZSBsYXlv
dXQgdGVzdCBjb2RlIGFuIGludGVyY2VwdHMuCiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0
QmxpbmtJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAgICAgIC8vIFN5c3RlbSBmb250cy4KQEAgLTcz
LDkgKzc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChv
LCBpLCByKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAt
MTE2LDIxICsxMTcsMzcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGlu
dCBidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBpbnQg
YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3Q7CiAKLSAgICAgICAgLy8gQSBtZXRo
b2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93
IGhhcyBmb2N1cyBvciBub3QuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQogICAgICAgICAvLyBBIGdlbmVyYWwg
bWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwu
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGRlZmF1bHRHVUlGb250OworCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRo
IGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKKyAgICAgICAgLy8g
c2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2Ug
dGhlbiBzaHJpbmspIGZvcgorICAgICAgICAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCisgICAgICAg
IHN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemU7CisKKyAgICAgICAgdmlydHVhbCBkb3VibGUg
Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIGludCBtZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5n
VHlwZSkgY29uc3Q7CisgICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOworICAgIH07CisKKyAgICBjbGFz
cyBSZW5kZXJUaGVtZUNocm9taXVtTGludXggOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7Cisg
ICAgICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOworCisgICAgICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhl
IHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1
cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKICAgICAgICAgLy8gTGlz
dCBCb3ggc2VsZWN0aW9uIGNvbG9yCiAgICAgICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJv
eFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9y
IGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtZW51TGlz
dEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmLCBJbWFnZSopOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKaW5kZXggNTI4
ODE5MS4uOWI0ZjMwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbi5jcHAKQEAgLTU4LDI3ICs1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIHsKIAotLy8gVGhlIGJhY2tncm91bmQgZm9yIHRoZSBtZWRpYSBwbGF5ZXIgY29udHJvbHMg
c2hvdWxkIGJlIGEgNjAlIG9wYXF1ZSBibGFjayByZWN0YW5nbGUuIFRoaXMKLS8vIG1hdGNoZXMg
dGhlIFVJIG1vY2t1cHMgZm9yIHRoZSBkZWZhdWx0IFVJIHRoZW1lLgotc3RhdGljIGNvbnN0IGZs
b2F0IGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFjaXR5ID0gMC42ZjsKLQotLy8gVGhlc2UgdmFsdWVz
IGFsbCBtYXRjaCBTYWZhcmkvV2luLgotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDb250cm9s
Rm9udFBpeGVsU2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0
b25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxCdXR0b25TaXplID0gNTsK
LXN0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0b25TaXplID0gMjE7Ci1zdGF0aWMgY29u
c3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMTM7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5
Owotc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXpl
ID0gMzA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bldpZHRoID0gMTg7Ci0KLWJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3QgU2tDYW52
YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29uc3RfY2FzdDxT
a0NhbnZhcyo+KGNhbnZhcyksIGZhbHNlKTsKLSAgICBpdGVyLm5leHQoKTsgIC8vIFRoZXJlIGlz
IGFsd2F5cyBhdCBsZWFzdCBvbmUgbGF5ZXIuCi0gICAgcmV0dXJuICFpdGVyLmRvbmUoKTsgIC8v
IFRoZXJlIGlzID4gMSBsYXllciBpZiB0aGUgdGhlIGl0ZXJhdG9yIGNhbiBzdGlsIGFkdmFuY2Uu
Ci19Ci0KIGNsYXNzIFRoZW1lUGFpbnRlciA6IHB1YmxpYyBUcmFuc3BhcmVuY3lXaW4gewogcHVi
bGljOgogICAgIFRoZW1lUGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHIpCkBAIC05Myw2ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIHN0YXRpYyBib29sIGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKGNvbnN0IFNrQ2FudmFzKiBj
YW52YXMpCisgICAgeworICAgICAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29uc3RfY2Fz
dDxTa0NhbnZhcyo+KGNhbnZhcyksIGZhbHNlKTsKKyAgICAgICAgaXRlci5uZXh0KCk7ICAvLyBU
aGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgorICAgICAgICByZXR1cm4gIWl0ZXIu
ZG9uZSgpOyAgLy8gVGhlcmUgaXMgPiAxIGxheWVyIGlmIHRoZSB0aGUgaXRlcmF0b3IgY2FuIHN0
aWwgYWR2YW5jZS4KKyAgICB9CisKICAgICBzdGF0aWMgTGF5ZXJNb2RlIGdldExheWVyTW9kZShH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRyYW5zZm9ybU1vZGUgdHJhbnNmb3JtTW9kZSkKICAg
ICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNEcmF3aW5nVG9J
bWFnZUJ1ZmZlcigpKSAgLy8gTWlnaHQgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgpAQCAt
MTEyLDExICs5OCwxMSBAQCBwcml2YXRlOgogICAgICAgICBlbHNlICAvLyBOb3RoaW5nIGludGVy
ZXN0aW5nLgogICAgICAgICAgICAgcmV0dXJuIEtlZXBUcmFuc2Zvcm07CiAgICAgfQotfTsKIAot
fSAgLy8gbmFtZXNwYWNlCit9OwogCi1zdGF0aWMgdm9pZCBnZXROb25DbGllbnRNZXRyaWNzKE5P
TkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpIHsKK3N0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJp
Y3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykKK3sKICAgICBzdGF0aWMgVUlOVCBzaXplID0g
V2ViQ29yZTo6aXNWaXN0YU9yTmV3ZXIoKSA/CiAgICAgICAgIHNpemVvZihOT05DTElFTlRNRVRS
SUNTKSA6IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7CiAgICAgbWV0cmljcy0+Y2JT
aXplID0gc2l6ZTsKQEAgLTEyNCwxOSArMTEwLDcgQEAgc3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50
TWV0cmljcyhOT05DTElFTlRNRVRSSUNTKiBtZXRyaWNzKSB7CiAgICAgQVNTRVJUKHN1Y2Nlc3Mp
OwogfQogCi1lbnVtIFBhZGRpbmdUeXBlIHsKLSAgICBUb3BQYWRkaW5nLAotICAgIFJpZ2h0UGFk
ZGluZywKLSAgICBCb3R0b21QYWRkaW5nLAotICAgIExlZnRQYWRkaW5nCi19OwotCi1zdGF0aWMg
Y29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0
IH07Ci0KLS8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0
aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKLS8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBh
bmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLS8vIGZvcm0gY29u
dHJvbCBmb250cy4KLXN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOworfSAvLyBu
YW1lc3BhY2UKIAogc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5c3RlbUZvbnQ7CiBzdGF0
aWMgRm9udERlc2NyaXB0aW9uIG1lbnVGb250OwpAQCAtMTU5LDE0ICsxMzMsNiBAQCBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgdm9pZCBzZXRGaXhlZFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBpbnQgcGFkZGluZ1s0XSkKLXsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmdbTGVmdFBhZGRpbmddLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
UmlnaHQoTGVuZ3RoKHBhZGRpbmdbUmlnaHRQYWRkaW5nXSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZ1tUb3BQYWRkaW5nXSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ1tCb3R0b21QYWRkaW5nXSwgRml4
ZWQpKTsKLX0KLQogLy8gUmV0dXJuIHRoZSBoZWlnaHQgb2Ygc3lzdGVtIGZvbnQgfGZvbnR8IGlu
IHBpeGVscy4gIFdlIHVzZSB0aGlzIHNpemUgYnkKIC8vIGRlZmF1bHQgZm9yIHNvbWUgbm9uLWZv
cm0tY29udHJvbCBlbGVtZW50cy4KIHN0YXRpYyBmbG9hdCBzeXN0ZW1Gb250U2l6ZShjb25zdCBM
T0dGT05UJiBmb250KQpAQCAtMjAxLDIwICsxNjcsNiBAQCBzdGF0aWMgZmxvYXQgc3lzdGVtRm9u
dFNpemUoY29uc3QgTE9HRk9OVCYgZm9udCkKICAgICByZXR1cm4gKChzaXplIDwgMTIuMGYpICYm
IChHZXRBQ1AoKSA9PSA5MzYpKSA/IDEyLjBmIDogc2l6ZTsKIH0KIAotLy8gV2UgYWltIHRvIG1h
dGNoIElFIGhlcmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFz
IHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCi0vLyAtR2Vja28gdXNlcyBNUyBT
aGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQp
LAotLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCi0vLyAtU2FmYXJpIHVzZXMgTHVjaWRh
IEdyYW5kZS4KLS8vCi0vLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRv
bid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KLS8vIElFIHVzZXMgTVMgU2hlbGwg
RGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAot
Ly8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgotc3Rh
dGljIHdjaGFyX3QqIGRlZmF1bHRHVUlGb250KCkKLXsKLSAgICByZXR1cm4gTCJBcmlhbCI7Ci19
Ci0KIC8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4gIE9uZSBwb2ludCBpcyAxLzcyIG9m
IGFuIGluY2guCiBzdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9pbnRzKQogewpA
QCAtMjMzLDE0ICsxODUsNiBAQCBzdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9p
bnRzKQogICAgIHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJbmNoICogcGl4ZWxzUGVySW5jaDsK
IH0KIAotc3RhdGljIHZvaWQgc2V0U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KIHN0YXRpYyBkb3Vi
bGUgcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKGRvdWJsZSBkZWZhdWx0SW50ZXJ2YWwpCiB7CiAg
ICAgVUlOVCBibGlua1RpbWUgPSBHZXRDYXJldEJsaW5rVGltZSgpOwpAQCAtMjUxLDIwICsxOTUs
NiBAQCBzdGF0aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChkb3VibGUgZGVmYXVs
dEludGVydmFsKQogICAgIHJldHVybiBibGlua1RpbWUgLyAxMDAwLjA7CiB9CiAKLSNpZiBFTkFC
TEUoVklERU8pCi0vLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9t
IGEgTm9kZS4gUmV0dXJucyBOVUxMIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi1zdGF0aWMgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0jZW5kaWYKLQog
Ly8gSW1wbGVtZW50IFdlYkNvcmU6OnRoZW1lKCkgZm9yIGdldHRpbmcgdGhlIGdsb2JhbCBSZW5k
ZXJUaGVtZS4KIFJlbmRlclRoZW1lKiB0aGVtZSgpCiB7CkBAIC0yNzIsMjIgKzIwMiwxMyBAQCBS
ZW5kZXJUaGVtZSogdGhlbWUoKQogICAgIHJldHVybiAmd2luVGhlbWU7CiB9CiAKLVN0cmluZyBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2lu
VXNlckFnZW50U3R5bGVTaGVldCkpOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKK1JlbmRlclRoZW1lQ2hyb21pdW1XaW46OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW4oKQogewotICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NV
c2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNo
ZWV0KSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCitSZW5kZXJUaGVtZUNocm9taXVt
V2luOjp+UmVuZGVyVGhlbWVDaHJvbWl1bVdpbigpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRp
YUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9s
c0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQotI2VuZGlmCiAKIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogewpAQCAtMzM3LDIzICsyNTgsMTEgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0
CiAgICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOyAvLyBZZWxsb3cuCiB9CiAKLWRv
dWJsZSBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAot
ewotICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUs
IGFzIGl0IGludHJvZHVjZXMKLSAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwg
dGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRl
c3RNb2RlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gVGhpcyBpbnZvbHZlcyBhIHN5
c3RlbSBjYWxsLCBzbyB3ZSBjYWNoZSB0aGUgcmVzdWx0LgotICAgIHN0YXRpYyBkb3VibGUgYmxp
bmtJbnRlcnZhbCA9IHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChSZW5kZXJUaGVtZTo6Y2FyZXRC
bGlua0ludGVydmFsKCkpOwotICAgIHJldHVybiBibGlua0ludGVydmFsOwotfQotCiB2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBsb2dpYyBvd2VzIG11
Y2ggdG8gUmVuZGVyVGhlbWVTYWZhcmkuY3BwLgogICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVk
RGVzYyA9IE5VTEw7Ci0gICAgd2NoYXJfdCogZmFjZU5hbWUgPSAwOworICAgIEF0b21pY1N0cmlu
ZyBmYWNlTmFtZTsKICAgICBmbG9hdCBmb250U2l6ZSA9IDA7CiAgICAgc3dpdGNoIChwcm9wSWQp
IHsKICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9uOgpAQCAtMzYxLDcgKzI3MCw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwCiAgICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJz
b2x1dGVTaXplKCkpIHsKICAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKICAg
ICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFj
ZU5hbWUgPSBtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAg
ZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFt
ZSwgd2NzbGVuKG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpKTsKICAgICAgICAg
ICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzcwLDcgKzI3OSw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwCiAgICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgewog
ICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwogICAgICAgICAgICAgZ2V0Tm9u
Q2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IG1ldHJpY3Mu
bGZNZW51Rm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJp
bmcobWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmTWVudUZv
bnQubGZGYWNlTmFtZSkpOwogICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZSht
ZXRyaWNzLmxmTWVudUZvbnQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzg2LDEy
ICsyOTUsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Gb250KGludCBw
cm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXAKICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0TWluaUNvbnRyb2w6CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKICAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0Q29udHJvbDoKLSAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0
R1VJRm9udCgpOworICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250OwogICAgICAgICAv
LyBXaHkgMiBwb2ludHMgc21hbGxlcj8gIEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4K
ICAgICAgICAgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1BpeGVscygyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0
R1VJRm9udCgpOworICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250OwogICAgICAgICBm
b250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDAw
LDkgKzMwOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQg
cHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwCiAgICAgICAgIGNhY2hlZERlc2Mg
PSAmZm9udERlc2NyaXB0aW9uOwogCiAgICAgaWYgKGZvbnRTaXplKSB7Ci0gICAgICAgIEFTU0VS
VChmYWNlTmFtZSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5
KEF0b21pY1N0cmluZyhmYWNlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjc2xlbihmYWNlTmFtZSkpKTsKKyAgICAgICAgY2Fj
aGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFjZU5hbWUpOwogICAgICAgICBjYWNo
ZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0
R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKICAgICAgICAgY2FjaGVk
RGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CkBAIC00MTIsMTEgKzMxOSw2IEBAIHZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwCiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7
CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjptaW5pbXVtTWVudUxpc3RTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBv
KSBjb25zdAogewogICAgIC8vIFRoZXNlIHNpemVzIG1hdGNoIHdoYXQgV2luWFAgZHJhd3MgZm9y
IHZhcmlvdXMgbWVudXMuCkBAIC00MzEsMjUgKzMzMywxMyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAg
ICAgfQogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldENoZWNrYm94U2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBh
aW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlm
ICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2Rl
ZCBzaXplIG9mIDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkKLSAgICAv
LyBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBzZXR0aW5n
cyBvbiBXaW5kb3dzLAotICAgIC8vIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJn
ZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvciB0aGUgaGlnaGVyCi0gICAgLy8gRFBJLiAgVW50aWwg
b3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UK
LSAgICAvLyBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzIG1ldHJpY3MuCi0gICAgY29uc3QgSW50
U2l6ZSBzaXplKDEzLCAxMyk7Ci0gICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7CisgICAg
cmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOwogfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1XaW46OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBVc2Ug
c2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KLSAgICBzZXRDaGVja2JveFNp
emUoc3R5bGUpOworICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNDgzLDE3
OCArMzczLDkgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZv
bnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVs
dENvbnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5k
ZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0
dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgSW50UmVjdCBib3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7
Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRv
UmVuZGVyQm94KG8tPnBhcmVudCgpKTsKLQotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50
UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUg
dGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50
J3MgYm94Ci0gICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwg
c3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgYm91
bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBDZW50ZXIgdGhlIGJ1dHRv
biB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBp
eGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRo
ZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRo
ZSB0ZXh0LgotICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdo
dCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLQotICAgIHN0YXRpYyBJbWFnZSogY2Fu
Y2VsSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLnJl
bGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLnJlbGVhc2VSZWYo
KTsKLSAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2Vk
SW1hZ2UgOiBjYW5jZWxJbWFnZSwgYm91bmRzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgSW50U2l6ZSBlbXB0eVNpemUoMSwgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAg
ICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAg
ICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9u
dFBpeGVsU2l6ZTsKLSAgICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3Rk
OjptYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwot
fQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBB
U1NFUlQoby0+cGFyZW50KCkpOwotICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgp
LT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyQm94KiBw
YXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBw
YXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3
aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Ci0gICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1p
bihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMu
aGVpZ2h0KCkpKSk7Ci0gICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBDZW50ZXIgdGhlIGRlY29yYXRpb24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwg
c28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8g
YmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVu
ZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBib3VuZHMuc2V0WShwYXJlbnRC
b3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7
Ci0gICAgCi0gICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOwotICAgIGkuY29u
dGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24g
dGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8g
ZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBtYWduaWZpZXJIZWlnaHQgPSBs
cm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
aXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUp
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxy
b3VuZGYobWFnbmlmaWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldp
ZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQotewotICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+cGFyZW50KCkp
OwotICAgIGlmICghby0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3go
by0+cGFyZW50KCkpOwotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5h
YnNvbHV0ZUNvbnRlbnRCb3goKTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBk
ZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAgICBib3VuZHMuc2V0SGVp
Z2h0KHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7Ci0gICAg
Ym91bmRzLnNldFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGJvdW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0
aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKLQotICAgIC8v
IENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0
IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8vIGJlIG9uZSBw
aXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxv
b2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSAr
IChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwotCi0gICAg
c3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKLSAgICBpLmNvbnRleHQt
PmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFs
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGlt
YWdlKQotewotICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZGVmYXVsdE1lZGlh
Q29udHJvbE9wYWNpdHkpOwotCi0gICAgLy8gRHJhdyBiYWNrZ3JvdW5kLgotICAgIENvbG9yIG9s
ZEZpbGwgPSBjb250ZXh0LT5maWxsQ29sb3IoKTsKLSAgICBDb2xvciBvbGRTdHJva2UgPSBjb250
ZXh0LT5zdHJva2VDb2xvcigpOwotCi0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpi
bGFjayk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBj
b250ZXh0LT5kcmF3UmVjdChyZWN0KTsKLQotICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihvbGRG
aWxsKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvbGRTdHJva2UpOwotCi0gICAgLy8g
Q3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50
ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24uCi0g
ICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOwotICAgIGltYWdlUmVjdC5zZXRZ
KHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOwot
ICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53aWR0
aCgpICsgMSkgLyAyKTsKLQotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0
LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKLSAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXll
cigpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1X
aW46OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFF
bGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGlj
IEltYWdlKiBtZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBh
dXNlIikucmVsZWFzZVJlZigpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5h
bChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlh
UGxheSA6IG1lZGlhUGF1c2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0g
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRp
YyBJbWFnZSogc291bmRGdWxsID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNv
dW5kRnVsbCIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNlUmVmKCk7
Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0
LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5kRnVsbCk7Ci0j
ZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBIZWlnaHQg
aXMgbG9ja2VkIHRvIGF1dG8gb24gYWxsIGJyb3dzZXJzLgotICAgIHN0eWxlLT5zZXRMaW5lSGVp
Z2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICByZXR1cm4gcGFpbnRT
bGlkZXJUcmFjayhvLCBpLCByKTsKIH0KIAogLy8gVXNlZCB0byBwYWludCB1bnN0eWxlZCBtZW51
bGlzdHMgKGkuZS4gd2l0aCB0aGUgZGVmYXVsdCBib3JkZXIpCkBAIC03MDksNTcgKzQzMCw2IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
LXsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLS8v
IFVzZWQgdG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQg
Ym9yZGVyKQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lbnVMaXN0QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3QobywgaSwgcik7Ci19Ci0K
LWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFk
ZGluZyhzdHlsZSwgTGVmdFBhZGRpbmcpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBSaWdodFBhZGRpbmcp
OwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVy
bmFsUGFkZGluZyhzdHlsZSwgVG9wUGFkZGluZyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21Q
YWRkaW5nKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmJ1dHRvbkludGVybmFs
UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIHJldHVybiAzOwotfQotCi1pbnQgUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nUmlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiAzOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9uSW50ZXJu
YWxQYWRkaW5nVG9wKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIDE7Ci19Ci0KIC8vIHN0YXRpYwogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQogewpAQCAtNzY5LDYgKzQzOSwxNCBA
QCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9u
dFNpemUpCiAgICAgc21hbGxTeXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBGb250
RGVzY3JpcHRpb24oKTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmNhcmV0
QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGludm9sdmVzIGEg
c3lzdGVtIGNhbGwsIHNvIHdlIGNhY2hlIHRoZSByZXN1bHQuCisgICAgc3RhdGljIGRvdWJsZSBi
bGlua0ludGVydmFsID0gcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKFJlbmRlclRoZW1lOjpjYXJl
dEJsaW5rSW50ZXJ2YWwoKSk7CisgICAgLy8gRklYTUU6IG1lcmdlIHdpdGggc2tpYSBibGluayBp
bmZvLgorICAgIHJldHVybiBibGlua0ludGVydmFsOworfQorCiB1bnNpZ25lZCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqIG8pCiB7CiAgICAgdW5z
aWduZWQgcmVzdWx0ID0gVFNfTk9STUFMOwpAQCAtOTA5LDIyICs1ODcsNCBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGV4dEZpZWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBv
LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46Om1l
bnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHBhZGRpbmdUeXBl
KSBjb25zdAotewotICAgIC8vIFRoaXMgaW50ZXJuYWwgcGFkZGluZyBpcyBpbiBhZGRpdGlvbiB0
byB0aGUgdXNlci1zdXBwbGllZCBwYWRkaW5nLgotICAgIC8vIE1hdGNoZXMgdGhlIEZGIGJlaGF2
aW9yLgotICAgIGludCBwYWRkaW5nID0gc3R5bGVkTWVudUxpc3RJbnRlcm5hbFBhZGRpbmdbcGFk
ZGluZ1R5cGVdOwotCi0gICAgLy8gUmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIHJpZ2h0IGFycm93IGhl
cmUuIFRoZSByZXN0IG9mIHRoZSBwYWRkaW5nIGlzIHNldAotICAgIC8vIGJ5IGFkanVzdE1lbnVM
aXN0U3R5bGUsIHNpbmNlIFBvcHVwTWVudUNocm9taXVtLmNwcCB1c2VzIHRoZSBwYWRkaW5nCi0g
ICAgLy8gZnJvbSBSZW5kZXJNZW51TGlzdCB0byBsYXkgb3V0IHRoZSBpbmRpdmlkdWFsIGl0ZW1z
IGluIHRoZSBwb3B1cC4gIElmCi0gICAgLy8gdGhlIE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBl
YXJhbmNlICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMgd2UKLSAgICAvLyBkb24ndCBk
cmF3IGEgYnV0dG9uLCBzbyBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBpdC4KLSAgICBjb25zdCBp
bnQgYmFyVHlwZSA9IHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBM
ZWZ0UGFkZGluZzsKLSAgICBpZiAocGFkZGluZ1R5cGUgPT0gYmFyVHlwZSAmJiBzdHlsZS0+YXBw
ZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCi0gICAgICAgIHBhZGRpbmcgKz0gU2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotCi0gICAgcmV0dXJu
IHBhZGRpbmc7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAppbmRleCA2YmE2NTk1Li42N2I2Njc1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCkBAIC0yNCw3ICsyNCw3IEBA
CiAjaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1XaW5faAogI2RlZmluZSBSZW5kZXJUaGVtZUNo
cm9taXVtV2luX2gKIAotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4LmgiCiAKICNpZiBXSU4zMgogdHlwZWRlZiB2b2lkKiBIQU5ETEU7
CkBAIC00MiwxOSArNDIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25l
ZCBtX2NsYXNzaWNTdGF0ZTsKICAgICB9OwogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbiA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbiA6IHB1YmxpYyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSB7CiAgICAgcHVibGljOgotICAg
ICAgICBSZW5kZXJUaGVtZUNocm9taXVtV2luKCkgeyB9Ci0gICAgICAgIH5SZW5kZXJUaGVtZUNo
cm9taXVtV2luKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQo
KTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgbWV0aG9kIGFza2lu
ZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3
aGVuIGhvdmVyZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJl
bmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBSZW5kZXJUaGVtZUNo
cm9taXVtV2luKCk7CisgICAgICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1XaW4oKTsK
IAogICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJh
dyB0aGUgZm9jdXMgcmluZy4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC02Nyw0NiArNTgsMjAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1J
bmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1
YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OwotCiAgICAgICAgIC8vIFN5c3Rl
bSBmb250cy4KICAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVM
aXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgeyByZXR1cm4gcGFpbnRCdXR0b24obywg
aSwgcik7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
IHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQorICAgICAgICAvLyBWYXJpb3VzIHBh
aW50IGZ1bmN0aW9ucy4KKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KICAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0KICAgICAgICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgeyByZXR1cm4gcGFpbnRTbGlkZXJUcmFjayhv
LCBpLCByKTsgfQotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKICAgICAgICAgLy8gTWVudUxpc3QgcmVmZXJzIHRvIGFuIHVuc3R5bGVk
IG1lbnVsaXN0IChtZWFuaW5nIGEgbWVudWxpc3Qgd2l0aG91dAogICAgICAgICAvLyBiYWNrZ3Jv
dW5kLWNvbG9yIG9yIGJvcmRlciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRvbiByZWZlcnMgdG8gYSBz
dHlsZWQKQEAgLTExNywyMSArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IEluIHNob3J0LCB3ZSBlaXRoZXIgZ28gZG93biB0aGUgTWVudUxpc3QgY29kZSBwYXRoIG9yIHRo
ZSBNZW51TGlzdEJ1dHRvbgogICAgICAgICAvLyBjb2RlcGF0aC4gV2UgbmV2ZXIgZ28gZG93biBi
b3RoLiBBbmQgaW4gYm90aCBjYXNlcywgdGhleSByZW5kZXIgdGhlCiAgICAgICAgIC8vIGVudGly
ZSBtZW51bGlzdC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRlZmluZSB0aGUgcGFkZGluZyBm
b3IgdGhlIE1lbnVMaXN0J3MgaW5uZXIgYmxvY2suCi0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRk
aW5nTGVmdCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRp
bmdSaWdodCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRp
bmdUb3AoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKCkgY29uc3Q7CiAKICAgICAgICAgLy8gUHJvdmlkZSBhIHdheSB0byBwYXNzIHRoZSBk
ZWZhdWx0IGZvbnQgc2l6ZSBmcm9tIHRoZSBTZXR0aW5ncyBvYmplY3QKICAgICAgICAgLy8gdG8g
dGhlIHJlbmRlciB0aGVtZS4gIEZJWE1FOiBodHRwOi8vYi8xMTI5MTg2IEEgY2xlYW5lciB3YXkg
d291bGQgYmUKQEAgLTE0MCw2ICs5MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gb2JqZWN0LgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsK
IAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGRl
dGVybWluZVN0YXRlKFJlbmRlck9iamVjdCopOwogICAgICAgICB1bnNpZ25lZCBkZXRlcm1pbmVT
bGlkZXJUaHVtYlN0YXRlKFJlbmRlck9iamVjdCopOwpAQCAtMTQ5LDggKzEwMyw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIHBhaW50VGV4dEZpZWxkSW50ZXJuYWwoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JiwgYm9vbCk7CiAgICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOwotCi0gICAgICAgIGludCBtZW51TGlz
dEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="15746"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30983</attachid>
            <date>2009-06-04 20:10:42 -0700</date>
            <delta_ts>2009-06-05 12:21:06 -0700</delta_ts>
            <desc>Factor out RenderThemeChromiumSkia from just the RenderThemeChromiumLinux portion.</desc>
            <filename>factor_out_skia</filename>
            <type>text/plain</type>
            <size>29631</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uYTVjNzI2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAwOS0wNi0wNCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBFeHRyYWN0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIG91dCBvZiBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXguICBUaGlzCisgICAgICAgIGlzIG1vc3RseSBhIGNvZGUg
c2h1ZmZsZS4gIFRoZSBub24tc3VmZmxlIGNoYW5nZXMgYXJlOgorICAgICAgICAgICAxKSBDcmVh
dGVpb24gb2YgYSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbC4KKyAgICAgICAgICAgMikgTW92
aW5nIG9mIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxl
cy4KKyAgICAgICAgICAgMykgQ2hhbmdpbmcgb2YgZGVmYXVsdEdVSUZvbnQgaW50byBhIHN0YXRp
YyBjbGFzcyBjb25zdGFudCBmcm9tIGEKKyAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uLiAg
QWxzbyB0aGUgdHlwZSBpcyBjaGFuZ2VkIHRvIFN0cmluZy4KKyAgICAgICAgICAgNCkgQ2hhbmdp
bmcgb2YgZGVmYXVsdEZvbnRTaXplIGludG8gYSBzdGF0aWMgY2xhc3MgY29uc3RhbnQgZnJvbSBh
CisgICAgICAgICAgICAgIHN0YXRpYyB2YXJpYWJsZSBpbiB0aGUgZmlsZSBzY29wZS4KKyAgICAg
ICAgICAgNSkgVGhlIHN0YXRpYyBzdXBwb3J0c0ZvY3VzIGZ1bmN0aW9uIHdhcyBjb2xsYXBzZWQg
aW50bworICAgICAgICAgICAgICBzdXBwb3J0c0ZvY3VzUmluZy4KKworCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6On5SZW5kZXJUaGVtZUNocm9taXVt
U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFE
ZWZhdWx0U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0hvdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0ZvY3VzUmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXRDaGVja2JveFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50UmFkaW8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldFJhZGlvU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEZpZWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRBcmVh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJj
aEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRv
bkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
YWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxp
c3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpi
dXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5h
bFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6flJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxp
c3RJbnRlcm5hbFBhZGRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguaDoKKwogMjAwOS0wNi0wMSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IDk0ZWU2NGYuLjY4
ZGQ4NDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
LmNwcApAQCAtNTIsMTEgKzUyLDYgQEAgZW51bSBQYWRkaW5nVHlwZSB7CiAKIHN0YXRpYyBjb25z
dCBpbnQgc3R5bGVkTWVudUxpc3RJbnRlcm5hbFBhZGRpbmdbNF0gPSB7IDEsIDQsIDEsIDQgfTsK
IAotLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiAgV2UgdXNlIHRoaXMg
YXMgdGhlIGRlZmF1bHQgZm9udAotLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBh
cyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgotLy8gZm9ybSBjb250cm9s
IGZvbnRzLgotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRGb250U2l6ZSA9IDE2LjA7Ci0KIC8v
IFRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgbWVkaWEgcGxheWVyIGNvbnRyb2xzIHNob3VsZCBiZSBh
IDYwJSBvcGFxdWUgYmxhY2sgcmVjdGFuZ2xlLiBUaGlzCiAvLyBtYXRjaGVzIHRoZSBVSSBtb2Nr
dXBzIGZvciB0aGUgZGVmYXVsdCBVSSB0aGVtZS4KIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0
TWVkaWFDb250cm9sT3BhY2l0eSA9IDAuNmY7CkBAIC03MSwxMiArNjYsNiBAQCBzdGF0aWMgY29u
c3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Owogc3RhdGlj
IGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CiBz
dGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0g
MTg7CiAKLXN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkK
LXsKLSAgICAvLyBUaGlzIGNhdXNlcyBXZWJLaXQgdG8gZHJhdyB0aGUgZm9jdXMgcmluZ3MgZm9y
IHVzLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgc2V0U2l6ZUlmQXV0byhS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC04NSwyMCArNzQsNiBAQCBzdGF0aWMg
dm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQp
KTsKIH0KIAotLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQg
YmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJv
bHMuCi0vLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2Nr
T2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAotLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcp
Ci0vLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KLS8vCi0vLyBGSVhNRTogVGhlIG9ubHkg
Y2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5n
cy4KLS8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3Jy
ZWN0bHkgYXQgY2VydGFpbiBwaXhlbAotLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93
IHdlIGp1c3QgdXNlIEFyaWFsLgotc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRHVUlGb250KCkK
LXsKLSAgICByZXR1cm4gIkFyaWFsIjsKLX0KLQogI2lmIEVOQUJMRShWSURFTykKIC8vIEF0dGVt
cHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5V
TEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KIHN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKQEAgLTExMyw3NiArODgsOTggQEAgc3RhdGljIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudFBhcmVudChOb2RlKiBub2RlKQogfQogI2VuZGlm
CiAKKy8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgorLy8gLUlFIHVzZXMgYSBmb250IGJhc2Vk
IG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgor
Ly8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVj
dChERUZBVUxUX0dVSV9GT05UKSwKKy8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQorLy8g
LVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCisvLworLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ug
d2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCisv
LyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5
IGF0IGNlcnRhaW4gcGl4ZWwKKy8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBq
dXN0IHVzZSBBcmlhbC4KK2NvbnN0IFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVm
YXVsdEdVSUZvbnQgPSAiQXJpYWwiOworCitmbG9hdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
ZGVmYXVsdEZvbnRTaXplID0gMTYuMDsKKwogUmVuZGVyVGhlbWUqIHRoZW1lKCkKIHsKICAgICBz
dGF0aWMgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IHRoZW1lOwogICAgIHJldHVybiAmdGhlbWU7
CiB9CiAKLVJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
KCkKK1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpCit7
Cit9CisKK1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjp+UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEo
KQogewogfQogCiAvLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNoIHRoZWly
IG1ldHJpY3MuCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYURlZmF1bHRT
dHlsZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotU3RyaW5n
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKK1N0cmlu
ZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKIHsKICAg
ICByZXR1cm4gU3RyaW5nKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9m
KHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCiAjaWYgRU5BQkxFKFZJ
REVPKQotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFNZWRpYUNvbnRyb2xz
U3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKQogewogICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0No
cm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KICNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFu
Y2UoKSk7CisgICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdz
IGZvciB1cy4KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAor
Q29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3IoMHgxZSwgMHg5MCwgMHhm
Zik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIENvbG9yKDB4YzgsIDB4YzgsIDB4YzgpOwogfQogCi1Db2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yOjpi
bGFjazsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7CiB9CiAKLUNvbG9yIFJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3IoMHhmZiwgMHhmZiwg
MHg5Nik7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmNhcmV0QmxpbmtJ
bnRlcnZhbCgpIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0Qmxp
bmtJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgLy8gRGlzYWJsZSB0aGUgYmxpbmtpbmcgY2FyZXQg
aW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMgaXQgaW50cm9kdWNlcwogICAgIC8vIGEgcmFjZSBjb25k
aXRpb24gZm9yIHRoZSBwaXhlbCB0ZXN0cy4gaHR0cDovL2IvMTE5ODQ0MAogICAgIGlmIChDaHJv
bWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAv
LyBXZSBjYWNoZSB0aGUgaW50ZXJ2YWwgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXBlYXRlZGx5IHJl
cXVlc3QgaXQgZnJvbSBndGsuCi0gICAgcmV0dXJuIDAuNTsKKyAgICByZXR1cm4gY2FyZXRCbGlu
a0ludGVydmFsSW50ZXJuYWwoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KGludCBwcm9w
SWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGZsb2F0
IGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwogCkBAIC0xOTksNyArMTk2LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3IKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOworICAgIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udCk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKQEAgLTIwNywxMiAr
MjA0LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Gb250KGludCBw
cm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEl0YWxpYyhmYWxzZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6Om1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2UqIGNv
bnN0IGNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVj
a2JveE9uIikucmVsZWFzZVJlZigpOwogICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2Vk
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hPZmYiKS5y
ZWxlYXNlUmVmKCk7CkBAIC0yMjIsNyArMjE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
IHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRo
ZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQpAQCAtMjM3LDcgKzIz
NCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOwog
fQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIHN0YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT24iKS5yZWxlYXNlUmVmKCk7CiAgICAgc3Rh
dGljIEltYWdlKiBjb25zdCB1bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgibGludXhSYWRpb09mZiIpLnJlbGVhc2VSZWYoKTsKQEAgLTI0Nyw3ICsyNDQsNyBAQCBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAogewogICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94
IGFzIGNoZWNrYm94LgogICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7CkBAIC0zMDIsMTggKzI5
OSwyOCBAQCBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iagogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJp
Z2h0IC0gMiwgYm90dG9tIC0gMiwgcGFpbnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRCdXR0b25M
aWtlKHRoaXMsIG8sIGksIHJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0
RmllbGQobywgaSwgcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
aSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2Vk
IG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUo
KSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTMyMiwxNyArMzI5LDE3IEBAIHZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2Vs
QnV0dG9uU2l6ZSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
IHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAg
ICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1Jl
bmRlckJveChvLT5wYXJlbnQoKSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJl
bmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7Ci0gICAgCisKICAgICAvLyBNYWtlIHN1cmUg
dGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50
J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwg
c3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CiAgICAgYm91
bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CkBAIC0zNDcsMTQgKzM1NCwxNCBAQCBib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBlbXB0eVNpemUoMSwgMTEpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAogewogICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZv
bnQgc2l6ZQogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVs
dENvbnRyb2xGb250UGl4ZWxTaXplOwpAQCAtMzY0LDE2ICszNzEsMTYgQEAgdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShDU1NTdHlsZVMKICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBG
aXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsK
ICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBp
ZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRl
ckJveChvLT5wYXJlbnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJC
b3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBz
Y2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQn
cyBib3gKICAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBz
dGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKICAgICBib3Vu
ZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKQEAgLTM4MSwxMyArMzg4LDEzIEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiBvCiAgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2Fs
bHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNl
bnRlciwgaXQgd2lsbAogICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBv
ZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCiAg
ICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3Vu
ZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwotICAgIAorCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZp
ZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIiku
cmVsZWFzZVJlZigpOwogICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBi
b3VuZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
Ly8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVs
U2l6ZTsKQEAgLTM5OCw3ICs0MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlYwogICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsK
ICAgICBBU1NFUlQoby0+cGFyZW50KCkpOwpAQCAtNDA2LDEwICs0MTMsMTAgQEAgYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghby0+cGFyZW50
KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
CisKICAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVu
dCgpKTsKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVD
b250ZW50Qm94KCk7Ci0gICAgCisKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0
aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0SGVpZ2h0KHN0
ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CiAgICAgYm91bmRz
LnNldFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJv
dW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKQEAgLTQyMyw3ICs0MzAs
NyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkK
K2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFn
ZSkKIHsKICAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGRlZmF1bHRNZWRpYUNv
bnRyb2xPcGFjaXR5KTsKIApAQCAtNDQ5LDcgKzQ1Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKQEAgLTQ2NSw3ICs0NzIs
NyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZQogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwpA
QCAtNDgxLDEzICs0ODgsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50
TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGUKICNlbmRpZgogfQog
Ci12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVt
ZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxp
c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBX
ZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAogewogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8g
YXV0byBvbiBhbGwgYnJvd3NlcnMuCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFNrQ2FudmFzKiBj
b25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAg
ICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKQEAgLTUxMCw1NyAr
NTE3LDcwIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc2VsZWN0b3Is
IHN0eWxlLCBlKTsKIH0KIAogLy8gVXNlZCB0byBwYWludCBzdHlsZWQgbWVudWxpc3RzIChpLmUu
IHdpdGggYSBub24tZGVmYXVsdCBib3JkZXIpCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJl
dHVybiBwYWludE1lbnVMaXN0KG8sIGksIHJlY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlzdEludGVy
bmFsUGFkZGluZyhzdHlsZSwgTGVmdFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdS
aWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50
ZXJuYWxQYWRkaW5nKHN0eWxlLCBSaWdodFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRl
cm5hbFBhZGRpbmcoc3R5bGUsIFRvcFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRvbVBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3QKK2ludCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIDM7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmJ1
dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIHJldHVybiAz
OwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRp
bmdUb3AoKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5h
bFBhZGRpbmdUb3AoKSBjb25zdAogewogICAgIHJldHVybiAxOwogfQogCi1pbnQgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAoraW50
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBj
b25zdAogewogICAgIHJldHVybiAxOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVu
ZGVyVGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpOworfQorCitSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpCit7Cit9CisKK1JlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6flJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpCit7Cit9CisKIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKQEAgLTU4Niw3ICs2
MDYsNyBAQCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4
MzIsIDB4MzIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdElu
dGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QK
K2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBp
bnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRp
bmcuCiAgICAgLy8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCkBAIC01OTcsMTEgKzYxNywxMSBA
QCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFsUGFkZGluZyhS
ZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYQogICAgIC8vIFJlbmRlck1lbnVMaXN0IHRvIGxheSBv
dXQgdGhlIGluZGl2aWR1YWwgaXRlbXMgaW4gdGhlIHBvcHVwLgogICAgIC8vIElmIHRoZSBNZW51
TGlzdCBhY3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9BcHBlYXJhbmNlIiwgdGhlbiB0aGF0IG1l
YW5zCiAgICAgLy8gd2UgZG9uJ3QgZHJhdyBhIGJ1dHRvbiwgc28gZG9uJ3QgcmVzZXJ2ZSBzcGFj
ZSBmb3IgaXQuCi0gICAgY29uc3QgaW50IGJhcl90eXBlID0gc3R5bGUtPmRpcmVjdGlvbigpID09
IExUUiA/IFJpZ2h0UGFkZGluZyA6IExlZnRQYWRkaW5nOwotICAgIGlmIChwYWRkaW5nVHlwZSA9
PSBiYXJfdHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCisgICAg
Y29uc3QgaW50IGJhclR5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRk
aW5nIDogTGVmdFBhZGRpbmc7CisgICAgaWYgKHBhZGRpbmdUeXBlID09IGJhclR5cGUgJiYgc3R5
bGUtPmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICBwYWRkaW5nICs9IFNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKIAogICAg
IHJldHVybiBwYWRkaW5nOwogfQogCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGlu
dXguaAppbmRleCA3ODM4NTA5Li5kYTk3OGNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguaApAQCAtMzIsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCA6IHB1YmxpYyBS
ZW5kZXJUaGVtZSB7CisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgOiBwdWJsaWMg
UmVuZGVyVGhlbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4KCk7Ci0gICAgICAgIH5SZW5kZXJUaGVtZUNocm9taXVtTGludXgoKSB7IH0KKyAgICAgICAg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKTsKKyAgICAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEoKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCk7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVldCgp
OwpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgICAg
ICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2Fy
ZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKIAogICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8g
ZHJhdyB0aGUgZm9jdXMgcmluZy4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNS
aW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZv
cm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKIAorICAgICAgICAvLyBUbyBjaGFu
Z2UgdGhlIGJsaW5rIGludGVydmFsLCBvdmVycmlkZSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5h
bCBpbnN0ZWFkIG9mIHRoaXMgb25lIHNvIHRoYXQgd2UgbWF5IHNoYXJlIGxheW91dCB0ZXN0IGNv
ZGUgYW4gaW50ZXJjZXB0cy4KICAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3Q7CiAKICAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgpAQCAtNzMsOSArNzQsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9
CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMTYsMjEgKzEx
NywzNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbklu
dGVybmFsUGFkZGluZ1RvcCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRl
cm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdDsKIAotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcg
aWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3Vz
IG9yIG5vdC4KLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0
IFJlbmRlck9iamVjdCopIGNvbnN0OwotCiAgICAgICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNr
aW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGRlZmF1bHRH
VUlGb250OworCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6
ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKKyAgICAgICAgLy8gc2l6ZSBmb3Ig
dGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJp
bmspIGZvcgorICAgICAgICAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCisgICAgICAgIHN0YXRpYyBm
bG9hdCBkZWZhdWx0Rm9udFNpemU7CisKKyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlu
a0ludGVydmFsSW50ZXJuYWwoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGludCBt
ZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29u
c3Q7CisgICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOworICAgIH07CisKKyAgICBjbGFzcyBSZW5kZXJU
aGVtZUNocm9taXVtTGludXggOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7CisgICAgICAgIHZp
cnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOworCisgICAgICAgIC8vIEEgbWV0aG9k
IGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBo
YXMgZm9jdXMgb3Igbm90LgorICAgICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGlu
dHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKICAgICAgICAgLy8gTGlzdCBCb3ggc2Vs
ZWN0aW9uIGNvbG9yCiAgICAgICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtZW51TGlzdEludGVybmFs
UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmLCBJbWFnZSopOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="15762"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31007</attachid>
            <date>2009-06-05 12:21:06 -0700</date>
            <delta_ts>2009-06-15 10:45:19 -0700</delta_ts>
            <desc>Fix typo and make defaultGUIFont into function again</desc>
            <filename>factor_out_skia</filename>
            <type>text/plain</type>
            <size>29274</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDE1ZTUxNi4uMDEyZTc1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAwOS0wNi0wNCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBFeHRyYWN0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIG91dCBvZiBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXguICBUaGlzCisgICAgICAgIGlzIG1vc3RseSBhIGNvZGUg
c2h1ZmZsZS4gIFRoZSBub24tc3VmZmxlIGNoYW5nZXMgYXJlOgorICAgICAgICAgICAxKSBDcmVh
dGlvbiBvZiBhIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsLgorICAgICAgICAgICAyKSBNb3Zp
bmcgb2Ygc29tZSBpbmxpbmUgZnVuY3Rpb25zIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGZpbGVz
LgorICAgICAgICAgICAzKSBDaGFuZ2luZyBvZiBkZWZhdWx0R1VJRm9udCBpbnRvIGEgc3RhdGlj
IGNsYXNzIGNvbnN0YW50IGZyb20gYQorICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24uICBB
bHNvIHRoZSB0eXBlIGlzIGNoYW5nZWQgdG8gU3RyaW5nLgorICAgICAgICAgICA0KSBDaGFuZ2lu
ZyBvZiBkZWZhdWx0Rm9udFNpemUgaW50byBhIHN0YXRpYyBjbGFzcyBjb25zdGFudCBmcm9tIGEK
KyAgICAgICAgICAgICAgc3RhdGljIHZhcmlhYmxlIGluIHRoZSBmaWxlIHNjb3BlLgorICAgICAg
ICAgICA1KSBUaGUgc3RhdGljIHN1cHBvcnRzRm9jdXMgZnVuY3Rpb24gd2FzIGNvbGxhcHNlZCBp
bnRvCisgICAgICAgICAgICAgIHN1cHBvcnRzRm9jdXNSaW5nLgorCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzSG92ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzRm9jdXNSaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0RmllbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNo
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9u
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlz
dEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1
dHRvbkludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFs
UGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlz
dEludGVybmFsUGFkZGluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1MaW51eC5oOgorCiAyMDA5LTA2LTAxICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggOTRlZTY0Zi4uN2Ux
OTBiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXgu
Y3BwCkBAIC01MiwxMSArNTIsNiBAQCBlbnVtIFBhZGRpbmdUeXBlIHsKIAogc3RhdGljIGNvbnN0
IGludCBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1s0XSA9IHsgMSwgNCwgMSwgNCB9Owog
Ci0vLyBUaGUgZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBh
cyB0aGUgZGVmYXVsdCBmb250Ci0vLyBzaXplIGZvciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFz
IGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmluaykgZm9yCi0vLyBmb3JtIGNvbnRyb2wg
Zm9udHMuCi1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdEZvbnRTaXplID0gMTYuMDsKLQogLy8g
VGhlIGJhY2tncm91bmQgZm9yIHRoZSBtZWRpYSBwbGF5ZXIgY29udHJvbHMgc2hvdWxkIGJlIGEg
NjAlIG9wYXF1ZSBibGFjayByZWN0YW5nbGUuIFRoaXMKIC8vIG1hdGNoZXMgdGhlIFVJIG1vY2t1
cHMgZm9yIHRoZSBkZWZhdWx0IFVJIHRoZW1lLgogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRN
ZWRpYUNvbnRyb2xPcGFjaXR5ID0gMC42ZjsKQEAgLTcxLDEyICs2Niw2IEBAIHN0YXRpYyBjb25z
dCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7CiBzdGF0aWMg
Y29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKIHN0
YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAx
ODsKIAotc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQot
ewotICAgIC8vIFRoaXMgY2F1c2VzIFdlYktpdCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3Ig
dXMuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKQEAgLTg1LDIwICs3NCw2IEBAIHN0YXRpYyB2
b2lkIHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwogfQogCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8vIC1JRSB1c2VzIGEgZm9udCBi
YXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250cm9s
cy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3RvY2tP
YmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1cm5zIE1TIFNoZWxsIERsZykK
LS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8vIEZJWE1FOiBUaGUgb25seSBj
YXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFOU0kgZW5jb2Rpbmdz
LgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJlbmRlciBpbmNvcnJl
Y3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAxNXB4KS4gU28sIGZvciBub3cg
d2UganVzdCB1c2UgQXJpYWwuCi1zdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdEdVSUZvbnQoKQot
ewotICAgIHJldHVybiAiQXJpYWwiOwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogLy8gQXR0ZW1w
dCB0byByZXRyaWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgTlVM
TCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kLgogc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudFBhcmVudChOb2RlKiBub2RlKQpAQCAtMTEzLDc2ICs4OCwxMDEgQEAgc3RhdGljIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudFBhcmVudChOb2RlKiBub2RlKQogfQogI2VuZGlm
CiAKKy8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgorLy8gLUlFIHVzZXMgYSBmb250IGJhc2Vk
IG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgor
Ly8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVj
dChERUZBVUxUX0dVSV9GT05UKSwKKy8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQorLy8g
LVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCisvLworLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ug
d2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCisv
LyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5
IGF0IGNlcnRhaW4gcGl4ZWwKKy8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBq
dXN0IHVzZSBBcmlhbC4KK2NvbnN0IFN0cmluZyYgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRl
ZmF1bHRHVUlGb250KCkgeworICBzdGF0aWMgU3RyaW5nIGZvbnRGYWNlKCJBcmlhbCIpOworICBy
ZXR1cm4gZm9udEZhY2U7Cit9CisKK2Zsb2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpkZWZh
dWx0Rm9udFNpemUgPSAxNi4wOworCiBSZW5kZXJUaGVtZSogdGhlbWUoKQogewogICAgIHN0YXRp
YyBSZW5kZXJUaGVtZUNocm9taXVtTGludXggdGhlbWU7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0K
IAotUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQor
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkKK3sKK30K
KworUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6On5SZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpCiB7
CiB9CiAKIC8vIFVzZSB0aGUgV2luZG93cyBzdHlsZSBzaGVldHMgdG8gbWF0Y2ggdGhlaXIgbWV0
cmljcy4KLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhRGVmYXVsdFN0eWxl
U2hlZXQoKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCkKIHsKICAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCi1TdHJpbmcgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQorU3RyaW5nIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQogewogICAgIHJl
dHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhl
bWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8p
Ci1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYU1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzQ2hyb21p
dW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFn
ZW50U3R5bGVTaGVldCkpOwogfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgp
KTsKKyAgICAvLyBUaGlzIGNhdXNlcyBXZWJLaXQgdG8gZHJhdyB0aGUgZm9jdXMgcmluZ3MgZm9y
IHVzLgorICAgIHJldHVybiBmYWxzZTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsK
IH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7CiB9CiAKLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3I6OmJsYWNr
OwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAog
ewogICAgIHJldHVybiBDb2xvcigweDMyLCAweDMyLCAweDMyKTsKIH0KIAotQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2
KTsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Y2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0lu
dGVydmFsKCkgY29uc3QKIHsKICAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBs
YXlvdXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCiAgICAgLy8gYSByYWNlIGNvbmRpdGlv
biBmb3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCiAgICAgaWYgKENocm9taXVt
QnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIFdl
IGNhY2hlIHRoZSBpbnRlcnZhbCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcmVxdWVz
dCBpdCBmcm9tIGd0ay4KLSAgICByZXR1cm4gMC41OworICAgIHJldHVybiBjYXJldEJsaW5rSW50
ZXJ2YWxJbnRlcm5hbCgpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3lz
dGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZmxvYXQgZm9u
dFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CiAKQEAgLTIwNywxMiArMjA3LDEyIEBAIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7CiB9
CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6Om1pbmltdW1NZW51TGlzdFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50Q2hlY2tib3goUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50Q2hlY2tib3go
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9uIikucmVsZWFzZVJl
ZigpOwogICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hPZmYiKS5yZWxlYXNlUmVmKCk7CkBAIC0y
MjIsNyArMjIyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHN0YXRp
YyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJsaW51eFJhZGlvT24iKS5yZWxlYXNlUmVmKCk7CiAgICAgc3RhdGljIEltYWdlKiBjb25zdCB1
bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhSYWRpb09m
ZiIpLnJlbGVhc2VSZWYoKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ewogICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFzIGNoZWNrYm94LgogICAg
IHNldENoZWNrYm94U2l6ZShzdHlsZSk7CkBAIC0zMDIsMTggKzMwMiwyOCBAQCBzdGF0aWMgdm9p
ZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iagogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgYm90dG9tIC0g
MiwgcGFpbnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJl
Y3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFy
ZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUK
ICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9s
Rm9udFBpeGVsU2l6ZTsKQEAgLTMyMiwxNyArMzMyLDE3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJv
dW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgp
IHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQo
KSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVD
b250ZW50Qm94KCk7Ci0gICAgCisKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24g
c3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRz
LnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94
LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CiAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5k
cy5oZWlnaHQoKSk7CkBAIC0zNDcsMTQgKzM1NywxNCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBlbXB0
eVNpemUoMSwgMTEpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRo
KCksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdo
dCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNj
YWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQogICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxT
aXplOwpAQCAtMzY0LDE2ICszNzQsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVMKICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5k
cyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgpIHx8
ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7
CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVu
dEJveCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBz
dGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMu
c2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3gu
aGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKICAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRz
LmhlaWdodCgpKTsKQEAgLTM4MSwxMyArMzkxLDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBv
CiAgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91
Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAogICAg
IC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlz
IHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCiAgICAgYm91bmRzLnNldFkocGFy
ZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAv
IDIpOwotICAgIAorCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOwogICAg
IGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRv
biBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTM5OCw3ICs0
MDgsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlYwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICBBU1NFUlQoby0+cGFy
ZW50KCkpOwpAQCAtNDA2LDEwICs0MTYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY28KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgp
LT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJCb3gq
IHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKICAgICBJbnRSZWN0
IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7Ci0gICAg
CisKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0
cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC5o
ZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CiAgICAgYm91bmRzLnNldFdpZHRoKHN0ZDo6bWlu
KHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kcy5oZWlnaHQoKSAqIGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKQEAgLTQyMyw3ICs0MzMsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKIHsKICAgICBjb250ZXh0
LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFjaXR5KTsKIApA
QCAtNDQ5LDcgKzQ1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1l
ZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVO
QUJMRShWSURFTykKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVs
ZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKQEAgLTQ2NSw3ICs0NzUsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZQogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwpAQCAtNDgxLDEzICs0OTEsMTMg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBl
KSBjb25zdAogewogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3Nl
cnMuCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBjb25zdCBpbnQgcmlnaHQg
PSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKQEAgLTUxMCw1NyArNTIwLDcwIEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAogewogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKIH0KIAog
Ly8gVXNlZCB0byBwYWludCBzdHlsZWQgbWVudWxpc3RzIChpLmUuIHdpdGggYSBub24tZGVmYXVs
dCBib3JkZXIpCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludE1lbnVMaXN0
KG8sIGksIHJlY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwg
TGVmdFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxl
LCBSaWdodFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUs
IFRvcFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5
bGUsIEJvdHRvbVBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpi
dXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDM7
CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z1JpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJu
YWxQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIHJldHVybiAzOwogfQogCi1pbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdAoraW50
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25z
dAogewogICAgIHJldHVybiAxOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpi
dXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAogewogICAgIHJldHVy
biAxOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRl
cnZhbEludGVybmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmNhcmV0Qmxp
bmtJbnRlcnZhbCgpOworfQorCitSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OlJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eCgpCit7Cit9CisKK1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6flJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eCgpCit7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKQEAgLTU4Niw3ICs2MDksNyBAQCBDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOwogfQogCi1p
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBp
bnQgcGFkZGluZ1R5cGUpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBpbnRlcm5hbCBwYWRkaW5nIGlz
IGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCiAgICAgLy8gTWF0Y2hl
cyB0aGUgRkYgYmVoYXZpb3IuCkBAIC01OTcsMTEgKzYyMCwxMSBAQCBpbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUs
IGludCBwYQogICAgIC8vIFJlbmRlck1lbnVMaXN0IHRvIGxheSBvdXQgdGhlIGluZGl2aWR1YWwg
aXRlbXMgaW4gdGhlIHBvcHVwLgogICAgIC8vIElmIHRoZSBNZW51TGlzdCBhY3R1YWxseSBoYXMg
YXBwZWFyYW5jZSAiTm9BcHBlYXJhbmNlIiwgdGhlbiB0aGF0IG1lYW5zCiAgICAgLy8gd2UgZG9u
J3QgZHJhdyBhIGJ1dHRvbiwgc28gZG9uJ3QgcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuCi0gICAgY29u
c3QgaW50IGJhcl90eXBlID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IFJpZ2h0UGFkZGlu
ZyA6IExlZnRQYWRkaW5nOwotICAgIGlmIChwYWRkaW5nVHlwZSA9PSBiYXJfdHlwZSAmJiBzdHls
ZS0+YXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCisgICAgY29uc3QgaW50IGJhclR5cGUg
PSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7
CisgICAgaWYgKHBhZGRpbmdUeXBlID09IGJhclR5cGUgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAh
PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICBwYWRkaW5nICs9IFNjcm9sbGJhclRoZW1lOjpuYXRp
dmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKIAogICAgIHJldHVybiBwYWRkaW5nOwog
fQogCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAppbmRleCA3ODM4NTA5
Li43NTBlMjBmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGlu
dXguaApAQCAtMzIsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CisgICAg
Y2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7Ci0gICAgICAgIH5S
ZW5kZXJUaGVtZUNocm9taXVtTGludXgoKSB7IH0KKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEoKTsKKyAgICAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKTsKIAog
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CiAgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwpAQCAtNDQsNyArNDQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgICAgICAvLyBBIG1ldGhvZCBhc2tp
bmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcg
d2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAgICAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmlu
Zy4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxp
Z2h0Q29sb3IoKSBjb25zdDsKIAorICAgICAgICAvLyBUbyBjaGFuZ2UgdGhlIGJsaW5rIGludGVy
dmFsLCBvdmVycmlkZSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCBpbnN0ZWFkIG9mIHRoaXMg
b25lIHNvIHRoYXQgd2UgbWF5IHNoYXJlIGxheW91dCB0ZXN0IGNvZGUgYW4gaW50ZXJjZXB0cy4K
ICAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CiAKICAg
ICAgICAgLy8gU3lzdGVtIGZvbnRzLgpAQCAtNzMsOSArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVh
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMTYsMjEgKzExNywzNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFkZGluZ1RvcCgp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20o
KSBjb25zdDsKIAotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hh
bmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICAgICAg
dmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwotCiAgICAgICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9s
IHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0R1VJRm9udCgpOworCisgICAg
ICAgIC8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlz
IGFzIHRoZSBkZWZhdWx0IGZvbnQKKyAgICAgICAgLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9u
dCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgorICAgICAg
ICAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCisgICAgICAgIHN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9u
dFNpemU7CisKKyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJu
YWwoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGludCBtZW51TGlzdEludGVybmFs
UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7CisgICAgICAgIGJv
b2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmLCBJbWFnZSopOworICAgIH07CisKKyAgICBjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXggOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7CisgICAgICAgIHZpcnR1YWwgflJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eCgpOworCisgICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
Y29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90
LgorICAgICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7CisKICAgICAgICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNvbG9yCiAg
ICAgICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIGludCBtZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJT
dHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7Ci0gICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1
dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="15780"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31015</attachid>
            <date>2009-06-05 15:40:24 -0700</date>
            <delta_ts>2009-06-15 14:50:55 -0700</delta_ts>
            <desc>Move RenderThemeChromiumSkia into its own file.</desc>
            <filename>skai_move.patch</filename>
            <type>text/plain</type>
            <size>61963</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTQ3ZjhjNi4uZjRmNDJhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAwOS0wNi0wNSAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBNb3ZpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgaW50byBpdCdz
IG93biBmaWxlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51
eC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2l6ZUlmQXV0byk6CisgICAgICAg
IChXZWJDb3JlOjptZWRpYUVsZW1lbnRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRHVUlGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzSG92ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzRm9jdXNSaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uTGlrZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhUGxheUJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11
dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVm
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRl
cm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25J
bnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZh
bEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpt
ZW51TGlzdEludGVybmFsUGFkZGluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c3VwcG9ydHNDb250cm9sVGludHMpOgorCiAyMDA5LTA2LTA0ICBQYXVsIEdvZGF2YXJpICA8
cGF1bEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA3
ZTE5MGJmLi4yM2I3ZWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKQEAgLTI0LDU1OCArMjQsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtTGludXguaCIKIAotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJv
bEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRl
ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSAiU2tTaGFkZXIuaCIKLSNpbmNs
dWRlICJTa0dyYWRpZW50U2hhZGVyLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1lbnVtIFBhZGRpbmdUeXBlIHsKLSAgICBUb3BQYWRkaW5nLAotICAgIFJp
Z2h0UGFkZGluZywKLSAgICBCb3R0b21QYWRkaW5nLAotICAgIExlZnRQYWRkaW5nCi19OwotCi1z
dGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0
LCAxLCA0IH07Ci0KLS8vIFRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgbWVkaWEgcGxheWVyIGNvbnRy
b2xzIHNob3VsZCBiZSBhIDYwJSBvcGFxdWUgYmxhY2sgcmVjdGFuZ2xlLiBUaGlzCi0vLyBtYXRj
aGVzIHRoZSBVSSBtb2NrdXBzIGZvciB0aGUgZGVmYXVsdCBVSSB0aGVtZS4KLXN0YXRpYyBjb25z
dCBmbG9hdCBkZWZhdWx0TWVkaWFDb250cm9sT3BhY2l0eSA9IDAuNmY7Ci0KLS8vIFRoZXNlIHZh
bHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi4KLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29u
dHJvbEZvbnRQaXhlbFNpemUgPSAxMzsKLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q2FuY2Vs
QnV0dG9uU2l6ZSA9IDk7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluQ2FuY2VsQnV0dG9uU2l6ZSA9
IDU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4Q2FuY2VsQnV0dG9uU2l6ZSA9IDIxOwotc3RhdGlj
IGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDEz
Owotc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXpl
ID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSA9IDMwOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25XaWR0aCA9IDE4OwotCi1zdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCksIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0K
LQotI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFF
bGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5VTEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4K
LXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkK
LXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIE5vZGUqIG1lZGlhTm9k
ZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICgh
bWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLX0K
LSNlbmRpZgotCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8vIC1JRSB1c2VzIGEgZm9u
dCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250
cm9scy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3Rv
Y2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1cm5zIE1TIFNoZWxsIERs
ZykKLS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFOU0kgZW5jb2Rp
bmdzLgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJlbmRlciBpbmNv
cnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAxNXB4KS4gU28sIGZvciBu
b3cgd2UganVzdCB1c2UgQXJpYWwuCi1jb25zdCBTdHJpbmcmIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpkZWZhdWx0R1VJRm9udCgpIHsKLSAgc3RhdGljIFN0cmluZyBmb250RmFjZSgiQXJpYWwi
KTsKLSAgcmV0dXJuIGZvbnRGYWNlOwotfQotCi1mbG9hdCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6ZGVmYXVsdEZvbnRTaXplID0gMTYuMDsKLQogUmVuZGVyVGhlbWUqIHRoZW1lKCkKIHsKICAg
ICBzdGF0aWMgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IHRoZW1lOwogICAgIHJldHVybiAmdGhl
bWU7CiB9CiAKLVJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YSgpCi17Ci19Ci0KLVJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjp+UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEoKQotewotfQotCi0vLyBVc2UgdGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNo
IHRoZWlyIG1ldHJpY3MuCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhRGVm
YXVsdFN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5Vc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLVN0
cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpOwotfQotCi0jaWYgRU5BQkxF
KFZJREVPKQotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYU1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNDaHJvbWl1
bVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdl
bnRTdHlsZVNoZWV0KSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0Zv
Y3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBj
YXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1cy4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKDB4
MWUsIDB4OTAsIDB4ZmYpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENvbG9yKDB4YzgsIDB4YzgsIDB4YzgpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAot
ewotICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7Ci19Ci0KLUNvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOwotfQotCi1kb3VibGUg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0Ci17Ci0g
ICAgLy8gRGlzYWJsZSB0aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMg
aXQgaW50cm9kdWNlcwotICAgIC8vIGEgcmFjZSBjb25kaXRpb24gZm9yIHRoZSBwaXhlbCB0ZXN0
cy4gaHR0cDovL2IvMTE5ODQ0MAotICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2FyZXRCbGlua0ludGVydmFs
SW50ZXJuYWwoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3lzdGVtRm9u
dChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsK
LSAgICBmbG9hdCBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKLQotICAgIHN3aXRjaCAocHJv
cElkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6
Ci0gICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyBCZWNhdXNlIHRoYXQncyB3aGF0IEdl
Y2tvIGRvZXMuIE5vdGUgdGhhdCB3ZQotICAgICAgICAvLyBhcmUgYXNzdW1pbmcgYSA5NmRwaSBz
Y3JlZW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHRoYXQgd2UgdXNlIG9uCi0gICAgICAgIC8vIFdp
bmRvd3MuCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwaXhlbHNQZXJJbmNoID0gOTYuMGY7Ci0gICAg
ICAgIGZvbnRTaXplIC09ICgyLjBmIC8gcG9pbnRzUGVySW5jaCkgKiBwaXhlbHNQZXJJbmNoOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHko
KS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoZm9udFNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVz
Y3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRX
ZWlnaHROb3JtYWwpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOwotfQot
Ci1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgc3Rh
dGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoImxpbnV4Q2hlY2tib3hPbiIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNv
bnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eENo
ZWNrYm94T2ZmIikucmVsZWFzZVJlZigpOwotCi0gICAgSW1hZ2UqIGltYWdlID0gdGhpcy0+aXND
aGVja2VkKG8pID8gY2hlY2tlZEltYWdlIDogdW5jaGVja2VkSW1hZ2U7Ci0gICAgaS5jb250ZXh0
LT5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVj
aWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlz
IHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkKLSAgICAvLyBmb3Igbm93LiAgSXQg
bWF0Y2hlcyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLAot
ICAgIC8vIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFj
Y291bnRzIGZvciB0aGUgaGlnaGVyCi0gICAgLy8gRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdp
bmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UKLSAgICAvLyBjYW4ndCBy
ZWx5IG9uIHRoZSB0aGVtZSdzIG1ldHJpY3MuCi0gICAgY29uc3QgSW50U2l6ZSBzaXplKDEzLCAx
Myk7Ci0gICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBzdGF0aWMg
SW1hZ2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bGludXhSYWRpb09uIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5j
aGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9PZmYi
KS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBJbWFnZSogaW1hZ2UgPSB0aGlzLT5pc0NoZWNrZWQobykg
PyBjaGVja2VkSW1hZ2UgOiB1bmNoZWNrZWRJbWFnZTsKLSAgICBpLmNvbnRleHQtPmRyYXdJbWFn
ZShpbWFnZSwgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewot
ICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFzIGNoZWNrYm94LgotICAgIHNl
dENoZWNrYm94U2l6ZShzdHlsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShS
ZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIHsKLSAgICBTa0NhbnZhcyogY29uc3Qg
Y2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgU2tQ
YWludCBwYWludDsKLSAgICBTa1JlY3Qgc2tyZWN0OwotICAgIGNvbnN0IGludCByaWdodCA9IHJl
Y3QueCgpICsgcmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBib3R0b20gPSByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAvLyBJZiB0aGUgYnV0dG9uIGlzIHRvbyBzbWFsbCwgZmFs
bGJhY2sgdG8gZHJhd2luZyBhIHNpbmdsZSwgc29saWQgY29sb3IKLSAgICBpZiAocmVjdC53aWR0
aCgpIDwgNSB8fCByZWN0LmhlaWdodCgpIDwgNSkgewotICAgICAgICBwYWludC5zZXRBUkdCKDB4
ZmYsIDB4ZTksIDB4ZTksIDB4ZTkpOwotICAgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0
LnkoKSwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBw
YWludCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnQgYm9yZGVyQWxw
aGEgPSB0aGVtZS0+aXNIb3ZlcmVkKG8pID8gMHg4MCA6IDB4NTU7Ci0gICAgcGFpbnQuc2V0QVJH
Qihib3JkZXJBbHBoYSwgMCwgMCwgMCk7Ci0gICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSAr
IDEsIHJlY3QueSgpLCByaWdodCAtIDEsIHJlY3QueSgpLCBwYWludCk7Ci0gICAgY2FudmFzLT5k
cmF3TGluZShyaWdodCAtIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxLCBw
YWludCk7Ci0gICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSArIDEsIGJvdHRvbSAtIDEsIHJp
Z2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQpOwotICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54
KCksIHJlY3QueSgpICsgMSwgcmVjdC54KCksIGJvdHRvbSAtIDEsIHBhaW50KTsKLQotICAgIHBh
aW50LnNldEFSR0IoMHhmZiwgMCwgMCwgMCk7Ci0gICAgU2tQb2ludCBwWzJdOwotICAgIGNvbnN0
IGludCBsaWdodEVuZCA9IHRoZW1lLT5pc1ByZXNzZWQobykgPyAxIDogMDsKLSAgICBjb25zdCBp
bnQgZGFya0VuZCA9ICFsaWdodEVuZDsKLSAgICBwW2xpZ2h0RW5kXS5zZXQoU2tJbnRUb1NjYWxh
cihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIocmVjdC55KCkpKTsKLSAgICBwW2RhcmtFbmRdLnNl
dChTa0ludFRvU2NhbGFyKHJlY3QueCgpKSwgU2tJbnRUb1NjYWxhcihib3R0b20gLSAxKSk7Ci0g
ICAgU2tDb2xvciBjb2xvcnNbMl07Ci0gICAgY29sb3JzWzBdID0gU2tDb2xvclNldEFSR0IoMHhm
ZiwgMHhmOCwgMHhmOCwgMHhmOCk7Ci0gICAgY29sb3JzWzFdID0gU2tDb2xvclNldEFSR0IoMHhm
ZiwgMHhkZCwgMHhkZCwgMHhkZCk7Ci0KLSAgICBTa1NoYWRlciogcyA9IFNrR3JhZGllbnRTaGFk
ZXI6OkNyZWF0ZUxpbmVhcigKLSAgICAgICAgcCwgY29sb3JzLCBOVUxMLCAyLCBTa1NoYWRlcjo6
a0NsYW1wX1RpbGVNb2RlLCBOVUxMKTsKLSAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmls
bF9TdHlsZSk7Ci0gICAgcGFpbnQuc2V0U2hhZGVyKHMpOwotICAgIHMtPnVucmVmKCk7Ci0KLSAg
ICBza3JlY3Quc2V0KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCByaWdodCAtIDEsIGJvdHRv
bSAtIDEpOwotICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7Ci0KLSAgICBwYWlu
dC5zZXRTaGFkZXIoTlVMTCk7Ci0gICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGNlLCAweGNlLCAw
eGNlKTsKLSAgICBjYW52YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwg
cGFpbnQpOwotICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgcmVjdC55KCkgKyAxLCBw
YWludCk7Ci0gICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCBib3R0b20gLSAyLCBw
YWludCk7Ci0gICAgY2FudmFzLT5kcmF3UG9pbnQocmlnaHQgLSAyLCBib3R0b20gLSAyLCBwYWlu
dCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJlY3QpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBw
YWludFRleHRGaWVsZChvLCBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUg
YnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwotICAgIGlu
dCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxC
dXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNl
bEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNp
emUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6
ZSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIEludFJlY3QgYm91bmRzID0g
cjsKLSAgICBBU1NFUlQoby0+cGFyZW50KCkpOwotICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8t
PnBhcmVudCgpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJC
b3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKLQotICAgIElu
dFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsK
LQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdp
bGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWlu
KHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5o
ZWlnaHQoKSkpKTsKLSAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKLQotICAg
IC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlm
IGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8vIGJlIG9u
ZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRv
IGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgYm91bmRzLnNldFkocGFyZW50Qm94Lnko
KSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwotCi0g
ICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogY2FuY2Vs
UHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxQ
cmVzc2VkIikucmVsZWFzZVJlZigpOwotICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3Nl
ZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNlbEltYWdlLCBib3VuZHMpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2Vh
cmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBlbXB0eVNpemUoMSwgMTEpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gU2NhbGUgdGhlIGRlY29yYXRpb24gc2l6ZSBiYXNl
ZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXpl
KCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0gICAgaW50IG1hZ25pZmllclNpemUg
PSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2Nh
bGUpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KG1hZ25pZmllclNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFn
bmlmaWVyU2l6ZSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgSW50
UmVjdCBib3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5w
YXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50
KCkpOwotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNv
bnRlbnRCb3goKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3Rh
eXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Ci0gICAgYm91bmRzLnNl
dEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94Lmhl
aWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBDZW50ZXIgdGhlIGRlY29yYXRpb24gdmVydGljYWxseS4gIFJv
dW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBp
dCB3aWxsCi0gICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBm
aWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBib3Vu
ZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWln
aHQoKSArIDEpIC8gMik7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hNYWduaWZpZXIiKS5yZWxlYXNlUmVmKCk7
Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIGJvdW5kcyk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNp
emUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5m
b250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBtYWduaWZp
ZXJIZWlnaHQgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUg
KiBmb250U2NhbGUpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIGludCBtYWduaWZp
ZXJXaWR0aCA9IGxyb3VuZGYobWFnbmlmaWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXpl
KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJU
KG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goby0+cGFyZW50KCkpOwotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVu
ZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2Nh
bGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAotICAgIGJvdW5kcy5z
ZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKTsK
LSAgICBib3VuZHMuc2V0V2lkdGgoc3RkOjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0YXRpY19j
YXN0PGludD4oYm91bmRzLmhlaWdodCgpICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSkpOwotCi0g
ICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28g
aWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8gYmUg
b25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMg
dG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gu
eSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7Ci0K
LSAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJzZWFyY2hNYWduaWZpZXJSZXN1bHRzIikucmVsZWFzZVJlZigpOwotICAgIGkuY29u
dGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRvbklu
dGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1h
Z2UqIGltYWdlKQotewotICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZGVmYXVs
dE1lZGlhQ29udHJvbE9wYWNpdHkpOwotCi0gICAgLy8gRHJhdyBiYWNrZ3JvdW5kLgotICAgIENv
bG9yIG9sZEZpbGwgPSBjb250ZXh0LT5maWxsQ29sb3IoKTsKLSAgICBDb2xvciBvbGRTdHJva2Ug
PSBjb250ZXh0LT5zdHJva2VDb2xvcigpOwotCi0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsK
LSAgICBjb250ZXh0LT5kcmF3UmVjdChyZWN0KTsKLQotICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihvbGRGaWxsKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvbGRTdHJva2UpOwotCi0g
ICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBp
cyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRv
d24uCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOwotICAgIGltYWdlUmVj
dC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAv
IDIpOwotICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdl
LT53aWR0aCgpICsgMSkgLyAyKTsKLQotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1h
Z2VSZWN0LCBDb21wb3NpdGVTb3VyY2VBdG9wKTsKLSAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5IikucmVsZWFzZVJlZigpOwotICAg
IHN0YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bWVkaWFQYXVzZSIpLnJlbGVhc2VSZWYoKTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9u
SW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkg
PyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFNdXRlQnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUo
KSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHN0YXRpYyBJbWFnZSogc291bmRGdWxsID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJt
ZWRpYVNvdW5kRnVsbCIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9u
ZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNl
UmVmKCk7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5j
b250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5kRnVs
bCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Ci17
Ci0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvIG9uIGFsbCBicm93c2Vycy4KLSAgICBz
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyBy
ZWN0LndpZHRoKCk7Ci0gICAgY29uc3QgaW50IG1pZGRsZSA9IHJlY3QueSgpICsgcmVjdC5oZWln
aHQoKSAvIDI7Ci0KLSAgICBwYWludEJ1dHRvbkxpa2UodGhpcywgbywgaSwgcmVjdCk7Ci0KLSAg
ICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMCwgMCwgMCk7Ci0gICAg
cGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtG
aWxsX1N0eWxlKTsKLQotICAgIFNrUGF0aCBwYXRoOwotICAgIHBhdGgubW92ZVRvKHJpZ2h0IC0g
MTMsIG1pZGRsZSAtIDMpOwotICAgIHBhdGguckxpbmVUbyg2LCAwKTsKLSAgICBwYXRoLnJMaW5l
VG8oLTMsIDYpOwotICAgIHBhdGguY2xvc2UoKTsKLSAgICBjYW52YXMtPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVz
dE1lbnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKLX0KLQotLy8gVXNlZCB0byBwYWlu
dCBzdHlsZWQgbWVudWxpc3RzIChpLmUuIHdpdGggYSBub24tZGVmYXVsdCBib3JkZXIpCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3QobywgaSwgcmVjdCk7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmco
c3R5bGUsIExlZnRQYWRkaW5nKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIFJpZ2h0UGFkZGluZyk7Ci19
Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFs
UGFkZGluZyhzdHlsZSwgVG9wUGFkZGluZyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgQm90dG9tUGFk
ZGluZyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQ
YWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDM7Ci19Ci0KLWludCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nUmlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiAzOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVy
bmFsUGFkZGluZ1RvcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gMTsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJl
dEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpjYXJldEJsaW5rSW50ZXJ2YWwoKTsKLX0KLQogUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpS
ZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQogewogfQpAQCAtNjA5LDIyICs2Nyw0IEBAIENvbG9y
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7CiB9
CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmco
UmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhp
cyBpbnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBh
ZGRpbmcuCi0gICAgLy8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCi0gICAgaW50IHBhZGRpbmcg
PSBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1twYWRkaW5nVHlwZV07Ci0KLSAgICAvLyBS
ZXNlcnZlIHRoZSBzcGFjZSBmb3IgcmlnaHQgYXJyb3cgaGVyZS4gVGhlIHJlc3Qgb2YgdGhlIHBh
ZGRpbmcgaXMKLSAgICAvLyBzZXQgYnkgYWRqdXN0TWVudUxpc3RTdHlsZSwgc2luY2UgUG9wTWVu
dVdpbi5jcHAgdXNlcyB0aGUgcGFkZGluZyBmcm9tCi0gICAgLy8gUmVuZGVyTWVudUxpc3QgdG8g
bGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAuCi0gICAgLy8gSWYgdGhl
IE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBlYXJhbmNlICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRo
YXQgbWVhbnMKLSAgICAvLyB3ZSBkb24ndCBkcmF3IGEgYnV0dG9uLCBzbyBkb24ndCByZXNlcnZl
IHNwYWNlIGZvciBpdC4KLSAgICBjb25zdCBpbnQgYmFyVHlwZSA9IHN0eWxlLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBMZWZ0UGFkZGluZzsKLSAgICBpZiAocGFkZGluZ1R5
cGUgPT0gYmFyVHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCi0g
ICAgICAgIHBhZGRpbmcgKz0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJh
clRoaWNrbmVzcygpOwotCi0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1MaW51eC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgK
aW5kZXggNzUwZTIwZi4uOGNjYWY5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4LmgKQEAgLTI4LDExMyArMjgsMTAgQEAKICNpZm5kZWYgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4X2gKICNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4X2gKIAot
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWEoKTsKLSAgICAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNo
ZWV0KCk7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwot
I2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4g
aG92ZXJlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdDsKLQotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1l
IGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgLy8g
VGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwotCi0gICAgICAgIC8vIFRv
IGNoYW5nZSB0aGUgYmxpbmsgaW50ZXJ2YWwsIG92ZXJyaWRlIGNhcmV0QmxpbmtJbnRlcnZhbElu
dGVybmFsIGluc3RlYWQgb2YgdGhpcyBvbmUgc28gdGhhdCB3ZSBtYXkgc2hhcmUgbGF5b3V0IHRl
c3QgY29kZSBhbiBpbnRlcmNlcHRzLgotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5r
SW50ZXJ2YWwoKSBjb25zdDsKLQotICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
OwotCi0gICAgICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIC8vIE1lbnVMaXN0IHJl
ZmVycyB0byBhbiB1bnN0eWxlZCBtZW51bGlzdCAobWVhbmluZyBhIG1lbnVsaXN0IHdpdGhvdXQK
LSAgICAgICAgLy8gYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RC
dXR0b24gcmVmZXJzIHRvIGEgc3R5bGVkCi0gICAgICAgIC8vIG1lbnVsaXN0IChhIG1lbnVsaXN0
IHdpdGggYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KS4gVGhleSBoYXZlCi0gICAgICAg
IC8vIHRoaXMgZGlzdGluY3Rpb24gdG8gc3VwcG9ydCBzaG93aW5nIGFxdWEgc3R5bGUgdGhlbWVz
IHdoZW5ldmVyIHRoZXkKLSAgICAgICAgLy8gcG9zc2libHkgY2FuLCB3aGljaCBpcyBzb21ldGhp
bmcgd2UgZG9uJ3Qgd2FudCB0byByZXBsaWNhdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElu
IHNob3J0LCB3ZSBlaXRoZXIgZ28gZG93biB0aGUgTWVudUxpc3QgY29kZSBwYXRoIG9yIHRoZSBN
ZW51TGlzdEJ1dHRvbgotICAgICAgICAvLyBjb2RlcGF0aC4gV2UgbmV2ZXIgZ28gZG93biBib3Ro
LiBBbmQgaW4gYm90aCBjYXNlcywgdGhleSByZW5kZXIgdGhlCi0gICAgICAgIC8vIGVudGlyZSBt
ZW51bGlzdC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRlZmluZSB0aGUgcGFkZGluZyBmb3Ig
dGhlIE1lbnVMaXN0J3MgaW5uZXIgYmxvY2suCi0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5n
TGVmdCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdS
aWdodCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdU
b3AoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90
dG9tKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55
IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRHVUlGb250KCk7
Ci0KLSAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiAgV2Ug
dXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAotICAgICAgICAvLyBzaXplIGZvciB0aGUgInN5
c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmluaykgZm9y
Ci0gICAgICAgIC8vIGZvcm0gY29udHJvbCBmb250cy4KLSAgICAgICAgc3RhdGljIGZsb2F0IGRl
ZmF1bHRGb250U2l6ZTsKLQotICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2
YWxJbnRlcm5hbCgpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1lbnVMaXN0
SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYsIEltYWdlKik7Ci0gICAgfTsKLQogICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eCA6IHB1YmxpYyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSB7CiAgICAgcHVibGlj
OgogICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKTsKQEAgLTE1Miw0ICs0OSw0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9taXVtTGludXhfaApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCmluZGV4IGJmMjE3YzguLmIzMDYxMDkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKQEAgLTEs
MiArMSw1OTEgQEAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgc29t
ZSBpc3N1ZXMgd2l0aCB3ZWJraXQuZ3lwIGluIHRoZSBjaHJvbWl1bSB0cmVlLiBIYXZpbmcgdGhp
cyBwbGFjZWhvbGRlciB1bnRpbCB3ZSBjYW4gZmFjdG9yIG91dAotLy8gUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTGludXggd2lsbCBrZWVwIHRoZSBIRUFE
IG9mIGJvdGggdHJlZXMgY29tcGF0aWJsZS4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBHb29nbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVXNlckFnZW50
U3R5bGVTaGVldHMuaCIKKworI2luY2x1ZGUgIlNrU2hhZGVyLmgiCisjaW5jbHVkZSAiU2tHcmFk
aWVudFNoYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gUGFkZGluZ1R5cGUg
eworICAgIFRvcFBhZGRpbmcsCisgICAgUmlnaHRQYWRkaW5nLAorICAgIEJvdHRvbVBhZGRpbmcs
CisgICAgTGVmdFBhZGRpbmcKK307CisKK3N0YXRpYyBjb25zdCBpbnQgc3R5bGVkTWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmdbNF0gPSB7IDEsIDQsIDEsIDQgfTsKKworLy8gVGhlIGJhY2tncm91bmQg
Zm9yIHRoZSBtZWRpYSBwbGF5ZXIgY29udHJvbHMgc2hvdWxkIGJlIGEgNjAlIG9wYXF1ZSBibGFj
ayByZWN0YW5nbGUuIFRoaXMKKy8vIG1hdGNoZXMgdGhlIFVJIG1vY2t1cHMgZm9yIHRoZSBkZWZh
dWx0IFVJIHRoZW1lLgorc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFj
aXR5ID0gMC42ZjsKKworLy8gVGhlc2UgdmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luLgorc3Rh
dGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOworc3RhdGlj
IGNvbnN0IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsKK3N0YXRpYyBjb25zdCBm
bG9hdCBtaW5DYW5jZWxCdXR0b25TaXplID0gNTsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5j
ZWxCdXR0b25TaXplID0gMjE7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CitzdGF0aWMgY29uc3QgZmxvYXQg
ZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CisKK3N0YXRpYyB2b2lk
IHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
aXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorLy8gQXR0ZW1w
dCB0byByZXRyaWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgTlVM
TCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kLgorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudFBhcmVudChOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFn
KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihtZWRpYU5vZGUpOworfQorI2VuZGlmCisKKy8vIFdlIGFpbSB0byBtYXRjaCBJ
RSBoZXJlLgorLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUg
ZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgorLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwg
RGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKKy8v
IHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQorLy8gLVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFu
ZGUuCisvLworLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBkb24ndCBt
YXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCisvLyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0
aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwKKy8vIHNp
emVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KK2NvbnN0IFN0
cmluZyYgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRHVUlGb250KCkgeworICBzdGF0
aWMgU3RyaW5nIGZvbnRGYWNlKCJBcmlhbCIpOworICByZXR1cm4gZm9udEZhY2U7Cit9CisKK2Zs
b2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpkZWZhdWx0Rm9udFNpemUgPSAxNi4wOworCitS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQoreworfQor
CitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkKK3sK
K30KKworLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRy
aWNzLgorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNo
ZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOworfQorCitTdHJpbmcgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCit7CisgICAgcmV0dXJu
IFN0cmluZyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdp
blF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK1N0
cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVl
dCkpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRz
SG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMgY2F1c2VzIFdlYktp
dCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigweDFlLCAweDkwLCAw
eGZmKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigw
eGM4LCAweGM4LCAweGM4KTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsKK30KKworZG91YmxlIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAoreworICAgIC8vIERpc2Fi
bGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0IGludHJvZHVj
ZXMKKyAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMuIGh0dHA6Ly9i
LzExOTg0NDAKKyAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJ
ZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgZmxvYXQg
Zm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0
U21hbGxDb250cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAv
LyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBO
b3RlIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGlj
aCBpcyB0aGUgZGVmYXVsdCB0aGF0IHdlIHVzZSBvbgorICAgICAgICAvLyBXaW5kb3dzLgorICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgICAgICBmb250U2l6
ZSAtPSAoMi4wZiAvIHBvaW50c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5
KGRlZmF1bHRHVUlGb250KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFs
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKK30KKworaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSog
Y29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eENo
ZWNrYm94T24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjb25zdCB1bmNoZWNr
ZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9mZiIp
LnJlbGVhc2VSZWYoKTsKKworICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tlZChvKSA/
IGNoZWNrZWRJbWFnZSA6IHVuY2hlY2tlZEltYWdlOworICAgIGkuY29udGV4dC0+ZHJhd0ltYWdl
KGltYWdlLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhp
cyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5CisgICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmly
ZWZveC4gIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywKKyAgICAvLyBxdWVy
eWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3Ig
dGhlIGhpZ2hlcgorICAgIC8vIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBh
IERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlCisgICAgLy8gY2FuJ3QgcmVseSBvbiB0aGUg
dGhlbWUncyBtZXRyaWNzLgorICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOworICAgIHNl
dFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdlKiBjb25z
dCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9P
biIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tlZEltYWdl
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVsZWFzZVJl
ZigpOworCisgICAgSW1hZ2UqIGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hlY2tlZElt
YWdlIDogdW5jaGVja2VkSW1hZ2U7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHJl
Y3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBVc2Ug
c2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KKyAgICBzZXRDaGVja2JveFNp
emUoc3R5bGUpOworfQorCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUq
IHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KSB7CisgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGku
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFNrUGFpbnQgcGFpbnQ7
CisgICAgU2tSZWN0IHNrcmVjdDsKKyAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJl
Y3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpOworCisgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRy
YXdpbmcgYSBzaW5nbGUsIHNvbGlkIGNvbG9yCisgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwg
cmVjdC5oZWlnaHQoKSA8IDUpIHsKKyAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGU5LCAw
eGU5LCAweGU5KTsKKyAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0
LCBib3R0b20pOworICAgICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgaW50IGJvcmRlckFscGhhID0gdGhlbWUt
PmlzSG92ZXJlZChvKSA/IDB4ODAgOiAweDU1OworICAgIHBhaW50LnNldEFSR0IoYm9yZGVyQWxw
aGEsIDAsIDAsIDApOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCByZWN0Lnko
KSwgcmlnaHQgLSAxLCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmln
aHQgLSAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQpOworICAg
IGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdodCAtIDEsIGJv
dHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0Lnko
KSArIDEsIHJlY3QueCgpLCBib3R0b20gLSAxLCBwYWludCk7CisKKyAgICBwYWludC5zZXRBUkdC
KDB4ZmYsIDAsIDAsIDApOworICAgIFNrUG9pbnQgcFsyXTsKKyAgICBjb25zdCBpbnQgbGlnaHRF
bmQgPSB0aGVtZS0+aXNQcmVzc2VkKG8pID8gMSA6IDA7CisgICAgY29uc3QgaW50IGRhcmtFbmQg
PSAhbGlnaHRFbmQ7CisgICAgcFtsaWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkp
LCBTa0ludFRvU2NhbGFyKHJlY3QueSgpKSk7CisgICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1Nj
YWxhcihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIoYm90dG9tIC0gMSkpOworICAgIFNrQ29sb3Ig
Y29sb3JzWzJdOworICAgIGNvbG9yc1swXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZjgsIDB4
ZjgsIDB4ZjgpOworICAgIGNvbG9yc1sxXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4
ZGQsIDB4ZGQpOworCisgICAgU2tTaGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVM
aW5lYXIoCisgICAgICAgIHAsIGNvbG9ycywgTlVMTCwgMiwgU2tTaGFkZXI6OmtDbGFtcF9UaWxl
TW9kZSwgTlVMTCk7CisgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwor
ICAgIHBhaW50LnNldFNoYWRlcihzKTsKKyAgICBzLT51bnJlZigpOworCisgICAgc2tyZWN0LnNl
dChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKKyAg
ICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0U2hhZGVy
KE5VTEwpOworICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhjZSwgMHhjZSwgMHhjZSk7CisgICAg
Y2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHBhaW50KTsKKyAg
ICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIHJlY3QueSgpICsgMSwgcGFpbnQpOworICAg
IGNhbnZhcy0+ZHJhd1BvaW50KHJlY3QueCgpICsgMSwgYm90dG9tIC0gMiwgcGFpbnQpOworICAg
IGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgYm90dG9tIC0gMiwgcGFpbnQpOworfQorCiti
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFp
bnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXpl
IGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9u
dFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgY2FuY2VsQnV0
dG9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwg
ZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXpl
KSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkp
OworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNT
RVJUKG8tPnBhcmVudCgpKTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+
aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyQm94KiBwYXJlbnRS
ZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IHBhcmVu
dEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBN
YWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBp
dHMgcGFyZW50J3MgYm94CisgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gu
d2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7
CisgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAvLyBDZW50ZXIg
dGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8g
YmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xv
c2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRl
ciB3aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50
Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKworICAgIHN0YXRpYyBJ
bWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENh
bmNlbCIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFn
ZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLnJl
bGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5j
ZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKKyAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAoreworICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZv
bnQgc2l6ZQorICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVs
dENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGludCBtYWduaWZpZXJTaXplID0gbHJvdW5kZihz
dGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVm
YXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplKSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJT
aXplLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUs
IEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEludFJlY3QgYm91bmRz
ID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOworICAgIGlmICghby0+cGFyZW50KCkgfHwg
IW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5k
ZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKKyAgICBJ
bnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBh
bmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAorICAgIGJvdW5kcy5zZXRIZWlnaHQoc3Rk
OjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91
bmRzLmhlaWdodCgpKSkpOworICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0KCkpOwor
CisgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91
Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAg
IC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlz
IHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFy
ZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAv
IDIpOworCisgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOworICAgIGkuY29u
dGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9u
IHRoZSBmb250IHNpemUKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAv
IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0g
bHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxl
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsKKyAgICBpbnQgbWFnbmlmaWVyV2lkdGggPSBs
cm91bmRmKG1hZ25pZmllckhlaWdodCAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25X
aWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSk7CisgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWlnaHQsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIEFTU0VSVChvLT5wYXJlbnQo
KSk7CisgICAgaWYgKCFvLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8t
PnBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJz
b2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0
aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0
ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CisgICAgYm91bmRz
LnNldFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJv
dW5kcy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKKworICAgIC8vIENlbnRl
ciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0
byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBj
bG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0
dGVyIHdpdGggdGhlIHRleHQuCisgICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJl
bnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOworCisgICAgc3RhdGlj
IEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2Vh
cmNoTWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJ
bWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkK
K3sKKyAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGRlZmF1bHRNZWRpYUNvbnRy
b2xPcGFjaXR5KTsKKworICAgIC8vIERyYXcgYmFja2dyb3VuZC4KKyAgICBDb2xvciBvbGRGaWxs
ID0gY29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAgQ29sb3Igb2xkU3Ryb2tlID0gY29udGV4dC0+
c3Ryb2tlQ29sb3IoKTsKKworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2sp
OworICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgY29udGV4
dC0+ZHJhd1JlY3QocmVjdCk7CisKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Iob2xkRmlsbCk7
CisgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlKTsKKworICAgIC8vIENyZWF0
ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQg
aW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgorICAgIElu
dFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoKTsKKyAgICBpbWFnZVJlY3Quc2V0WShyZWN0
LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICBp
bWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSAr
IDEpIC8gMik7CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCwgQ29t
cG9zaXRlU291cmNlQXRvcCk7CisgICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnRQYXJlbnQoby0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheSIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1h
Z2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGF1c2Ui
KS5yZWxlYXNlUmVmKCk7CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpID8gbWVkaWFQbGF5
IDogbWVkaWFQYXVzZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiti
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOworICAgIGlm
ICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgSW1h
Z2UqIHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1
bGwiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmROb25lIikucmVsZWFzZVJlZigpOworCisg
ICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVj
dCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291bmROb25lOiBzb3VuZEZ1bGwpOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIEhl
aWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3NlcnMuCisgICAgc3R5bGUtPnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworfQorCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOworICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgp
OworICAgIGNvbnN0IGludCBtaWRkbGUgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOwor
CisgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJlY3QpOworCisgICAgU2tQYWludCBw
YWludDsKKyAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOworICAgIHBhaW50LnNldEFu
dGlBbGlhcyh0cnVlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7
CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVUbyhyaWdodCAtIDEzLCBtaWRkbGUg
LSAzKTsKKyAgICBwYXRoLnJMaW5lVG8oNiwgMCk7CisgICAgcGF0aC5yTGluZVRvKC0zLCA2KTsK
KyAgICBwYXRoLmNsb3NlKCk7CisgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGp1c3RNZW51TGlzdFN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKKy8vIFVzZWQgdG8gcGFpbnQgc3R5bGVkIG1l
bnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVyKQorYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHJldHVybiBwYWludE1lbnVMaXN0KG8sIGksIHJlY3QpOworfQorCitpbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBMZWZ0
UGFkZGluZyk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1l
bnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBSaWdodFBhZGRpbmcpOworfQorCitpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5
bGUsIFRvcFBhZGRpbmcpOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRvbVBhZGRpbmcpOworfQor
CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0xlZnQo
KSBjb25zdAoreworICAgIHJldHVybiAzOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMzsK
K30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdU
b3AoKSBjb25zdAoreworICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDE7Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwoKSBjb25zdAoreworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Y2FyZXRCbGlu
a0ludGVydmFsKCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0
Cit7CisgICAgLy8gVGhpcyBpbnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1
c2VyLXN1cHBsaWVkIHBhZGRpbmcuCisgICAgLy8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCisg
ICAgaW50IHBhZGRpbmcgPSBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGluZ1twYWRkaW5nVHlw
ZV07CisKKyAgICAvLyBSZXNlcnZlIHRoZSBzcGFjZSBmb3IgcmlnaHQgYXJyb3cgaGVyZS4gVGhl
IHJlc3Qgb2YgdGhlIHBhZGRpbmcgaXMKKyAgICAvLyBzZXQgYnkgYWRqdXN0TWVudUxpc3RTdHls
ZSwgc2luY2UgUG9wTWVudVdpbi5jcHAgdXNlcyB0aGUgcGFkZGluZyBmcm9tCisgICAgLy8gUmVu
ZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAu
CisgICAgLy8gSWYgdGhlIE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBlYXJhbmNlICJOb0FwcGVh
cmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMKKyAgICAvLyB3ZSBkb24ndCBkcmF3IGEgYnV0dG9uLCBz
byBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBpdC4KKyAgICBjb25zdCBpbnQgYmFyVHlwZSA9IHN0
eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBMZWZ0UGFkZGluZzsKKyAg
ICBpZiAocGFkZGluZ1R5cGUgPT0gYmFyVHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE5v
Q29udHJvbFBhcnQpCisgICAgICAgIHBhZGRpbmcgKz0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5oCmluZGV4IGJmMjE3YzguLjRhZDIzMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaApAQCAtMSwyICsxLDE0MCBAQAotLy8gRklYTUU6
IFRoaXMgaXMgYSBwbGFjZWhvbGRlciB0byBhdm9pZCBzb21lIGlzc3VlcyB3aXRoIHdlYmtpdC5n
eXAgaW4gdGhlIGNocm9taXVtIHRyZWUuIEhhdmluZyB0aGlzIHBsYWNlaG9sZGVyIHVudGlsIHdl
IGNhbiBmYWN0b3Igb3V0Ci0vLyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSBmcm9tIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eCB3aWxsIGtlZXAgdGhlIEhFQUQgb2YgYm90aCB0cmVlcyBjb21wYXRp
YmxlLgorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEdvb2dsZSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWFfaAorI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYV9o
CisKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAg
ICBjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpOworICAgICAgICB2
aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpOworCisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0
cmFRdWlya3NTdHlsZVNoZWV0KCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICB2aXJ0dWFs
IFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisjZW5kaWYKKworICAgICAg
ICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2Fy
ZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgorICAgICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgor
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworICAgICAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAg
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkg
Y29uc3Q7CisKKyAgICAgICAgLy8gVG8gY2hhbmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3ZlcnJp
ZGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0aGF0
IHdlIG1heSBzaGFyZSBsYXlvdXQgdGVzdCBjb2RlIGFuIGludGVyY2VwdHMuCisgICAgICAgIHZp
cnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OworCisgICAgICAgIC8vIFN5
c3RlbSBmb250cy4KKyAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwg
Rm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1l
bnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICAgICAgLy8gTWVudUxpc3QgcmVmZXJzIHRvIGFuIHVuc3R5bGVkIG1lbnVsaXN0IChtZWFu
aW5nIGEgbWVudWxpc3Qgd2l0aG91dAorICAgICAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJv
cmRlciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRvbiByZWZlcnMgdG8gYSBzdHlsZWQKKyAgICAgICAg
Ly8gbWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0aCBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRlciBz
ZXQpLiBUaGV5IGhhdmUKKyAgICAgICAgLy8gdGhpcyBkaXN0aW5jdGlvbiB0byBzdXBwb3J0IHNo
b3dpbmcgYXF1YSBzdHlsZSB0aGVtZXMgd2hlbmV2ZXIgdGhleQorICAgICAgICAvLyBwb3NzaWJs
eSBjYW4sIHdoaWNoIGlzIHNvbWV0aGluZyB3ZSBkb24ndCB3YW50IHRvIHJlcGxpY2F0ZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gSW4gc2hvcnQsIHdlIGVpdGhlciBnbyBkb3duIHRoZSBNZW51
TGlzdCBjb2RlIHBhdGggb3IgdGhlIE1lbnVMaXN0QnV0dG9uCisgICAgICAgIC8vIGNvZGVwYXRo
LiBXZSBuZXZlciBnbyBkb3duIGJvdGguIEFuZCBpbiBib3RoIGNhc2VzLCB0aGV5IHJlbmRlciB0
aGUKKyAgICAgICAgLy8gZW50aXJlIG1lbnVsaXN0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMg
ZGVmaW5lIHRoZSBwYWRkaW5nIGZvciB0aGUgTWVudUxpc3QncyBpbm5lciBibG9jay4KKyAgICAg
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGlu
dCBidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50
IGJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50
IGJ1dHRvbkludGVybmFsUGFkZGluZ1RvcCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBi
dXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdDsKKworICAgICAgICAvLyBBIGdlbmVy
YWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBh
bGwuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RhdGljIGNvbnN0IFN0
cmluZyYgZGVmYXVsdEdVSUZvbnQoKTsKKworICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YXJpYWJs
ZS13aWR0aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250CisgICAg
ICAgIC8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdo
aWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKKyAgICAgICAgLy8gZm9ybSBjb250cm9sIGZvbnRzLgor
ICAgICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOworCisgICAgICAgIHZpcnR1YWwg
ZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQg
cGFkZGluZ1R5cGUpIGNvbnN0OworICAgICAgICBib29sIHBhaW50TWVkaWFCdXR0b25JbnRlcm5h
bChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgSW1hZ2UqKTsKKyAgICB9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31119</attachid>
            <date>2009-06-09 17:56:08 -0700</date>
            <delta_ts>2009-06-15 14:51:04 -0700</delta_ts>
            <desc>Remove common code from RenderThemeChromiumWin</desc>
            <filename>kill_win.patch</filename>
            <type>text/plain</type>
            <size>32802</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjRmNDJhZC4uN2JjZmYxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wNi0wOSAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjE0OAorICAgICAgICBSZW1vdmUgY29kZSBpbiBSZW5kZXJUaGVtZUNocm9taXVtV2luIHRo
YXQgc2hhcmVkIHdpdGgKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpSZW5kZXJUaGVtZUNocm9taXVtV2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46On5SZW5kZXJUaGVt
ZUNocm9taXVtV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtV2luLmg6CisKIDIwMDktMDYtMDUgIEFsYmVydCBKLiBXb25nICA8
YWp3b25nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51
eC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmlu
ZGV4IDIzYjdlYWYuLjcxNjVjOWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtNjcsNCArNjcsOSBAQCBDb2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0CiAgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOwogfQogCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCmluZGV4IDhjY2FmOTEuLmNiOWJkYzcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCkBAIC00
NSw2ICs0NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xvciBh
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcg
aWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgorICAgICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtU2tpYS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5jcHAKaW5kZXggYjMwNjEwOS4uNTIwMzgwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtMTYxLDExICsxNjEsNiBAQCBDb2xvciBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOwogfQog
Ci1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxp
Z2h0Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsK
LX0KLQogZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwo
KSBjb25zdAogewogICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0
ZXN0IG1vZGUsIGFzIGl0IGludHJvZHVjZXMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtU2tpYS5oCmluZGV4IDRhZDIzMTYuLjQyMWJkMjYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaApAQCAtNTQsNyArNTQsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3Q7CiAKICAgICAgICAgLy8gVG8gY2hhbmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3Zl
cnJpZGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0
aGF0IHdlIG1heSBzaGFyZSBsYXlvdXQgdGVzdCBjb2RlIGFuIGludGVyY2VwdHMuCiAgICAgICAg
IHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OwpAQCAtMTE3LDkgKzEx
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50
ZXJuYWxQYWRkaW5nVG9wKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVy
bmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0OwogCi0gICAgICAgIC8vIEEgZ2VuZXJhbCBtZXRob2Qg
YXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KLSAgICAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZh
dWx0R1VJRm9udCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCmluZGV4IDUyODgxOTEuLmRjMTIxYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8dnNz
eW0zMi5oPgogCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZvbnRVdGlsc0Nocm9taXVtV2luLmgiCkBAIC00MCw5ICsz
OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNp
bmNsdWRlICJUcmFuc3BhcmVuY3lXaW4uaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0
cy5oIgogI2luY2x1ZGUgIldpbmRvd3NWZXJzaW9uLmgiCiAKIC8vIEZJWE1FOiBUaGlzIGRlcGVu
ZGVuY3kgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KQEAgLTU3LDI4ICs1NCw2IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7Ci0KLS8vIFRoZSBiYWNrZ3JvdW5kIGZv
ciB0aGUgbWVkaWEgcGxheWVyIGNvbnRyb2xzIHNob3VsZCBiZSBhIDYwJSBvcGFxdWUgYmxhY2sg
cmVjdGFuZ2xlLiBUaGlzCi0vLyBtYXRjaGVzIHRoZSBVSSBtb2NrdXBzIGZvciB0aGUgZGVmYXVs
dCBVSSB0aGVtZS4KLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0TWVkaWFDb250cm9sT3BhY2l0
eSA9IDAuNmY7Ci0KLS8vIFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi4KLXN0YXRp
YyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemUgPSAxMzsKLXN0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSA9IDk7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgbWluQ2FuY2VsQnV0dG9uU2l6ZSA9IDU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4Q2FuY2Vs
QnV0dG9uU2l6ZSA9IDIxOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMwOwotc3RhdGljIGNvbnN0IGZsb2F0IGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCA9IDE4OwotCi1ib29sIGNhbnZhc0hh
c011bHRpcGxlTGF5ZXJzKGNvbnN0IFNrQ2FudmFzKiBjYW52YXMpCi17Ci0gICAgU2tDYW52YXM6
OkxheWVySXRlciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7Ci0g
ICAgaXRlci5uZXh0KCk7ICAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgot
ICAgIHJldHVybiAhaXRlci5kb25lKCk7ICAvLyBUaGVyZSBpcyA+IDEgbGF5ZXIgaWYgdGhlIHRo
ZSBpdGVyYXRvciBjYW4gc3RpbCBhZHZhbmNlLgotfQotCiBjbGFzcyBUaGVtZVBhaW50ZXIgOiBw
dWJsaWMgVHJhbnNwYXJlbmN5V2luIHsKIHB1YmxpYzoKICAgICBUaGVtZVBhaW50ZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQpAQCAtOTMsNiArNjgsMTMgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBjYW52YXNIYXNNdWx0
aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyogY2FudmFzKQorICAgIHsKKyAgICAgICAgU2tDYW52
YXM6OkxheWVySXRlciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7
CisgICAgICAgIGl0ZXIubmV4dCgpOyAgLy8gVGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBs
YXllci4KKyAgICAgICAgcmV0dXJuICFpdGVyLmRvbmUoKTsgIC8vIFRoZXJlIGlzID4gMSBsYXll
ciBpZiB0aGUgdGhlIGl0ZXJhdG9yIGNhbiBzdGlsIGFkdmFuY2UuCisgICAgfQorCiAgICAgc3Rh
dGljIExheWVyTW9kZSBnZXRMYXllck1vZGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUcmFu
c2Zvcm1Nb2RlIHRyYW5zZm9ybU1vZGUpCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkgIC8vIE1pZ2h0IGhhdmUg
dHJhbnNwYXJlbnQgYmFja2dyb3VuZC4KQEAgLTExNiw3ICs5OCw4IEBAIHByaXZhdGU6CiAKIH0g
IC8vIG5hbWVzcGFjZQogCi1zdGF0aWMgdm9pZCBnZXROb25DbGllbnRNZXRyaWNzKE5PTkNMSUVO
VE1FVFJJQ1MqIG1ldHJpY3MpIHsKK3N0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9O
Q0xJRU5UTUVUUklDUyogbWV0cmljcykKK3sKICAgICBzdGF0aWMgVUlOVCBzaXplID0gV2ViQ29y
ZTo6aXNWaXN0YU9yTmV3ZXIoKSA/CiAgICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6
IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7CiAgICAgbWV0cmljcy0+Y2JTaXplID0g
c2l6ZTsKQEAgLTEyNCwyMCArMTA3LDYgQEAgc3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50TWV0cmlj
cyhOT05DTElFTlRNRVRSSUNTKiBtZXRyaWNzKSB7CiAgICAgQVNTRVJUKHN1Y2Nlc3MpOwogfQog
Ci1lbnVtIFBhZGRpbmdUeXBlIHsKLSAgICBUb3BQYWRkaW5nLAotICAgIFJpZ2h0UGFkZGluZywK
LSAgICBCb3R0b21QYWRkaW5nLAotICAgIExlZnRQYWRkaW5nCi19OwotCi1zdGF0aWMgY29uc3Qg
aW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0IH07Ci0K
LS8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFz
IHRoZSBkZWZhdWx0IGZvbnQKLS8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMg
YSBiYXNlIHNpemUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLS8vIGZvcm0gY29udHJvbCBm
b250cy4KLXN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOwotCiBzdGF0aWMgRm9u
dERlc2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9udDsKIHN0YXRpYyBGb250RGVzY3JpcHRpb24gbWVu
dUZvbnQ7CiBzdGF0aWMgRm9udERlc2NyaXB0aW9uIGxhYmVsRm9udDsKQEAgLTE1OSwxNCArMTI4
LDYgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Rml4ZWRQYWRkaW5nKFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgaW50IHBhZGRpbmdbNF0pCi17Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nW0xlZnRQYWRkaW5nXSwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nW1JpZ2h0UGFkZGluZ10sIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdbVG9wUGFkZGluZ10sIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdbQm90dG9t
UGFkZGluZ10sIEZpeGVkKSk7Ci19Ci0KIC8vIFJldHVybiB0aGUgaGVpZ2h0IG9mIHN5c3RlbSBm
b250IHxmb250fCBpbiBwaXhlbHMuICBXZSB1c2UgdGhpcyBzaXplIGJ5CiAvLyBkZWZhdWx0IGZv
ciBzb21lIG5vbi1mb3JtLWNvbnRyb2wgZWxlbWVudHMuCiBzdGF0aWMgZmxvYXQgc3lzdGVtRm9u
dFNpemUoY29uc3QgTE9HRk9OVCYgZm9udCkKQEAgLTIwMSwyMCArMTYyLDYgQEAgc3RhdGljIGZs
b2F0IHN5c3RlbUZvbnRTaXplKGNvbnN0IExPR0ZPTlQmIGZvbnQpCiAgICAgcmV0dXJuICgoc2l6
ZSA8IDEyLjBmKSAmJiAoR2V0QUNQKCkgPT0gOTM2KSkgPyAxMi4wZiA6IHNpemU7CiB9CiAKLS8v
IFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRo
ZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgotLy8gLUdl
Y2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZB
VUxUX0dVSV9GT05UKSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQotLy8gLVNhZmFy
aSB1c2VzIEx1Y2lkYSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUg
d2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCi0vLyBJRSB1
c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNl
cnRhaW4gcGl4ZWwKLS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVz
ZSBBcmlhbC4KLXN0YXRpYyB3Y2hhcl90KiBkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgcmV0dXJu
IEwiQXJpYWwiOwotfQotCiAvLyBDb252ZXJ0cyB8cG9pbnRzfCB0byBwaXhlbHMuICBPbmUgcG9p
bnQgaXMgMS83MiBvZiBhbiBpbmNoLgogc3RhdGljIGZsb2F0IHBvaW50c1RvUGl4ZWxzKGZsb2F0
IHBvaW50cykKIHsKQEAgLTIzMywxNCArMTgwLDYgQEAgc3RhdGljIGZsb2F0IHBvaW50c1RvUGl4
ZWxzKGZsb2F0IHBvaW50cykKICAgICByZXR1cm4gcG9pbnRzIC8gcG9pbnRzUGVySW5jaCAqIHBp
eGVsc1BlckluY2g7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQot
CiBzdGF0aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChkb3VibGUgZGVmYXVsdElu
dGVydmFsKQogewogICAgIFVJTlQgYmxpbmtUaW1lID0gR2V0Q2FyZXRCbGlua1RpbWUoKTsKQEAg
LTI1MSwyMCArMTkwLDYgQEAgc3RhdGljIGRvdWJsZSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwo
ZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKICAgICByZXR1cm4gYmxpbmtUaW1lIC8gMTAwMC4wOwog
fQogCi0jaWYgRU5BQkxFKFZJREVPKQotLy8gQXR0ZW1wdCB0byByZXRyaWV2ZSBhIEhUTUxNZWRp
YUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgTlVMTCBpZiBvbmUgY2Fubm90IGJlIGZvdW5k
Lgotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudFBhcmVudChOb2RlKiBub2Rl
KQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgTm9kZSogbWVkaWFO
b2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwg
KCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgIW1lZGlhTm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFnKSkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwot
fQotI2VuZGlmCi0KIC8vIEltcGxlbWVudCBXZWJDb3JlOjp0aGVtZSgpIGZvciBnZXR0aW5nIHRo
ZSBnbG9iYWwgUmVuZGVyVGhlbWUuCiBSZW5kZXJUaGVtZSogdGhlbWUoKQogewpAQCAtMjcyLDIy
ICsxOTcsMTMgQEAgUmVuZGVyVGhlbWUqIHRoZW1lKCkKICAgICByZXR1cm4gJndpblRoZW1lOwog
fQogCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLX0KLQotU3RyaW5nIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCitSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpSZW5kZXJUaGVtZUNocm9taXVtV2luKCkKIHsKLSAgICByZXR1cm4gU3RyaW5nKHRo
ZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luUXVpcmtzVXNl
ckFnZW50U3R5bGVTaGVldCkpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotU3RyaW5nIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQorUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6flJlbmRlclRoZW1lQ2hyb21pdW1XaW4oKQogewotICAgIHJldHVy
biBTdHJpbmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9m
KG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KLSNlbmRpZgog
CiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKQEAgLTMzNywyMyArMjUzLDExIEBAIENvbG9yIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoKSBjb25zdAogICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsgLy8gWWVs
bG93LgogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6Y2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3QKLXsKLSAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBsYXlv
dXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCi0gICAgLy8gYSByYWNlIGNvbmRpdGlvbiBm
b3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCi0gICAgaWYgKENocm9taXVtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRoaXMg
aW52b2x2ZXMgYSBzeXN0ZW0gY2FsbCwgc28gd2UgY2FjaGUgdGhlIHJlc3VsdC4KLSAgICBzdGF0
aWMgZG91YmxlIGJsaW5rSW50ZXJ2YWwgPSBxdWVyeVN5c3RlbUJsaW5rSW50ZXJ2YWwoUmVuZGVy
VGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpKTsKLSAgICByZXR1cm4gYmxpbmtJbnRlcnZhbDsK
LX0KLQogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Gb250KGludCBwcm9wSWQs
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIC8vIFRoaXMg
bG9naWMgb3dlcyBtdWNoIHRvIFJlbmRlclRoZW1lU2FmYXJpLmNwcC4KLSAgICBGb250RGVzY3Jp
cHRpb24qIGNhY2hlZERlc2MgPSBOVUxMOwotICAgIHdjaGFyX3QqIGZhY2VOYW1lID0gMDsKKyAg
ICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2MgPSAwOworICAgIEF0b21pY1N0cmluZyBmYWNl
TmFtZTsKICAgICBmbG9hdCBmb250U2l6ZSA9IDA7CiAgICAgc3dpdGNoIChwcm9wSWQpIHsKICAg
ICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9uOgpAQCAtMzYxLDcgKzI2NSw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwCiAgICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVT
aXplKCkpIHsKICAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKICAgICAgICAg
ICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUg
PSBtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAgZmFjZU5h
bWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSwgd2Nz
bGVuKG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpKTsKICAgICAgICAgICAgIGZv
bnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzcwLDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwCiAgICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgewogICAgICAg
ICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwogICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50
TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IG1ldHJpY3MubGZNZW51
Rm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0
cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmTWVudUZvbnQubGZG
YWNlTmFtZSkpOwogICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNz
LmxmTWVudUZvbnQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDAwLDkgKzMwNCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwCiAgICAgICAgIGNhY2hlZERlc2MgPSAmZm9udERl
c2NyaXB0aW9uOwogCiAgICAgaWYgKGZvbnRTaXplKSB7Ci0gICAgICAgIEFTU0VSVChmYWNlTmFt
ZSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KEF0b21pY1N0
cmluZyhmYWNlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjc2xlbihmYWNlTmFtZSkpKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+
Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFjZU5hbWUpOwogICAgICAgICBjYWNoZWREZXNjLT5z
ZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0Zh
bWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0
U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CkBAIC00MTIsMTEgKzMxNCw2IEBAIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwCiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAog
ewogICAgIC8vIFRoZXNlIHNpemVzIG1hdGNoIHdoYXQgV2luWFAgZHJhd3MgZm9yIHZhcmlvdXMg
bWVudXMuCkBAIC00MzEsMjUgKzMyOCwxMyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgfQogfQog
Ci12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9m
IDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkKLSAgICAvLyBmb3Igbm93
LiAgSXQgbWF0Y2hlcyBGaXJlZm94LiAgQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5k
b3dzLAotICAgIC8vIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0
aGF0IGFjY291bnRzIGZvciB0aGUgaGlnaGVyCi0gICAgLy8gRFBJLiAgVW50aWwgb3VyIGVudGly
ZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UKLSAgICAvLyBj
YW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzIG1ldHJpY3MuCi0gICAgY29uc3QgSW50U2l6ZSBzaXpl
KDEzLCAxMyk7Ci0gICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7CisgICAgcmV0dXJuIHBh
aW50QnV0dG9uKG8sIGksIHIpOwogfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBVc2Ugc2FtZSBzaXpp
bmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4KLSAgICBzZXRDaGVja2JveFNpemUoc3R5bGUp
OworICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNDgzLDE3OCArMzY4LDkg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
LXsKLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQot
ICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xG
b250UGl4ZWxTaXplOwotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1p
bihzdGQ6Om1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAq
IGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgSW50UmVjdCBib3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYg
KCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94
KG8tPnBhcmVudCgpKTsKLQotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94
LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxl
ZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Ci0g
ICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4o
cGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgYm91bmRzLnNldFdp
ZHRoKGJvdW5kcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNh
bGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1j
ZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20g
b2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0Lgot
ICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91
bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLQotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2Ug
PSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLnJlbGVhc2VSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLnJlbGVhc2VSZWYoKTsKLSAgICBp
LmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBj
YW5jZWxJbWFnZSwgYm91bmRzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAg
SW50U2l6ZSBlbXB0eVNpemUoMSwgMTEpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1w
dHlTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1w
dHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1X
aW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBTY2Fs
ZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6
ZTsKLSAgICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWlu
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+
cGFyZW50KCkpOwotICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5pc0JveCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyQm94KiBwYXJlbnRSZW5k
ZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJlbnRCb3gg
PSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAotICAgIC8vIE1h
a2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBp
biBpdHMgcGFyZW50J3MgYm94Ci0gICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRC
b3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkp
KSk7Ci0gICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBDZW50
ZXIgdGhlIGRlY29yYXRpb24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQg
aGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8gYmUgb25lIHBp
eGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9v
ayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsg
KHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7Ci0gICAgCi0g
ICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOwotICAgIGkuY29udGV4dC0+ZHJh
d0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQg
c2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENv
bnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBtYWduaWZpZXJIZWlnaHQgPSBscm91bmRmKHN0
ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZh
dWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIGludCBtYWduaWZpZXJXaWR0aCA9IGxyb3VuZGYobWFn
bmlmaWVySGVpZ2h0ICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVm
YXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+cGFyZW50KCkpOwotICAgIGlm
ICghby0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW8tPnBhcmVu
dCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50
KCkpOwotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNv
bnRlbnRCb3goKTsKLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9u
IHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6
bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7Ci0gICAgYm91bmRzLnNl
dFdpZHRoKHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5k
cy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1
bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKLQotICAgIC8vIENlbnRlciB0
aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBi
ZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9z
ZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVy
IHdpdGggdGhlIHRleHQuCi0gICAgYm91bmRzLnNldFkocGFyZW50Qm94LnkoKSArIChwYXJlbnRC
b3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIpOwotCi0gICAgc3RhdGljIElt
YWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNo
TWFnbmlmaWVyUmVzdWx0cyIpLnJlbGVhc2VSZWYoKTsKLSAgICBpLmNvbnRleHQtPmRyYXdJbWFn
ZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQotewot
ICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZGVmYXVsdE1lZGlhQ29udHJvbE9w
YWNpdHkpOwotCi0gICAgLy8gRHJhdyBiYWNrZ3JvdW5kLgotICAgIENvbG9yIG9sZEZpbGwgPSBj
b250ZXh0LT5maWxsQ29sb3IoKTsKLSAgICBDb2xvciBvbGRTdHJva2UgPSBjb250ZXh0LT5zdHJv
a2VDb2xvcigpOwotCi0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7Ci0g
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBjb250ZXh0LT5k
cmF3UmVjdChyZWN0KTsKLQotICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihvbGRGaWxsKTsKLSAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvbGRTdHJva2UpOwotCi0gICAgLy8gQ3JlYXRlIGEg
ZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50ZXJlZCBpbiB0
aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24uCi0gICAgSW50UmVj
dCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOwotICAgIGltYWdlUmVjdC5zZXRZKHJlY3QueSgp
ICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOwotICAgIGltYWdl
UmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53aWR0aCgpICsgMSkg
LyAyKTsKLQotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBDb21wb3Np
dGVTb3VyY2VBdG9wKTsKLSAgICBjb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50
TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFy
ZW50KG8tPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBt
ZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIikucmVs
ZWFzZVJlZigpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludElu
Zm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlhUGxheSA6IG1l
ZGlhUGF1c2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0gICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSog
c291bmRGdWxsID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRnVsbCIp
LnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBy
ZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBt
ZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5kRnVsbCk7Ci0jZWxzZQotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBIZWlnaHQgaXMgbG9ja2Vk
IHRvIGF1dG8gb24gYWxsIGJyb3dzZXJzLgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICByZXR1cm4gcGFpbnRTbGlkZXJUcmFj
ayhvLCBpLCByKTsKIH0KIAogLy8gVXNlZCB0byBwYWludCB1bnN0eWxlZCBtZW51bGlzdHMgKGku
ZS4gd2l0aCB0aGUgZGVmYXVsdCBib3JkZXIpCkBAIC03MDksNTcgKzQyNSw2IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBh
ZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLS8vIFVzZWQgdG8g
cGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVyKQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3QobywgaSwgcik7Ci19Ci0KLWludCBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHls
ZSwgTGVmdFBhZGRpbmcpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBSaWdodFBhZGRpbmcpOwotfQotCi1p
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGlu
ZyhzdHlsZSwgVG9wUGFkZGluZyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21QYWRkaW5nKTsK
LX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmJ1dHRvbkludGVybmFsUGFkZGluZ0xl
ZnQoKSBjb25zdAotewotICAgIHJldHVybiAzOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nUmlnaHQoKSBjb25zdAotewotICAgIHJldHVybiAz
OwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRkaW5n
VG9wKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21p
dW1XaW46OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDE7Ci19Ci0KIC8vIHN0YXRpYwogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzZXREZWZh
dWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQogewpAQCAtNzY5LDYgKzQzNCwxMyBAQCB2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCiAg
ICAgc21hbGxTeXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBGb250RGVzY3JpcHRp
b24oKTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmNhcmV0QmxpbmtJbnRl
cnZhbEludGVybmFsKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGludm9sdmVzIGEgc3lzdGVtIGNh
bGwsIHNvIHdlIGNhY2hlIHRoZSByZXN1bHQuCisgICAgc3RhdGljIGRvdWJsZSBibGlua0ludGVy
dmFsID0gcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKFJlbmRlclRoZW1lOjpjYXJldEJsaW5rSW50
ZXJ2YWwoKSk7CisgICAgcmV0dXJuIGJsaW5rSW50ZXJ2YWw7Cit9CisKIHVuc2lnbmVkIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKIHsKICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBUU19OT1JNQUw7CkBAIC05MDksMjIgKzU4MSw0IEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUZXh0RmllbGRJbnRlcm5hbChSZW5kZXJPYmpl
Y3QqIG8sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcGFkZGlu
Z1R5cGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBpbnRlcm5hbCBwYWRkaW5nIGlzIGluIGFkZGl0
aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCi0gICAgLy8gTWF0Y2hlcyB0aGUgRkYg
YmVoYXZpb3IuCi0gICAgaW50IHBhZGRpbmcgPSBzdHlsZWRNZW51TGlzdEludGVybmFsUGFkZGlu
Z1twYWRkaW5nVHlwZV07Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSBzcGFjZSBmb3IgcmlnaHQgYXJy
b3cgaGVyZS4gVGhlIHJlc3Qgb2YgdGhlIHBhZGRpbmcgaXMgc2V0Ci0gICAgLy8gYnkgYWRqdXN0
TWVudUxpc3RTdHlsZSwgc2luY2UgUG9wdXBNZW51Q2hyb21pdW0uY3BwIHVzZXMgdGhlIHBhZGRp
bmcKLSAgICAvLyBmcm9tIFJlbmRlck1lbnVMaXN0IHRvIGxheSBvdXQgdGhlIGluZGl2aWR1YWwg
aXRlbXMgaW4gdGhlIHBvcHVwLiAgSWYKLSAgICAvLyB0aGUgTWVudUxpc3QgYWN0dWFsbHkgaGFz
IGFwcGVhcmFuY2UgIk5vQXBwZWFyYW5jZSIsIHRoZW4gdGhhdCBtZWFucyB3ZQotICAgIC8vIGRv
bid0IGRyYXcgYSBidXR0b24sIHNvIGRvbid0IHJlc2VydmUgc3BhY2UgZm9yIGl0LgotICAgIGNv
bnN0IGludCBiYXJUeXBlID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IFJpZ2h0UGFkZGlu
ZyA6IExlZnRQYWRkaW5nOwotICAgIGlmIChwYWRkaW5nVHlwZSA9PSBiYXJUeXBlICYmIHN0eWxl
LT5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydCkKLSAgICAgICAgcGFkZGluZyArPSBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0KLSAgICBy
ZXR1cm4gcGFkZGluZzsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCmluZGV4IDZiYTY1OTUuLmY3ZTlhODQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgKQEAgLTI0LDcgKzI0
LDcgQEAKICNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbl9oCiAjZGVmaW5lIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW5faAogCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIgogCiAjaWYgV0lOMzIKIHR5cGVkZWYgdm9pZCogSEFO
RExFOwpAQCAtNDIsMTkgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5z
aWduZWQgbV9jbGFzc2ljU3RhdGU7CiAgICAgfTsKIAotICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW4gOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW4gOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgewogICAgIHB1YmxpYzoK
LSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbigpIHsgfQotICAgICAgICB+UmVuZGVyVGhl
bWVDaHJvbWl1bVdpbigpIHsgfQotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVs
dFN0eWxlU2hlZXQoKTsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNo
ZWV0KCk7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdp
bmcgd2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbigpOworICAgICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtV2lu
KCk7CiAKICAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRv
IGRyYXcgdGhlIGZvY3VzIHJpbmcuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3Vz
UmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtNjcsNDYgKzU4LDE4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKIAotICAgICAgICB2
aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKLQogICAgICAgICAvLyBT
eXN0ZW0gZm9udHMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQs
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgaW50IG1pbmltdW1N
ZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwogCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50QnV0dG9u
KG8sIGksIHIpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKSB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KKyAgICAgICAgLy8gVmFyaW91
cyBwYWludCBmdW5jdGlvbnMuCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQotCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50U2xpZGVyVHJh
Y2sobywgaSwgcik7IH0KLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIC8vIE1lbnVMaXN0IHJlZmVycyB0byBhbiB1bnN0
eWxlZCBtZW51bGlzdCAobWVhbmluZyBhIG1lbnVsaXN0IHdpdGhvdXQKICAgICAgICAgLy8gYmFj
a2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVudUxpc3RCdXR0b24gcmVmZXJzIHRv
IGEgc3R5bGVkCkBAIC0xMTcsMjEgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBJbiBzaG9ydCwgd2UgZWl0aGVyIGdvIGRvd24gdGhlIE1lbnVMaXN0IGNvZGUgcGF0aCBv
ciB0aGUgTWVudUxpc3RCdXR0b24KICAgICAgICAgLy8gY29kZXBhdGguIFdlIG5ldmVyIGdvIGRv
d24gYm90aC4gQW5kIGluIGJvdGggY2FzZXMsIHRoZXkgcmVuZGVyIHRoZQogICAgICAgICAvLyBl
bnRpcmUgbWVudWxpc3QuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkZWZpbmUgdGhlIHBhZGRp
bmcgZm9yIHRoZSBNZW51TGlzdCdzIGlubmVyIGJsb2NrLgotICAgICAgICB2aXJ0dWFsIGludCBw
b3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSop
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShS
ZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFs
UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQ
YWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQ
YWRkaW5nVG9wKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFk
ZGluZ0JvdHRvbSgpIGNvbnN0OwogCiAgICAgICAgIC8vIFByb3ZpZGUgYSB3YXkgdG8gcGFzcyB0
aGUgZGVmYXVsdCBmb250IHNpemUgZnJvbSB0aGUgU2V0dGluZ3Mgb2JqZWN0CiAgICAgICAgIC8v
IHRvIHRoZSByZW5kZXIgdGhlbWUuICBGSVhNRTogaHR0cDovL2IvMTEyOTE4NiBBIGNsZWFuZXIg
d2F5IHdvdWxkIGJlCkBAIC0xNDAsNiArODksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIG9iamVjdC4KICAgICAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGlu
dCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJ
bnRlcnZhbEludGVybmFsKCkgY29uc3Q7CisKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25l
ZCBkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqKTsKICAgICAgICAgdW5zaWduZWQgZGV0ZXJt
aW5lU2xpZGVyVGh1bWJTdGF0ZShSZW5kZXJPYmplY3QqKTsKQEAgLTE0OCw5ICsxMDAsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRoZW1lRGF0YSBnZXRUaGVtZURhdGEoUmVuZGVy
T2JqZWN0Kik7CiAKICAgICAgICAgYm9vbCBwYWludFRleHRGaWVsZEludGVybmFsKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIGJv
b2wpOwotICAgICAgICBib29sIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiwgSW1hZ2UqKTsKLQotICAgICAgICBpbnQgbWVudUxpc3RJbnRl
cm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31297</attachid>
            <date>2009-06-15 10:45:19 -0700</date>
            <delta_ts>2009-06-15 11:31:02 -0700</delta_ts>
            <desc>Rebased patch to tip of tree for extracting RenderThemeChromiumSkia out of RenderThemeChromiumLinux.  Other patches to follow.</desc>
            <filename>patch_rebased</filename>
            <type>text/plain</type>
            <size>35272</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDUxMTViMC4uY2M5NTcwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNDUgQEAKKzIwMDktMDYtMTUgIEFsYmVydCBKLiBX
b25nICA8YWp3b25nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjYxNDgKKyAgICAgICAgRXh0cmFjdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSBvdXQgb2Yg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LiAgVGhpcworICAgICAgICBpcyBtb3N0bHkgYSBjb2Rl
IHNodWZmbGUuICBUaGUgbm9uLXN1ZmZsZSBjaGFuZ2VzIGFyZToKKyAgICAgICAgICAgMSkgQ3Jl
YXRpb24gb2YgYSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbC4KKyAgICAgICAgICAgMikgTW92
aW5nIG9mIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxl
cy4KKyAgICAgICAgICAgMykgQ2hhbmdpbmcgb2YgZGVmYXVsdEdVSUZvbnQgaW50byBhIHN0YXRp
YyBjbGFzcyBjb25zdGFudCBmcm9tIGEKKyAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uLiAg
QWxzbyB0aGUgdHlwZSBpcyBjaGFuZ2VkIHRvIFN0cmluZy4KKyAgICAgICAgICAgNCkgQ2hhbmdp
bmcgb2YgZGVmYXVsdEZvbnRTaXplIGludG8gYSBzdGF0aWMgY2xhc3MgY29uc3RhbnQgZnJvbSBh
CisgICAgICAgICAgICAgIHN0YXRpYyB2YXJpYWJsZSBpbiB0aGUgZmlsZSBzY29wZS4KKyAgICAg
ICAgICAgNSkgVGhlIHN0YXRpYyBzdXBwb3J0c0ZvY3VzIGZ1bmN0aW9uIHdhcyBjb2xsYXBzZWQg
aW50bworICAgICAgICAgICAgICBzdXBwb3J0c0ZvY3VzUmluZy4KKyAgICAgICAgICAgNikgU3Bs
aXQgdGhlIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQgaW50byBTa2lhIGFuZCBMaW51eCB2ZXJzaW9u
cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRHVUlGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlz
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cElu
dGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0
b25JbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNo
cm9taXVtTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorCisyMDA5
LTA2LTE1ICBBbGJlcnQgSi4gV29uZyAgPGFqd29uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MTQ4CisgICAgICAgIEV4dHJhY3QgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEgb3V0IG9mIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eC4gIFRoaXMKKyAgICAg
ICAgaXMgbW9zdGx5IGEgY29kZSBzaHVmZmxlLiAgVGhlIG5vbi1zdWZmbGUgY2hhbmdlcyBhcmU6
CisgICAgICAgICAgIDEpIENyZWF0aW9uIG9mIGEgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwu
CisgICAgICAgICAgIDIpIE1vdmluZyBvZiBzb21lIGlubGluZSBmdW5jdGlvbnMgaW50byB0aGUg
aW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAgICAgICAgIDMpIENoYW5naW5nIG9mIGRlZmF1bHRH
VUlGb250IGludG8gYSBzdGF0aWMgY2xhc3MgY29uc3RhbnQgZnJvbSBhCisgICAgICAgICAgICAg
IHN0YXRpYyBmdW5jdGlvbi4gIEFsc28gdGhlIHR5cGUgaXMgY2hhbmdlZCB0byBTdHJpbmcuCisg
ICAgICAgICAgIDQpIENoYW5naW5nIG9mIGRlZmF1bHRGb250U2l6ZSBpbnRvIGEgc3RhdGljIGNs
YXNzIGNvbnN0YW50IGZyb20gYQorICAgICAgICAgICAgICBzdGF0aWMgdmFyaWFibGUgaW4gdGhl
IGZpbGUgc2NvcGUuCisgICAgICAgICAgIDUpIFRoZSBzdGF0aWMgc3VwcG9ydHNGb2N1cyBmdW5j
dGlvbiB3YXMgY29sbGFwc2VkIGludG8KKyAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c1Jpbmcu
CisgICAgICAgICAgIDYpIFNwbGl0IG91dCBleHRyYURlZmF1bHRTdHlsZVNoZWV0IHRvIExpbnV4
IGFuZCBTa2lhIHZlcnNpb25zLgorCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJs
aW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlh
TXV0ZUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRv
bkludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorCiAyMDA5
LTA2LTE1ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBhbmQgZG9uZSB3aXRoIFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA4MDQ5NDAz
Li45ZTllYjQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAKQEAgLTUyLDExICs1Miw2IEBAIGVudW0gUGFkZGluZ1R5cGUgewogCiBzdGF0aWMg
Y29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0
IH07CiAKLS8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0
aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKLS8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBh
bmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLS8vIGZvcm0gY29u
dHJvbCBmb250cy4KLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOwot
CiAvLyBUaGUgYmFja2dyb3VuZCBmb3IgdGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQg
YmUgYSA2MCUgb3BhcXVlIGJsYWNrIHJlY3RhbmdsZS4gVGhpcwogLy8gbWF0Y2hlcyB0aGUgVUkg
bW9ja3VwcyBmb3IgdGhlIGRlZmF1bHQgVUkgdGhlbWUuCiBzdGF0aWMgY29uc3QgZmxvYXQgZGVm
YXVsdE1lZGlhQ29udHJvbE9wYWNpdHkgPSAwLjZmOwpAQCAtNzEsMTIgKzY2LDYgQEAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gOTsKIHN0
YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMw
Owogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0
aCA9IDE4OwogCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UpCi17Ci0gICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdz
IGZvciB1cy4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldFNpemVJZkF1
dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChz
dHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtODUsMjAgKzc0LDYgQEAgc3Rh
dGljIHZvaWQgc2V0U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUm
IHNpemUpCiAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7CiB9CiAKLS8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMgYSBm
b250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNv
bnRyb2xzLgotLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRT
dG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwg
RGxnKQotLy8gLVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRoZSBv
bmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNv
ZGluZ3MuCi0vLyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGlu
Y29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwKLS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9y
IG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KLXN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0R1VJRm9u
dCgpCi17Ci0gICAgcmV0dXJuICJBcmlhbCI7Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiAvLyBB
dHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJu
cyBOVUxMIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCiBzdGF0aWMgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCkBAIC0xMTMsODYgKzg4LDEwMSBAQCBzdGF0
aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCiB9CiAj
ZW5kaWYKIAorLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUgdXNlcyBhIGZvbnQg
YmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJv
bHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2Nr
T2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcp
CisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhNRTogVGhlIG9ubHkg
Y2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5n
cy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3Jy
ZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93
IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgU3RyaW5nJiBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6ZGVmYXVsdEdVSUZvbnQoKSB7CisgIHN0YXRpYyBTdHJpbmcgZm9udEZhY2UoIkFyaWFsIik7
CisgIHJldHVybiBmb250RmFjZTsKK30KKworZmxvYXQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OmRlZmF1bHRGb250U2l6ZSA9IDE2LjA7CisKIFJlbmRlclRoZW1lKiB0aGVtZSgpCiB7CiAgICAg
c3RhdGljIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCB0aGVtZTsKICAgICByZXR1cm4gJnRoZW1l
OwogfQogCi1SZW5kZXJUaGVtZUNocm9taXVtTGludXg6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eCgpCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQog
ewogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdAorUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6On5SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYSgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGxpbnV4QnV0dG9uR3JheUNv
bG9yKDB4ZmZkZGRkZGQpOwotCi0gICAgaWYgKGNzc1ZhbHVlSWQgPT0gQ1NTVmFsdWVCdXR0b25m
YWNlKQotICAgICAgICByZXR1cm4gbGludXhCdXR0b25HcmF5Q29sb3I7Ci0gICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKIH0KIAogLy8gVXNlIHRoZSBXaW5k
b3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgotU3RyaW5nIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewotICAgIHJldHVy
biBTdHJpbmcodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5Vc2Vy
QWdlbnRTdHlsZVNoZWV0KSkgKwotICAgICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUxpbnV4
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKKyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCi1TdHJpbmcgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQorU3RyaW5nIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQogewogICAgIHJl
dHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhl
bWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8p
Ci1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYU1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzQ2hyb21p
dW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFn
ZW50U3R5bGVTaGVldCkpOwogfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBw
ZWFyYW5jZSgpKTsKKyAgcmV0dXJuIHRydWU7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMgY2F1c2VzIFdlYktpdCB0byBk
cmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsK
IH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gQ29sb3IoMHhjOCwgMHhjOCwgMHhjOCk7CiB9CiAKLUNvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3I6OmJsYWNr
OwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAog
ewogICAgIHJldHVybiBDb2xvcigweDMyLCAweDMyLCAweDMyKTsKIH0KIAotQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2
KTsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Y2FyZXRCbGlua0ludGVy
dmFsKCkgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0lu
dGVydmFsKCkgY29uc3QKIHsKICAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBs
YXlvdXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCiAgICAgLy8gYSByYWNlIGNvbmRpdGlv
biBmb3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCiAgICAgaWYgKENocm9taXVt
QnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIFdl
IGNhY2hlIHRoZSBpbnRlcnZhbCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkgcmVxdWVz
dCBpdCBmcm9tIGd0ay4KLSAgICByZXR1cm4gMC41OworICAgIHJldHVybiBjYXJldEJsaW5rSW50
ZXJ2YWxJbnRlcm5hbCgpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3lz
dGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZmxvYXQgZm9u
dFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CiAKQEAgLTIxNywxMiArMjA3LDEyIEBAIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7CiB9
CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6Om1pbmltdW1NZW51TGlzdFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50Q2hlY2tib3goUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50Q2hlY2tib3go
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9uIikucmVsZWFzZVJl
ZigpOwogICAgIHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4Q2hlY2tib3hPZmYiKS5yZWxlYXNlUmVmKCk7CkBAIC0y
MzIsNyArMjIyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQpAQCAtMjQ3LDcgKzIzNyw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHN0YXRp
YyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJsaW51eFJhZGlvT24iKS5yZWxlYXNlUmVmKCk7CiAgICAgc3RhdGljIEltYWdlKiBjb25zdCB1
bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhSYWRpb09m
ZiIpLnJlbGVhc2VSZWYoKTsKQEAgLTI1Nyw3ICsyNDcsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ewogICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFzIGNoZWNrYm94LgogICAg
IHNldENoZWNrYm94U2l6ZShzdHlsZSk7CkBAIC0zMzIsMTggKzMyMiwyOCBAQCBzdGF0aWMgdm9p
ZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iagogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgYm90dG9tIC0g
MiwgcGFpbnQpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcGFpbnRCdXR0b25MaWtlKHRoaXMsIG8sIGksIHJl
Y3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFy
ZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUK
ICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9s
Rm9udFBpeGVsU2l6ZTsKQEAgLTM1MiwxNyArMzUyLDE3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRD
YW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJv
dW5kcyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgp
IHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQo
KSk7CiAKICAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVD
b250ZW50Qm94KCk7Ci0gICAgCisKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24g
c3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRz
LnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4ocGFyZW50Qm94
LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CiAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5k
cy5oZWlnaHQoKSk7CkBAIC0zNzcsMTQgKzM3NywxNCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBlbXB0
eVNpemUoMSwgMTEpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRo
KCksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdo
dCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNj
YWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQogICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxT
aXplOwpAQCAtMzk0LDE2ICszOTQsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVMKICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwogfQogCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5k
cyA9IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgpIHx8
ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7
CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVu
dEJveCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBz
dGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMu
c2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3gu
aGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKICAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRz
LmhlaWdodCgpKTsKQEAgLTQxMSwxMyArNDExLDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBv
CiAgICAgLy8gQ2VudGVyIHRoZSBkZWNvcmF0aW9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91
Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAogICAg
IC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlz
IHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCiAgICAgYm91bmRzLnNldFkocGFy
ZW50Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAv
IDIpOwotICAgIAorCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyIikucmVsZWFzZVJlZigpOwogICAg
IGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3VuZHMpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRv
biBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTQyOCw3ICs0
MjgsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlYwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICBBU1NFUlQoby0+cGFy
ZW50KCkpOwpAQCAtNDM2LDEwICs0MzYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY28KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgp
LT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJCb3gq
IHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8tPnBhcmVudCgpKTsKICAgICBJbnRSZWN0
IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7Ci0gICAg
CisKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0
cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC5o
ZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSk7CiAgICAgYm91bmRzLnNldFdpZHRoKHN0ZDo6bWlu
KHBhcmVudEJveC53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5kcy5oZWlnaHQoKSAqIGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU2l6ZSkpKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKIHsKICAgICBjb250ZXh0
LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFjaXR5KTsKIApA
QCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1l
ZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVO
QUJMRShWSURFTykKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVs
ZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZQogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwpAQCAtNTExLDEzICs1MTEsMTMg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBl
KSBjb25zdAogewogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3Nl
cnMuCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBjb25zdCBpbnQgcmlnaHQg
PSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKQEAgLTU0MCw1NyArNTQwLDg1IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAogewogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKIH0KIAog
Ly8gVXNlZCB0byBwYWludCBzdHlsZWQgbWVudWxpc3RzIChpLmUuIHdpdGggYSBub24tZGVmYXVs
dCBib3JkZXIpCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlzdEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludE1lbnVMaXN0
KG8sIGksIHJlY3QpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwg
TGVmdFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxl
LCBSaWdodFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5bGUs
IFRvcFBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoc3R5
bGUsIEJvdHRvbVBhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpi
dXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDM7
CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z1JpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJu
YWxQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIHJldHVybiAzOwogfQogCi1pbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdAoraW50
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25z
dAogewogICAgIHJldHVybiAxOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpi
dXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAogewogICAgIHJldHVy
biAxOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRl
cnZhbEludGVybmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmNhcmV0Qmxp
bmtJbnRlcnZhbCgpOworfQorCitSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OlJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eCgpCit7Cit9CisKK1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6flJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eCgpCit7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgc3RhdGljIGNv
bnN0IENvbG9yIGxpbnV4QnV0dG9uR3JheUNvbG9yKDB4ZmZkZGRkZGQpOworCisgICAgaWYgKGNz
c1ZhbHVlSWQgPT0gQ1NTVmFsdWVCdXR0b25mYWNlKQorICAgICAgICByZXR1cm4gbGludXhCdXR0
b25HcmF5Q29sb3I7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1
ZUlkKTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpCit7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRy
YURlZmF1bHRTdHlsZVNoZWV0KCkgKworICAgICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUxp
bnV4VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2Vu
dFN0eWxlU2hlZXQpKTsKK30KKwogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmNvbnRy
b2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKICAgICByZXR1
cm4gaXNFbmFibGVkKG8pOwpAQCAtNjE2LDcgKzY0NCw3IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3QKICAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7CiB9CiAKLWludCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6Om1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSwgaW50IHBhZGRpbmdUeXBlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5n
VHlwZSkgY29uc3QKIHsKICAgICAvLyBUaGlzIGludGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRp
b24gdG8gdGhlIHVzZXItc3VwcGxpZWQgcGFkZGluZy4KICAgICAvLyBNYXRjaGVzIHRoZSBGRiBi
ZWhhdmlvci4KQEAgLTYyNywxMSArNjU1LDExIEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6Om1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHBhCiAg
ICAgLy8gUmVuZGVyTWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0
aGUgcG9wdXAuCiAgICAgLy8gSWYgdGhlIE1lbnVMaXN0IGFjdHVhbGx5IGhhcyBhcHBlYXJhbmNl
ICJOb0FwcGVhcmFuY2UiLCB0aGVuIHRoYXQgbWVhbnMKICAgICAvLyB3ZSBkb24ndCBkcmF3IGEg
YnV0dG9uLCBzbyBkb24ndCByZXNlcnZlIHNwYWNlIGZvciBpdC4KLSAgICBjb25zdCBpbnQgYmFy
X3R5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBh
ZGRpbmc7Ci0gICAgaWYgKHBhZGRpbmdUeXBlID09IGJhcl90eXBlICYmIHN0eWxlLT5hcHBlYXJh
bmNlKCkgIT0gTm9Db250cm9sUGFydCkKKyAgICBjb25zdCBpbnQgYmFyVHlwZSA9IHN0eWxlLT5k
aXJlY3Rpb24oKSA9PSBMVFIgPyBSaWdodFBhZGRpbmcgOiBMZWZ0UGFkZGluZzsKKyAgICBpZiAo
cGFkZGluZ1R5cGUgPT0gYmFyVHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE5vQ29udHJv
bFBhcnQpCiAgICAgICAgIHBhZGRpbmcgKz0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkt
PnNjcm9sbGJhclRoaWNrbmVzcygpOwogCiAgICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLX0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCmluZGV4IDExMjM5ZDkuLjdjYmMxODYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCkBAIC0z
MiwxMCArMzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4IDogcHVibGljIFJlbmRlclRoZW1lIHsKKyAgICBjbGFzcyBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiAgICAgcHVibGljOgot
ICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKTsKLSAgICAgICAgflJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eCgpIHsgfQorICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpOwor
ICAgICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpOwogCiAgICAgICAgIHZp
cnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKICAgICAgICAgdmlydHVhbCBT
dHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
dGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVy
ZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNI
b3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgogICAgICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKQEAgLTU2LDExICs1NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3Q7CiAKKyAgICAgICAgLy8gVG8gY2hhbmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3Zl
cnJpZGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0
aGF0IHdlIG1heSBzaGFyZSBsYXlvdXQgdGVzdCBjb2RlIGFuIGludGVyY2VwdHMuCiAgICAgICAg
IHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAgICAgIC8v
IFN5c3RlbSBmb250cy4KICAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJ
ZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVt
Q29sb3IoaW50IGNzc1ZhbGlkSWQpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgaW50IG1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIApAQCAtNzQsOSArNzQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
IHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMTcsMjEgKzExNyw0
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVy
bmFsUGFkZGluZ1RvcCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5h
bFBhZGRpbmdCb3R0b20oKSBjb25zdDsKIAotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYg
dGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9y
IG5vdC4KLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OwotCiAgICAgICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5n
IGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0R1VJ
Rm9udCgpOworCisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6
ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKKyAgICAgICAgLy8gc2l6ZSBmb3Ig
dGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJp
bmspIGZvcgorICAgICAgICAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCisgICAgICAgIHN0YXRpYyBm
bG9hdCBkZWZhdWx0Rm9udFNpemU7CisKKyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlu
a0ludGVydmFsSW50ZXJuYWwoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGludCBt
ZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHlsZSosIGludCBwYWRkaW5nVHlwZSkgY29u
c3Q7CisgICAgICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOworICAgIH07CisKKyAgICBjbGFzcyBSZW5kZXJU
aGVtZUNocm9taXVtTGludXggOiBwdWJsaWMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7CisgICAgICAgIHZp
cnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOworCisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKworICAgICAgICB2aXJ0dWFsIENvbG9yIHN5
c3RlbUNvbG9yKGludCBjc3NWYWxpZElkKSBjb25zdDsKKworICAgICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFz
IGZvY3VzIG9yIG5vdC4KKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRz
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCiAgICAgICAgIC8vIExpc3QgQm94IHNlbGVj
dGlvbiBjb2xvcgogICAgICAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBh
ZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OwotICAgICAgICBib29s
IHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiwgSW1hZ2UqKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31299</attachid>
            <date>2009-06-15 11:31:02 -0700</date>
            <delta_ts>2009-06-17 00:20:56 -0700</delta_ts>
            <desc>Rebased patch to tip of tree for extracting RenderThemeChromiumSkia out of RenderThemeChromiumLinux, with Eric&apos;s landing fixes. Other patches to follow.</desc>
            <filename>ll</filename>
            <type>text/plain</type>
            <size>35294</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDUxMTViMC4uY2M5NTcwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNDUgQEAKKzIwMDktMDYtMTUgIEFsYmVydCBKLiBX
b25nICA8YWp3b25nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjYxNDgKKyAgICAgICAgRXh0cmFjdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSBvdXQgb2Yg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LiAgVGhpcworICAgICAgICBpcyBtb3N0bHkgYSBjb2Rl
IHNodWZmbGUuICBUaGUgbm9uLXN1ZmZsZSBjaGFuZ2VzIGFyZToKKyAgICAgICAgICAgMSkgQ3Jl
YXRpb24gb2YgYSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbC4KKyAgICAgICAgICAgMikgTW92
aW5nIG9mIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxl
cy4KKyAgICAgICAgICAgMykgQ2hhbmdpbmcgb2YgZGVmYXVsdEdVSUZvbnQgaW50byBhIHN0YXRp
YyBjbGFzcyBjb25zdGFudCBmcm9tIGEKKyAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uLiAg
QWxzbyB0aGUgdHlwZSBpcyBjaGFuZ2VkIHRvIFN0cmluZy4KKyAgICAgICAgICAgNCkgQ2hhbmdp
bmcgb2YgZGVmYXVsdEZvbnRTaXplIGludG8gYSBzdGF0aWMgY2xhc3MgY29uc3RhbnQgZnJvbSBh
CisgICAgICAgICAgICAgIHN0YXRpYyB2YXJpYWJsZSBpbiB0aGUgZmlsZSBzY29wZS4KKyAgICAg
ICAgICAgNSkgVGhlIHN0YXRpYyBzdXBwb3J0c0ZvY3VzIGZ1bmN0aW9uIHdhcyBjb2xsYXBzZWQg
aW50bworICAgICAgICAgICAgICBzdXBwb3J0c0ZvY3VzUmluZy4KKyAgICAgICAgICAgNikgU3Bs
aXQgdGhlIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQgaW50byBTa2lhIGFuZCBMaW51eCB2ZXJzaW9u
cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRHVUlGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlz
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1Jp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cElu
dGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0
b25JbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNo
cm9taXVtTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorCisyMDA5
LTA2LTE1ICBBbGJlcnQgSi4gV29uZyAgPGFqd29uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MTQ4CisgICAgICAgIEV4dHJhY3QgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEgb3V0IG9mIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eC4gIFRoaXMKKyAgICAg
ICAgaXMgbW9zdGx5IGEgY29kZSBzaHVmZmxlLiAgVGhlIG5vbi1zdWZmbGUgY2hhbmdlcyBhcmU6
CisgICAgICAgICAgIDEpIENyZWF0aW9uIG9mIGEgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwu
CisgICAgICAgICAgIDIpIE1vdmluZyBvZiBzb21lIGlubGluZSBmdW5jdGlvbnMgaW50byB0aGUg
aW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAgICAgICAgIDMpIENoYW5naW5nIG9mIGRlZmF1bHRH
VUlGb250IGludG8gYSBzdGF0aWMgY2xhc3MgY29uc3RhbnQgZnJvbSBhCisgICAgICAgICAgICAg
IHN0YXRpYyBmdW5jdGlvbi4gIEFsc28gdGhlIHR5cGUgaXMgY2hhbmdlZCB0byBTdHJpbmcuCisg
ICAgICAgICAgIDQpIENoYW5naW5nIG9mIGRlZmF1bHRGb250U2l6ZSBpbnRvIGEgc3RhdGljIGNs
YXNzIGNvbnN0YW50IGZyb20gYQorICAgICAgICAgICAgICBzdGF0aWMgdmFyaWFibGUgaW4gdGhl
IGZpbGUgc2NvcGUuCisgICAgICAgICAgIDUpIFRoZSBzdGF0aWMgc3VwcG9ydHNGb2N1cyBmdW5j
dGlvbiB3YXMgY29sbGFwc2VkIGludG8KKyAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c1Jpbmcu
CisgICAgICAgICAgIDYpIFNwbGl0IG91dCBleHRyYURlZmF1bHRTdHlsZVNoZWV0IHRvIExpbnV4
IGFuZCBTa2lhIHZlcnNpb25zLgorCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYVF1aXJrc1N0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJs
aW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlh
TXV0ZUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRv
bkludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgorCiAyMDA5
LTA2LTE1ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBhbmQgZG9uZSB3aXRoIFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA4MDQ5NDAz
Li43NDQ1YTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAKQEAgLTUyLDExICs1Miw2IEBAIGVudW0gUGFkZGluZ1R5cGUgewogCiBzdGF0aWMg
Y29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRdID0geyAxLCA0LCAxLCA0
IH07CiAKLS8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0
aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKLS8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBh
bmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLS8vIGZvcm0gY29u
dHJvbCBmb250cy4KLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxNi4wOwot
CiAvLyBUaGUgYmFja2dyb3VuZCBmb3IgdGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQg
YmUgYSA2MCUgb3BhcXVlIGJsYWNrIHJlY3RhbmdsZS4gVGhpcwogLy8gbWF0Y2hlcyB0aGUgVUkg
bW9ja3VwcyBmb3IgdGhlIGRlZmF1bHQgVUkgdGhlbWUuCiBzdGF0aWMgY29uc3QgZmxvYXQgZGVm
YXVsdE1lZGlhQ29udHJvbE9wYWNpdHkgPSAwLjZmOwpAQCAtNzEsMTIgKzY2LDYgQEAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gOTsKIHN0
YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMw
Owogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0
aCA9IDE4OwogCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UpCi17Ci0gICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmdz
IGZvciB1cy4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldFNpemVJZkF1
dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChz
dHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQpAQCAtODUsMjAgKzc0LDYgQEAgc3Rh
dGljIHZvaWQgc2V0U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUm
IHNpemUpCiAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7CiB9CiAKLS8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMgYSBm
b250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNv
bnRyb2xzLgotLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRT
dG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwg
RGxnKQotLy8gLVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRoZSBv
bmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNv
ZGluZ3MuCi0vLyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGlu
Y29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwKLS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9y
IG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KLXN0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0R1VJRm9u
dCgpCi17Ci0gICAgcmV0dXJuICJBcmlhbCI7Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiAvLyBB
dHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJu
cyBOVUxMIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCiBzdGF0aWMgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCkBAIC0xMTMsODYgKzg4LDEwMiBAQCBzdGF0
aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCiB9CiAj
ZW5kaWYKIAorLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUgdXNlcyBhIGZvbnQg
YmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJv
bHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2Nr
T2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcp
CisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhNRTogVGhlIG9ubHkg
Y2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5n
cy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3Jy
ZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93
IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgU3RyaW5nJiBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6ZGVmYXVsdEdVSUZvbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBm
b250ZmFjZSwgKCJBcmlhbCIpKTsKKyAgICByZXR1cm4gZm9udEZhY2U7Cit9CisKK2Zsb2F0IFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpkZWZhdWx0Rm9udFNpemUgPSAxNi4wOworCiBSZW5kZXJU
aGVtZSogdGhlbWUoKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZUNocm9taXVtTGludXggdGhl
bWU7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAotUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpS
ZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQorUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhKCkKIHsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKK1JlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjp+UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQogewotICAgIHN0YXRpYyBjb25zdCBD
b2xvciBsaW51eEJ1dHRvbkdyYXlDb2xvcigweGZmZGRkZGRkKTsKLQotICAgIGlmIChjc3NWYWx1
ZUlkID09IENTU1ZhbHVlQnV0dG9uZmFjZSkKLSAgICAgICAgcmV0dXJuIGxpbnV4QnV0dG9uR3Jh
eUNvbG9yOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7
CiB9CiAKIC8vIFVzZSB0aGUgV2luZG93cyBzdHlsZSBzaGVldHMgdG8gbWF0Y2ggdGhlaXIgbWV0
cmljcy4KLVN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhRGVmYXVsdFN0eWxl
U2hlZXQoKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCkKIHsKLSAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpICsKLSAgICAgICAgICAgU3Ry
aW5nKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZUNo
cm9taXVtTGludXhVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgcmV0dXJuIFN0cmluZyh0aGVt
ZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NT
dHlsZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFRdWlya3NT
dHlsZVNoZWV0KCkKIHsKICAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luUXVpcmtzVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCkpOwog
fQogCiAjaWYgRU5BQkxFKFZJREVPKQotU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogewogICAgIHJldHVybiBTdHJp
bmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KICNlbmRpZgogCi1ib29s
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9y
dHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgIHJldHVybiB0cnVl
OworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0ZvY3VzUmluZyhj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9j
dXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgLy8gVGhpcyBjYXVzZXMgV2ViS2l0IHRvIGRy
YXcgdGhlIGZvY3VzIHJpbmdzIGZvciB1cy4KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNvbG9y
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29s
b3IoMHgxZSwgMHg5MCwgMHhmZik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yKDB4YzgsIDB4YzgsIDB4Yzgp
OwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIENvbG9yOjpibGFjazsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK0Nv
bG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgz
Mik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGxhdGZvcm1UZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Q29sb3IoMHhmZiwgMHhmZiwgMHg5Nik7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgLy8gRGlzYWJsZSB0
aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMgaXQgaW50cm9kdWNlcwog
ICAgIC8vIGEgcmFjZSBjb25kaXRpb24gZm9yIHRoZSBwaXhlbCB0ZXN0cy4gaHR0cDovL2IvMTE5
ODQ0MAogICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAvLyBXZSBjYWNoZSB0aGUgaW50ZXJ2YWwgc28gd2UgZG9uJ3QgaGF2
ZSB0byByZXBlYXRlZGx5IHJlcXVlc3QgaXQgZnJvbSBndGsuCi0gICAgcmV0dXJuIDAuNTsKKyAg
ICByZXR1cm4gY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIGZsb2F0IGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwogCkBAIC0yMTcs
MTIgKzIwOCwxMiBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3lzdGVtRm9udChp
bnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJdGFsaWMoZmFsc2UpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpt
aW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgc3RhdGljIEltYWdl
KiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4
Q2hlY2tib3hPbiIpLnJlbGVhc2VSZWYoKTsKICAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hl
Y2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eENoZWNrYm94T2Zm
IikucmVsZWFzZVJlZigpOwpAQCAtMjMyLDcgKzIyMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKQEAgLTI0Nyw3
ICsyMzgsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2V0Q2hlY2tib3hTaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzZXRTaXplSWZBdXRvKHN0eWxlLCBzaXpl
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IGNoZWNrZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhSYWRpb09uIikucmVsZWFzZVJlZigpOwogICAg
IHN0YXRpYyBJbWFnZSogY29uc3QgdW5jaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoImxpbnV4UmFkaW9PZmYiKS5yZWxlYXNlUmVmKCk7CkBAIC0yNTcsNyArMjQ4LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBVc2Ugc2FtZSBzaXppbmcgZm9yIHJhZGlv
IGJveCBhcyBjaGVja2JveC4KICAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwpAQCAtMzMyLDE4
ICszMjMsMjggQEAgc3RhdGljIHZvaWQgcGFpbnRCdXR0b25MaWtlKFJlbmRlclRoZW1lKiB0aGVt
ZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmoKICAgICBjYW52YXMtPmRyYXdQb2lu
dChyaWdodCAtIDIsIGJvdHRvbSAtIDIsIHBhaW50KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIHBhaW50QnV0
dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
YWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxk
KG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBi
YXNlZCBvbiB0aGUgZm9udCBzaXplCiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRT
aXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CkBAIC0zNTIsMTcgKzM1MywxNyBA
QCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdAogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNh
bmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7
CiAgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0g
dG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwogCiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJl
bnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBh
cmVudCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LndpZHRo
KCksIHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSkpOwogICAg
IGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0KCkpOwpAQCAtMzc3LDE0ICszNzgsMTQgQEAg
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRo
ZSBmb250IHNpemUKICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRl
ZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKQEAgLTM5NCwxNiArMzk1LDE2IEBAIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoQ1NTU3R5bGVTCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6
ZSwgRml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
CiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAg
ICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKKwogICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goby0+cGFyZW50KCkpOwogICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVu
ZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLSAgICAKKwogICAgIC8vIE1ha2Ugc3VyZSB0
aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFy
ZW50J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgo
KSwgc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CiAgICAg
Ym91bmRzLnNldFdpZHRoKGJvdW5kcy5oZWlnaHQoKSk7CkBAIC00MTEsMTMgKzQxMiwxMyBAQCBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKFJlbmRlck9iamVjdCogbwogICAgIC8vIENlbnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0
aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9m
Zi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0
b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0
LgogICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0g
Ym91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICAKKwogICAgIHN0YXRpYyBJbWFnZSogbWFn
bmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmll
ciIpLnJlbGVhc2VSZWYoKTsKICAgICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFn
ZSwgYm91bmRzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCiAgICAg
ZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQ
aXhlbFNpemU7CkBAIC00MjgsNyArNDI5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWMKICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWlnaHQsIEZpeGVkKSk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9
IHI7CiAgICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKQEAgLTQzNiwxMCArNDM3LDEwIEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW8tPnBh
cmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5w
YXJlbnQoKSk7CiAgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29s
dXRlQ29udGVudEJveCgpOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVj
b3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94CiAgICAgYm91bmRzLnNldEhlaWdo
dChzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpOwogICAgIGJv
dW5kcy5zZXRXaWR0aChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50
Pihib3VuZHMuaGVpZ2h0KCkgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGgg
LyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKSk7CkBAIC00NTMsNyAr
NDU0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1h
Z2UpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJu
YWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSog
aW1hZ2UpCiB7CiAgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihkZWZhdWx0TWVk
aWFDb250cm9sT3BhY2l0eSk7CiAKQEAgLTQ3OSw3ICs0ODAsNyBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7CkBAIC00OTUsNyAr
NDk2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGUKICNlbmRpZgogfQogCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgp
KTsKQEAgLTUxMSwxMyArNTEyLDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlCiAjZW5kaWYK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdE1lbnVMaXN0U3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6
RWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1l
bnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKIHsKICAgICAvLyBIZWlnaHQgaXMgbG9ja2Vk
IHRvIGF1dG8gb24gYWxsIGJyb3dzZXJzLgogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBTa0NhbnZh
cyogY29uc3QgY2FudmFzID0gaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7
CiAgICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CkBAIC01NDAs
NTcgKzU0MSw4NSBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKICAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVj
dG9yLCBzdHlsZSwgZSk7CiB9CiAKIC8vIFVzZWQgdG8gcGFpbnQgc3R5bGVkIG1lbnVsaXN0cyAo
aS5lLiB3aXRoIGEgbm9uLWRlZmF1bHQgYm9yZGVyKQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TGludXg6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBpLCByZWN0KTsKIH0KIAotaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbWVudUxpc3RJ
bnRlcm5hbFBhZGRpbmcoc3R5bGUsIExlZnRQYWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBtZW51TGlz
dEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFk
ZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVMaXN0
SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsKIH0KIAotaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFk
ZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVM
aXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21QYWRkaW5nKTsKIH0KIAotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0xlZnQoKSBj
b25zdAogewogICAgIHJldHVybiAzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
OjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gMzsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50ZXJuYWxQ
YWRkaW5nVG9wKCkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50
ZXJuYWxQYWRkaW5nVG9wKCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKIH0KIAotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3QK
K2ludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9t
KCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpjYXJldEJsaW5rSW50ZXJ2YWwoKTsKK30KKworUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQoreworfQorCitSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6On5SZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQoreworfQorCitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBj
b25zdAoreworICAgIHN0YXRpYyBjb25zdCBDb2xvciBsaW51eEJ1dHRvbkdyYXlDb2xvcigweGZm
ZGRkZGRkKTsKKworICAgIGlmIChjc3NWYWx1ZUlkID09IENTU1ZhbHVlQnV0dG9uZmFjZSkKKyAg
ICAgICAgcmV0dXJuIGxpbnV4QnV0dG9uR3JheUNvbG9yOworICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQoreworICAgIHJldHVybiBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpICsKKyAgICAgICAgICAg
U3RyaW5nKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVt
ZUNocm9taXVtTGludXhVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Cit9CisKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKQEAgLTYxNiw3ICs2NDUsNyBA
QCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4
MzIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFs
UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKK2ludCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5
bGUqIHN0eWxlLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBpbnRlcm5h
bCBwYWRkaW5nIGlzIGluIGFkZGl0aW9uIHRvIHRoZSB1c2VyLXN1cHBsaWVkIHBhZGRpbmcuCiAg
ICAgLy8gTWF0Y2hlcyB0aGUgRkYgYmVoYXZpb3IuCkBAIC02MjcsMTEgKzY1NiwxMSBAQCBpbnQg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJT
dHlsZSogc3R5bGUsIGludCBwYQogICAgIC8vIFJlbmRlck1lbnVMaXN0IHRvIGxheSBvdXQgdGhl
IGluZGl2aWR1YWwgaXRlbXMgaW4gdGhlIHBvcHVwLgogICAgIC8vIElmIHRoZSBNZW51TGlzdCBh
Y3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9BcHBlYXJhbmNlIiwgdGhlbiB0aGF0IG1lYW5zCiAg
ICAgLy8gd2UgZG9uJ3QgZHJhdyBhIGJ1dHRvbiwgc28gZG9uJ3QgcmVzZXJ2ZSBzcGFjZSBmb3Ig
aXQuCi0gICAgY29uc3QgaW50IGJhcl90eXBlID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/
IFJpZ2h0UGFkZGluZyA6IExlZnRQYWRkaW5nOwotICAgIGlmIChwYWRkaW5nVHlwZSA9PSBiYXJf
dHlwZSAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpCisgICAgY29uc3Qg
aW50IGJhclR5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDog
TGVmdFBhZGRpbmc7CisgICAgaWYgKHBhZGRpbmdUeXBlID09IGJhclR5cGUgJiYgc3R5bGUtPmFw
cGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICBwYWRkaW5nICs9IFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKIAogICAgIHJldHVy
biBwYWRkaW5nOwogfQogCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaApp
bmRleCAxMTIzOWQ5Li43Y2JjMTg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguaApAQCAtMzIsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCA6IHB1YmxpYyBSZW5kZXJU
aGVtZSB7CisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgOiBwdWJsaWMgUmVuZGVy
VGhlbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCk7
Ci0gICAgICAgIH5SZW5kZXJUaGVtZUNocm9taXVtTGludXgoKSB7IH0KKyAgICAgICAgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEoKTsKKyAgICAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEoKTsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0
KCk7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVldCgpOwpAQCAt
NDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgICAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91
dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNI
b3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAog
ICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0
aGUgZm9jdXMgcmluZy4KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNv
bnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC01NiwxMSArNTYsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogCisgICAgICAgIC8vIFRvIGNoYW5nZSB0
aGUgYmxpbmsgaW50ZXJ2YWwsIG92ZXJyaWRlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsIGlu
c3RlYWQgb2YgdGhpcyBvbmUgc28gdGhhdCB3ZSBtYXkgc2hhcmUgbGF5b3V0IHRlc3QgY29kZSBh
biBpbnRlcmNlcHRzLgogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwo
KSBjb25zdDsKIAogICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWxpZElkKSBjb25zdDsKIAogICAg
ICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7
CiAKQEAgLTc0LDkgKzc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiBwYWludFRl
eHRGaWVsZChvLCBpLCByKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwpAQCAtMTE3LDIxICsxMTcsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3Q7CiAKLSAgICAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQogICAgICAgICAvLyBB
IGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRl
ZCBhdCBhbGwuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RhdGljIGNv
bnN0IFN0cmluZyYgZGVmYXVsdEdVSUZvbnQoKTsKKworICAgICAgICAvLyBUaGUgZGVmYXVsdCB2
YXJpYWJsZS13aWR0aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250
CisgICAgICAgIC8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNp
emUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKKyAgICAgICAgLy8gZm9ybSBjb250cm9sIGZv
bnRzLgorICAgICAgICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOworCisgICAgICAgIHZp
cnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUq
LCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OworICAgICAgICBib29sIHBhaW50TWVkaWFCdXR0b25J
bnRlcm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgSW1hZ2UqKTsKKyAgICB9
OworCisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IDogcHVibGljIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eCgpOworICAgICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtTGludXgoKTsK
KworICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisKKyAg
ICAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsaWRJZCkgY29uc3Q7CisK
KyAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRp
bnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCisgICAgICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKwogICAg
ICAgICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKICAgICAgICAgdmlydHVhbCBDb2xvciBh
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
aW50IG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBl
KSBjb25zdDsKLSAgICAgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYsIEltYWdlKik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="15991"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31302</attachid>
            <date>2009-06-15 12:42:05 -0700</date>
            <delta_ts>2009-06-17 00:22:34 -0700</delta_ts>
            <desc>Move RenderThemeChromiumSkia into its own file.  (Rebased to tip of tree after patch 31299)</desc>
            <filename>skia_move.patch</filename>
            <type>text/plain</type>
            <size>63485</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2M5NTcwOC4uYmQxM2NiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTMsNiArMyw3NCBAQAogICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjYxNDgKKyAgICAgICAgTW92ZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSBpbnRvIGl0
cyBvd24gZmlsZS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENI
QU5HRUQKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNpemVJZkF1dG8pOgorICAgICAgICAoV2Vi
Q29yZTo6bWVkaWFFbGVtZW50UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpkZWZhdWx0R1VJRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6On5SZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
ZXh0cmFRdWlya3NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzdXBwb3J0c0ZvY3VzUmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwbGF0Zm9ybVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6Y2FyZXRCbGlua0ludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpicmlnaHRlbkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uTGlr
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50VGV4
dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWlu
dFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpw
YWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZWRpYUJ1dHRvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRk
aW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0
b25JbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNDb250cm9sVGludHMpOgor
CisyMDA5LTA2LTE1ICBBbGJlcnQgSi4gV29uZyAgPGFqd29uZ0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MTQ4CiAgICAgICAgIEV4dHJhY3QgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEgb3V0IG9mIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eC4gIFRoaXMK
ICAgICAgICAgaXMgbW9zdGx5IGEgY29kZSBzaHVmZmxlLiAgVGhlIG5vbi1zdWZmbGUgY2hhbmdl
cyBhcmU6CiAgICAgICAgICAgIDEpIENyZWF0aW9uIG9mIGEgY2FyZXRCbGlua0ludGVydmFsSW50
ZXJuYWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TGludXguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNw
cAppbmRleCA3NDQ1YTkwLi41MzE4OTg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5jcHAKQEAgLTI0LDU3OSArMjQsMTggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtTGludXguaCIKIAotI2luY2x1
ZGUgIkNocm9taXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgot
I2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAK
LSNpbmNsdWRlICJTa1NoYWRlci5oIgotI2luY2x1ZGUgIlNrR3JhZGllbnRTaGFkZXIuaCIKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIFBhZGRpbmdUeXBlIHsKLSAgICBUb3BQYWRkaW5n
LAotICAgIFJpZ2h0UGFkZGluZywKLSAgICBCb3R0b21QYWRkaW5nLAotICAgIExlZnRQYWRkaW5n
Ci19OwotCi1zdGF0aWMgY29uc3QgaW50IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nWzRd
ID0geyAxLCA0LCAxLCA0IH07Ci0KLS8vIFRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgbWVkaWEgcGxh
eWVyIGNvbnRyb2xzIHNob3VsZCBiZSBhIDYwJSBvcGFxdWUgYmxhY2sgcmVjdGFuZ2xlLiBUaGlz
Ci0vLyBtYXRjaGVzIHRoZSBVSSBtb2NrdXBzIGZvciB0aGUgZGVmYXVsdCBVSSB0aGVtZS4KLXN0
YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0TWVkaWFDb250cm9sT3BhY2l0eSA9IDAuNmY7Ci0KLS8v
IFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi4KLXN0YXRpYyBjb25zdCBmbG9hdCBk
ZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemUgPSAxMzsKLXN0YXRpYyBjb25zdCBmbG9hdCBkZWZh
dWx0Q2FuY2VsQnV0dG9uU2l6ZSA9IDk7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluQ2FuY2VsQnV0
dG9uU2l6ZSA9IDU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4Q2FuY2VsQnV0dG9uU2l6ZSA9IDIx
Owotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU2l6ZSA9IDMwOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25XaWR0aCA9IDE4OwotCi1zdGF0aWMgdm9pZCBzZXRTaXplSWZBdXRvKFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4
ZWQpKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQgdG8gcmV0cmlldmUgYSBI
VE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5VTEwgaWYgb25lIGNhbm5vdCBi
ZSBmb3VuZC4KLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQoTm9k
ZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIE5vZGUq
IG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAgIGlmICghbWVkaWFO
b2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYmICFt
ZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFO
b2RlKTsKLX0KLSNlbmRpZgotCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8vIC1JRSB1
c2VzIGEgZm9udCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3Ig
Zm9ybSBjb250cm9scy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2Fs
bHMgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1cm5zIE1T
IFNoZWxsIERsZykKLS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8vIEZJWE1F
OiBUaGUgb25seSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFO
U0kgZW5jb2RpbmdzLgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJl
bmRlciBpbmNvcnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAxNXB4KS4g
U28sIGZvciBub3cgd2UganVzdCB1c2UgQXJpYWwuCi1jb25zdCBTdHJpbmcmIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGZvbnRmYWNlLCAoIkFyaWFsIikpOwotICAgIHJldHVybiBmb250RmFjZTsKLX0K
LQotZmxvYXQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRGb250U2l6ZSA9IDE2LjA7
Ci0KIFJlbmRlclRoZW1lKiB0aGVtZSgpCiB7CiAgICAgc3RhdGljIFJlbmRlclRoZW1lQ2hyb21p
dW1MaW51eCB0aGVtZTsKICAgICByZXR1cm4gJnRoZW1lOwogfQogCi1SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQotewotfQotCi1SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6flJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKCkKLXsKLX0KLQotLy8gVXNlIHRo
ZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVpciBtZXRyaWNzLgotU3RyaW5nIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2lu
VXNlckFnZW50U3R5bGVTaGVldCkpOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZVdp
blF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1VzZXJBZ2Vu
dFN0eWxlU2hlZXQpKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVN0cmluZyBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzQ2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXpl
b2YobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCkpOwotfQotI2VuZGlm
Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN1cHBvcnRzSG92ZXIoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIC8vIFRoaXMgY2F1c2VzIFdlYktpdCB0byBkcmF3IHRoZSBm
b2N1cyByaW5ncyBmb3IgdXMuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1Db2xvciBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigweDFlLCAweDkwLCAweGZmKTsKLX0KLQotQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigweGM4LCAweGM4LCAweGM4
KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3I6OmJsYWNr
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKDB4MzIs
IDB4MzIsIDB4MzIpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZv
cm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigw
eGZmLCAweGZmLCAweDk2KTsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpj
YXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAotewotICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5n
IGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0IGludHJvZHVjZXMKLSAgICAvLyBhIHJh
Y2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKLSAgICBp
ZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgZmxvYXQgZm9udFNpemUgPSBkZWZh
dWx0Rm9udFNpemU7Ci0KLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRNaW5pQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgot
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgotICAgICAgICAvLyBXaHkgMiBwb2ludHMg
c21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKLSAg
ICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVs
dCB0aGF0IHdlIHVzZSBvbgotICAgICAgICAvLyBXaW5kb3dzLgotICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOwotICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwotICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBv
aW50c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250
KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRDaGVj
a2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZElt
YWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eENoZWNrYm94T24iKS5yZWxl
YXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBjb25zdCB1bmNoZWNrZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibGludXhDaGVja2JveE9mZiIpLnJlbGVhc2VSZWYoKTsK
LQotICAgIEltYWdlKiBpbWFnZSA9IHRoaXMtPmlzQ2hlY2tlZChvKSA/IGNoZWNrZWRJbWFnZSA6
IHVuY2hlY2tlZEltYWdlOwotICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklY
TUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQg
bmVjZXNzYXJ5Ci0gICAgLy8gZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZveC4gIEF0IGRpZmZl
cmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywKLSAgICAvLyBxdWVyeWluZyB0aGUgdGhlbWUg
Z2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIGhpZ2hlcgotICAg
IC8vIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90
aGVyIHRoYW4gOTYsIHdlCi0gICAgLy8gY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncyBtZXRyaWNz
LgotICAgIGNvbnN0IEludFNpemUgc2l6ZSgxMywgMTMpOwotICAgIHNldFNpemVJZkF1dG8oc3R5
bGUsIHNpemUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFJhZGlv
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgc3RhdGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2Ug
PSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImxpbnV4UmFkaW9PbiIpLnJlbGVhc2VSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNvbnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJsaW51eFJhZGlvT2ZmIikucmVsZWFzZVJlZigpOwotCi0gICAgSW1h
Z2UqIGltYWdlID0gdGhpcy0+aXNDaGVja2VkKG8pID8gY2hlY2tlZEltYWdlIDogdW5jaGVja2Vk
SW1hZ2U7Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBVc2Ugc2FtZSBzaXppbmcgZm9y
IHJhZGlvIGJveCBhcyBjaGVja2JveC4KLSAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwotfQot
Ci1zdGF0aWMgU2tDb2xvciBicmlnaHRlbkNvbG9yKGRvdWJsZSBoLCBkb3VibGUgcywgZG91Ymxl
IGwsIGZsb2F0IGJyaWdodGVuQW1vdW50KQotewotICAgIGwgKz0gYnJpZ2h0ZW5BbW91bnQ7Ci0g
ICAgaWYgKGwgPiAxLjApCi0gICAgICAgIGwgPSAxLjA7Ci0gICAgaWYgKGwgPCAwLjApCi0gICAg
ICAgIGwgPSAwLjA7Ci0KLSAgICByZXR1cm4gbWFrZVJHQkFGcm9tSFNMQShoLCBzLCBsLCAxLjAp
OwotfQotCi1zdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBTa1BhaW50IHBhaW50OwotICAgIFNr
UmVjdCBza3JlY3Q7Ci0gICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRo
KCk7Ci0gICAgY29uc3QgaW50IGJvdHRvbSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKLSAg
ICBTa0NvbG9yIGJhc2VDb2xvciA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4
ZGQpOwotICAgIGlmIChvLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpCi0gICAgICAgIGJhc2VD
b2xvciA9IG8tPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLnJnYigpOwotICAgIGRvdWJsZSBo
LCBzLCBsOwotICAgIENvbG9yKGJhc2VDb2xvcikuZ2V0SFNMKGgsIHMsIGwpOwotICAgIC8vIE91
ciBzdGFuZGFyZCBncmFkaWVudCBpcyBmcm9tIDB4ZGQgdG8gMHhmOC4gVGhpcyBpcyB0aGUgYW1v
dW50IG9mCi0gICAgLy8gaW5jcmVhc2VkIGx1bWluYW5jZSBiZXR3ZWVuIHRob3NlIHZhbHVlcy4K
LSAgICBTa0NvbG9yIGxpZ2h0Q29sb3IoYnJpZ2h0ZW5Db2xvcihoLCBzLCBsLCAwLjEwNSkpOwot
Ci0gICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRyYXdpbmcg
YSBzaW5nbGUsIHNvbGlkIGNvbG9yCi0gICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwgcmVjdC5o
ZWlnaHQoKSA8IDUpIHsKLSAgICAgICAgcGFpbnQuc2V0Q29sb3IoYmFzZUNvbG9yKTsKLSAgICAg
ICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJpZ2h0LCBib3R0b20pOwotICAgICAg
ICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgY29uc3QgaW50IGJvcmRlckFscGhhID0gdGhlbWUtPmlzSG92ZXJlZChvKSA/IDB4
ODAgOiAweDU1OwotICAgIHBhaW50LnNldEFSR0IoYm9yZGVyQWxwaGEsIDAsIDAsIDApOwotICAg
IGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCByZWN0LnkoKSwgcmlnaHQgLSAxLCByZWN0
LnkoKSwgcGFpbnQpOwotICAgIGNhbnZhcy0+ZHJhd0xpbmUocmlnaHQgLSAxLCByZWN0LnkoKSAr
IDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQpOwotICAgIGNhbnZhcy0+ZHJhd0xpbmUo
cmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdodCAtIDEsIGJvdHRvbSAtIDEsIHBhaW50KTsK
LSAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3QueCgpLCBi
b3R0b20gLSAxLCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOwot
ICAgIFNrUG9pbnQgcFsyXTsKLSAgICBjb25zdCBpbnQgbGlnaHRFbmQgPSB0aGVtZS0+aXNQcmVz
c2VkKG8pID8gMSA6IDA7Ci0gICAgY29uc3QgaW50IGRhcmtFbmQgPSAhbGlnaHRFbmQ7Ci0gICAg
cFtsaWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKHJl
Y3QueSgpKSk7Ci0gICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSksIFNr
SW50VG9TY2FsYXIoYm90dG9tIC0gMSkpOwotICAgIFNrQ29sb3IgY29sb3JzWzJdOwotICAgIGNv
bG9yc1swXSA9IGxpZ2h0Q29sb3I7Ci0gICAgY29sb3JzWzFdID0gYmFzZUNvbG9yOwotCi0gICAg
U2tTaGFkZXIqIHNoYWRlciA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZUxpbmVhcigKLSAgICAg
ICAgcCwgY29sb3JzLCBOVUxMLCAyLCBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlLCBOVUxMKTsK
LSAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgcGFpbnQuc2V0
U2hhZGVyKHNoYWRlcik7Ci0gICAgc2hhZGVyLT51bnJlZigpOwotCi0gICAgc2tyZWN0LnNldChy
ZWN0LngoKSArIDEsIHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKLSAgICBj
YW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQpOwotCi0gICAgcGFpbnQuc2V0U2hhZGVyKE5V
TEwpOwotICAgIHBhaW50LnNldENvbG9yKGJyaWdodGVuQ29sb3IoaCwgcywgbCwgLTAuMDU4OCkp
OwotICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCBwYWlu
dCk7Ci0gICAgY2FudmFzLT5kcmF3UG9pbnQocmlnaHQgLSAyLCByZWN0LnkoKSArIDEsIHBhaW50
KTsKLSAgICBjYW52YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIGJvdHRvbSAtIDIsIHBhaW50
KTsKLSAgICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIsIGJvdHRvbSAtIDIsIHBhaW50KTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBwYWludEJ1dHRvbkxpa2UodGhpcywgbywgaSwgcmVjdCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNjYWxlIHRoZSBidXR0
b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5
bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0gICAgaW50IGNh
bmNlbEJ1dHRvblNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRv
blNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0
dG9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBG
aXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgSW50UmVjdCBib3VuZHMgPSByOwot
ICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFy
ZW50KCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRlckJveCog
cGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwotCi0gICAgSW50UmVj
dCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBm
aXQgaW4gaXRzIHBhcmVudCdzIGJveAotICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFy
ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdo
dCgpKSkpOwotICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0KCkpOwotCi0gICAgLy8g
Q2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQg
aGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8gYmUgb25lIHBp
eGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9v
ayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsg
KHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5oZWlnaHQoKSArIDEpIC8gMik7Ci0KLSAgICBz
dGF0aWMgSW1hZ2UqIGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJz
ZWFyY2hDYW5jZWwiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBjYW5jZWxQcmVz
c2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbFByZXNz
ZWQiKS5yZWxlYXNlUmVmKCk7Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8p
ID8gY2FuY2VsUHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsIGJvdW5kcyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7Ci0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0K
LXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKLXsKLSAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9u
IHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAv
IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKLSAgICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxy
b3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSks
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFn
bmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZp
ZXJTaXplLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRSZWN0
IGJvdW5kcyA9IHI7Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVu
dCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7
Ci0gICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVu
dEJveCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBz
cXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAgICBib3VuZHMuc2V0SGVp
Z2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0
KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdo
dCgpKTsKLQotICAgIC8vIENlbnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQg
dXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdp
bGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxk
LiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgotICAgIGJvdW5kcy5z
ZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgp
ICsgMSkgLyAyKTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmllciIpLnJlbGVhc2VSZWYoKTsKLSAg
ICBpLmNvbnRleHQtPmRyYXdJbWFnZShtYWduaWZpZXJJbWFnZSwgYm91bmRzKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBi
YXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRT
aXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0gICAgaW50IG1hZ25pZmllckhl
aWdodCA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZv
bnRTY2FsZSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
eFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7Ci0gICAgaW50IG1hZ25pZmllcldp
ZHRoID0gbHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyV2lkdGgsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIEludFJlY3QgYm91bmRzID0gcjsKLSAgICBBU1NFUlQoby0+
cGFyZW50KCkpOwotICAgIGlmICghby0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRl
ckJveChvLT5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJC
b3gtPmFic29sdXRlQ29udGVudEJveCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQg
ZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Ci0gICAgYm91bmRzLnNldEhl
aWdodChzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpOwotICAg
IGJvdW5kcy5zZXRXaWR0aChzdGQ6Om1pbihwYXJlbnRCb3gud2lkdGgoKSwgc3RhdGljX2Nhc3Q8
aW50Pihib3VuZHMuaGVpZ2h0KCkgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lk
dGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKSk7Ci0KLSAgICAv
LyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgotICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkg
KyAocGFyZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLQotICAg
IHN0YXRpYyBJbWFnZSogbWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoInNlYXJjaE1hZ25pZmllclJlc3VsdHMiKS5yZWxlYXNlUmVmKCk7Ci0gICAgaS5jb250ZXh0
LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2UsIGJvdW5kcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJu
YWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSog
aW1hZ2UpCi17Ci0gICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihkZWZhdWx0TWVk
aWFDb250cm9sT3BhY2l0eSk7Ci0KLSAgICAvLyBEcmF3IGJhY2tncm91bmQuCi0gICAgQ29sb3Ig
b2xkRmlsbCA9IGNvbnRleHQtPmZpbGxDb2xvcigpOwotICAgIENvbG9yIG9sZFN0cm9rZSA9IGNv
bnRleHQtPnN0cm9rZUNvbG9yKCk7Ci0KLSAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwotICAg
IGNvbnRleHQtPmRyYXdSZWN0KHJlY3QpOwotCi0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG9s
ZEZpbGwpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZSk7Ci0KLSAgICAv
LyBDcmVhdGUgYSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0IGlzIGNl
bnRlcmVkIGluIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQgZG93bi4K
LSAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7Ci0gICAgaW1hZ2VSZWN0LnNl
dFkocmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEpIC8gMik7
Ci0gICAgaW1hZ2VSZWN0LnNldFgocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1hZ2UtPndp
ZHRoKCkgKyAxKSAvIDIpOwotCi0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJl
Y3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwotICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVk
aWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3Rh
dGljIEltYWdlKiBtZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRp
YVBhdXNlIikucmVsZWFzZVJlZigpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRl
cm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1l
ZGlhUGxheSA6IG1lZGlhUGF1c2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3Rh
dGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlh
U291bmRGdWxsIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogc291bmROb25lID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kTm9uZSIpLnJlbGVhc2VSZWYo
KTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRl
eHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IHNvdW5kTm9uZTogc291bmRGdWxsKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKLXsKLSAg
ICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8gb24gYWxsIGJyb3dzZXJzLgotICAgIHN0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKTsKLSAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJlY3Qu
d2lkdGgoKTsKLSAgICBjb25zdCBpbnQgbWlkZGxlID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
IC8gMjsKLQotICAgIHBhaW50QnV0dG9uTGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKLQotICAgIFNr
UGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0QVJHQigweGZmLCAwLCAwLCAwKTsKLSAgICBwYWlu
dC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxf
U3R5bGUpOwotCi0gICAgU2tQYXRoIHBhdGg7Ci0gICAgcGF0aC5tb3ZlVG8ocmlnaHQgLSAxMywg
bWlkZGxlIC0gMyk7Ci0gICAgcGF0aC5yTGluZVRvKDYsIDApOwotICAgIHBhdGguckxpbmVUbygt
MywgNik7Ci0gICAgcGF0aC5jbG9zZSgpOwotICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFp
bnQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0TWVu
dUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwotfQotCi0vLyBVc2VkIHRvIHBhaW50IHN0
eWxlZCBtZW51bGlzdHMgKGkuZS4gd2l0aCBhIG5vbi1kZWZhdWx0IGJvcmRlcikKLWJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvLCBpLCByZWN0KTsKLX0KLQotaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHls
ZSwgTGVmdFBhZGRpbmcpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJl
dHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5nKTsKLX0KLQot
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRk
aW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21QYWRkaW5n
KTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRp
bmdMZWZ0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMzsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDM7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQ
YWRkaW5nVG9wKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAotewotICAg
IHJldHVybiAxOwotfQotCi1kb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0Qmxp
bmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmNh
cmV0QmxpbmtJbnRlcnZhbCgpOwotfQotCiBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OlJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eCgpCiB7CiB9CkBAIC02NDUsMjIgKzg0LDQgQEAgQ29sb3IgUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAogICAgIHJldHVybiBDb2xvcigweDMyLCAweDMyLCAweDMyKTsKIH0KIAot
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGlu
dGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzZXItc3VwcGxpZWQgcGFkZGlu
Zy4KLSAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4KLSAgICBpbnQgcGFkZGluZyA9IHN0
eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nW3BhZGRpbmdUeXBlXTsKLQotICAgIC8vIFJlc2Vy
dmUgdGhlIHNwYWNlIGZvciByaWdodCBhcnJvdyBoZXJlLiBUaGUgcmVzdCBvZiB0aGUgcGFkZGlu
ZyBpcwotICAgIC8vIHNldCBieSBhZGp1c3RNZW51TGlzdFN0eWxlLCBzaW5jZSBQb3BNZW51V2lu
LmNwcCB1c2VzIHRoZSBwYWRkaW5nIGZyb20KLSAgICAvLyBSZW5kZXJNZW51TGlzdCB0byBsYXkg
b3V0IHRoZSBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZSBwb3B1cC4KLSAgICAvLyBJZiB0aGUgTWVu
dUxpc3QgYWN0dWFsbHkgaGFzIGFwcGVhcmFuY2UgIk5vQXBwZWFyYW5jZSIsIHRoZW4gdGhhdCBt
ZWFucwotICAgIC8vIHdlIGRvbid0IGRyYXcgYSBidXR0b24sIHNvIGRvbid0IHJlc2VydmUgc3Bh
Y2UgZm9yIGl0LgotICAgIGNvbnN0IGludCBiYXJUeXBlID0gc3R5bGUtPmRpcmVjdGlvbigpID09
IExUUiA/IFJpZ2h0UGFkZGluZyA6IExlZnRQYWRkaW5nOwotICAgIGlmIChwYWRkaW5nVHlwZSA9
PSBiYXJUeXBlICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydCkKLSAgICAg
ICAgcGFkZGluZyArPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhp
Y2tuZXNzKCk7Ci0KLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAppbmRl
eCA3Y2JjMTg2Li4zNDVjYjdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTGludXguaApAQCAtMjgsMTEzICsyOCwxMCBAQAogI2lmbmRlZiBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXhfaAogI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtTGludXhfaAogCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYSA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYSgpOwotICAgICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVt
U2tpYSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQo
KTsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7Ci0jaWYg
RU5BQkxFKFZJREVPKQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhl
IHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3Zl
cmVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHls
ZSopIGNvbnN0OwotCi0gICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMg
YWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgICAgICAvLyBUaGUg
cGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7Ci0KLSAgICAgICAgLy8gVG8gY2hh
bmdlIHRoZSBibGluayBpbnRlcnZhbCwgb3ZlcnJpZGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJu
YWwgaW5zdGVhZCBvZiB0aGlzIG9uZSBzbyB0aGF0IHdlIG1heSBzaGFyZSBsYXlvdXQgdGVzdCBj
b2RlIGFuIGludGVyY2VwdHMuCi0gICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRl
cnZhbCgpIGNvbnN0OwotCi0gICAgICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICAgICAgdmlydHVh
bCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0K
LSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgLy8gTWVudUxpc3QgcmVmZXJz
IHRvIGFuIHVuc3R5bGVkIG1lbnVsaXN0IChtZWFuaW5nIGEgbWVudWxpc3Qgd2l0aG91dAotICAg
ICAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRlciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRv
biByZWZlcnMgdG8gYSBzdHlsZWQKLSAgICAgICAgLy8gbWVudWxpc3QgKGEgbWVudWxpc3Qgd2l0
aCBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRlciBzZXQpLiBUaGV5IGhhdmUKLSAgICAgICAgLy8g
dGhpcyBkaXN0aW5jdGlvbiB0byBzdXBwb3J0IHNob3dpbmcgYXF1YSBzdHlsZSB0aGVtZXMgd2hl
bmV2ZXIgdGhleQotICAgICAgICAvLyBwb3NzaWJseSBjYW4sIHdoaWNoIGlzIHNvbWV0aGluZyB3
ZSBkb24ndCB3YW50IHRvIHJlcGxpY2F0ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW4gc2hv
cnQsIHdlIGVpdGhlciBnbyBkb3duIHRoZSBNZW51TGlzdCBjb2RlIHBhdGggb3IgdGhlIE1lbnVM
aXN0QnV0dG9uCi0gICAgICAgIC8vIGNvZGVwYXRoLiBXZSBuZXZlciBnbyBkb3duIGJvdGguIEFu
ZCBpbiBib3RoIGNhc2VzLCB0aGV5IHJlbmRlciB0aGUKLSAgICAgICAgLy8gZW50aXJlIG1lbnVs
aXN0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZGVmaW5lIHRoZSBwYWRkaW5nIGZvciB0aGUg
TWVudUxpc3QncyBpbm5lciBibG9jay4KLSAgICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
KSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFkZGluZ1JpZ2h0
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IGJ1dHRvbkludGVybmFsUGFkZGluZ1RvcCgp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdCb3R0b20o
KSBjb25zdDsKLQotICAgICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29u
dHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdEdVSUZvbnQoKTsKLQot
ICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBmb250IHNpemUuICBXZSB1c2Ug
dGhpcyBhcyB0aGUgZGVmYXVsdCBmb250Ci0gICAgICAgIC8vIHNpemUgZm9yIHRoZSAic3lzdGVt
IGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKLSAg
ICAgICAgLy8gZm9ybSBjb250cm9sIGZvbnRzLgotICAgICAgICBzdGF0aWMgZmxvYXQgZGVmYXVs
dEZvbnRTaXplOwotCi0gICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbElu
dGVybmFsKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgbWVudUxpc3RJbnRl
cm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQgcGFkZGluZ1R5cGUpIGNvbnN0OwotICAgICAg
ICBib29sIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiwgSW1hZ2UqKTsKLSAgICB9OwotCiAgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4IDogcHVibGljIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOwpAQCAtMTU2LDQgKzUzLDQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2Vu
ZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKaW5kZXggYmYyMTdjOC4uODI4NDY2OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtMSwyICsx
LDYxMiBAQAotLy8gRklYTUU6IFRoaXMgaXMgYSBwbGFjZWhvbGRlciB0byBhdm9pZCBzb21lIGlz
c3VlcyB3aXRoIHdlYmtpdC5neXAgaW4gdGhlIGNocm9taXVtIHRyZWUuIEhhdmluZyB0aGlzIHBs
YWNlaG9sZGVyIHVudGlsIHdlIGNhbiBmYWN0b3Igb3V0Ci0vLyBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYSBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCB3aWxsIGtlZXAgdGhlIEhFQUQgb2Yg
Ym90aCB0cmVlcyBjb21wYXRpYmxlLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEdvb2dsZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWEuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgor
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHls
ZVNoZWV0cy5oIgorCisjaW5jbHVkZSAiU2tTaGFkZXIuaCIKKyNpbmNsdWRlICJTa0dyYWRpZW50
U2hhZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBQYWRkaW5nVHlwZSB7Cisg
ICAgVG9wUGFkZGluZywKKyAgICBSaWdodFBhZGRpbmcsCisgICAgQm90dG9tUGFkZGluZywKKyAg
ICBMZWZ0UGFkZGluZworfTsKKworc3RhdGljIGNvbnN0IGludCBzdHlsZWRNZW51TGlzdEludGVy
bmFsUGFkZGluZ1s0XSA9IHsgMSwgNCwgMSwgNCB9OworCisvLyBUaGUgYmFja2dyb3VuZCBmb3Ig
dGhlIG1lZGlhIHBsYXllciBjb250cm9scyBzaG91bGQgYmUgYSA2MCUgb3BhcXVlIGJsYWNrIHJl
Y3RhbmdsZS4gVGhpcworLy8gbWF0Y2hlcyB0aGUgVUkgbW9ja3VwcyBmb3IgdGhlIGRlZmF1bHQg
VUkgdGhlbWUuCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdE1lZGlhQ29udHJvbE9wYWNpdHkg
PSAwLjZmOworCisvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNhZmFyaS9XaW4uCitzdGF0aWMg
Y29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29u
c3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0
IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1
dHRvblNpemUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZh
dWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKKworc3RhdGljIHZvaWQgc2V0
U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS0+
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCisvLyBBdHRlbXB0IHRv
IHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJucyBOVUxMIGlm
IG9uZSBjYW5ub3QgYmUgZm91bmQuCitzdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50UGFyZW50KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAg
ICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZp
ZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxl
bWVudCo+KG1lZGlhTm9kZSk7Cit9CisjZW5kaWYKKworLy8gV2UgYWltIHRvIG1hdGNoIElFIGhl
cmUuCisvLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZh
dWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcg
KGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hp
Y2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4K
Ky8vCisvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNo
IElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJl
LCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMg
KGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgU3RyaW5n
JiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVmYXVsdEdVSUZvbnQoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250ZmFjZSwgKCJBcmlhbCIpKTsKKyAgICByZXR1cm4g
Zm9udEZhY2U7Cit9CisKK2Zsb2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpkZWZhdWx0Rm9u
dFNpemUgPSAxNi4wOworCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEoKQoreworfQorCitSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6flJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhKCkKK3sKK30KKworLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0
byBtYXRjaCB0aGVpciBtZXRyaWNzLgorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpl
eHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNl
ckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCkpOwor
fQorCitTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmV4dHJhUXVpcmtzU3R5bGVTaGVl
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKK30KKworI2lm
IEVOQUJMRShWSURFTykKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZXh0cmFNZWRp
YUNvbnRyb2xzU3R5bGVTaGVldCgpCit7CisgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xz
Q2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0Nocm9taXVt
VXNlckFnZW50U3R5bGVTaGVldCkpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
eworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8v
IFRoaXMgY2F1c2VzIFdlYktpdCB0byBkcmF3IHRoZSBmb2N1cyByaW5ncyBmb3IgdXMuCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZv
cm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvcigweDFlLCAweDkwLCAweGZmKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWE6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiBDb2xvcigweGM4LCAweGM4LCAweGM4KTsKK30KKworQ29sb3IgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDB4MzIsIDB4MzIsIDB4MzIpOworfQorCitDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsKK30KKwor
ZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25z
dAoreworICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1v
ZGUsIGFzIGl0IGludHJvZHVjZXMKKyAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4
ZWwgdGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKKyAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91
dFRlc3RNb2RlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNhcmV0QmxpbmtJ
bnRlcnZhbEludGVybmFsKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5
c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0Cit7CisgICAgZmxvYXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7CisKKyAgICBzd2l0
Y2ggKHByb3BJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBj
YXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRD
b250cm9sOgorICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mg
d2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgLy8gYXJlIGFzc3VtaW5nIGEg
OTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0aGF0IHdlIHVzZSBvbgorICAgICAg
ICAvLyBXaW5kb3dzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9
IDcyLjBmOworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBm
OworICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBvaW50c1BlckluY2gpICogcGl4ZWxzUGVy
SW5jaDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
Rm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNl
KTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHN0YXRpYyBJbWFnZSogY29uc3QgY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJsaW51eENoZWNrYm94T24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIElt
YWdlKiBjb25zdCB1bmNoZWNrZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bGludXhDaGVja2JveE9mZiIpLnJlbGVhc2VSZWYoKTsKKworICAgIEltYWdlKiBpbWFnZSA9IHRo
aXMtPmlzQ2hlY2tlZChvKSA/IGNoZWNrZWRJbWFnZSA6IHVuY2hlY2tlZEltYWdlOworICAgIGku
Y29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJv
dGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBv
ZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5CisgICAgLy8gZm9yIG5v
dy4gIEl0IG1hdGNoZXMgRmlyZWZveC4gIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2lu
ZG93cywKKyAgICAvLyBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUg
dGhhdCBhY2NvdW50cyBmb3IgdGhlIGhpZ2hlcgorICAgIC8vIERQSS4gIFVudGlsIG91ciBlbnRp
cmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlCisgICAgLy8g
Y2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncyBtZXRyaWNzLgorICAgIGNvbnN0IEludFNpemUgc2l6
ZSgxMywgMTMpOworICAgIHNldFNpemVJZkF1dG8oc3R5bGUsIHNpemUpOworfQorCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
c3RhdGljIEltYWdlKiBjb25zdCBjaGVja2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoImxpbnV4UmFkaW9PbiIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNv
bnN0IHVuY2hlY2tlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJsaW51eFJh
ZGlvT2ZmIikucmVsZWFzZVJlZigpOworCisgICAgSW1hZ2UqIGltYWdlID0gdGhpcy0+aXNDaGVj
a2VkKG8pID8gY2hlY2tlZEltYWdlIDogdW5jaGVja2VkSW1hZ2U7CisgICAgaS5jb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIHJlY3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3sKKyAgICAvLyBVc2Ugc2FtZSBzaXppbmcgZm9yIHJhZGlvIGJveCBhcyBjaGVja2JveC4K
KyAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOworfQorCitzdGF0aWMgU2tDb2xvciBicmlnaHRl
bkNvbG9yKGRvdWJsZSBoLCBkb3VibGUgcywgZG91YmxlIGwsIGZsb2F0IGJyaWdodGVuQW1vdW50
KQoreworICAgIGwgKz0gYnJpZ2h0ZW5BbW91bnQ7CisgICAgaWYgKGwgPiAxLjApCisgICAgICAg
IGwgPSAxLjA7CisgICAgaWYgKGwgPCAwLjApCisgICAgICAgIGwgPSAwLjA7CisKKyAgICByZXR1
cm4gbWFrZVJHQkFGcm9tSFNMQShoLCBzLCBsLCAxLjApOworfQorCitzdGF0aWMgdm9pZCBwYWlu
dEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFNr
Q2FudmFzKiBjb25zdCBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKTsKKyAgICBTa1BhaW50IHBhaW50OworICAgIFNrUmVjdCBza3JlY3Q7CisgICAgY29uc3Qg
aW50IHJpZ2h0ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRv
bSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKTsKKyAgICBTa0NvbG9yIGJhc2VDb2xvciA9IFNr
Q29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4ZGQpOworICAgIGlmIChvLT5zdHlsZSgp
LT5oYXNCYWNrZ3JvdW5kKCkpCisgICAgICAgIGJhc2VDb2xvciA9IG8tPnN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpLnJnYigpOworICAgIGRvdWJsZSBoLCBzLCBsOworICAgIENvbG9yKGJhc2VD
b2xvcikuZ2V0SFNMKGgsIHMsIGwpOworICAgIC8vIE91ciBzdGFuZGFyZCBncmFkaWVudCBpcyBm
cm9tIDB4ZGQgdG8gMHhmOC4gVGhpcyBpcyB0aGUgYW1vdW50IG9mCisgICAgLy8gaW5jcmVhc2Vk
IGx1bWluYW5jZSBiZXR3ZWVuIHRob3NlIHZhbHVlcy4KKyAgICBTa0NvbG9yIGxpZ2h0Q29sb3Io
YnJpZ2h0ZW5Db2xvcihoLCBzLCBsLCAwLjEwNSkpOworCisgICAgLy8gSWYgdGhlIGJ1dHRvbiBp
cyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRyYXdpbmcgYSBzaW5nbGUsIHNvbGlkIGNvbG9yCisg
ICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwgcmVjdC5oZWlnaHQoKSA8IDUpIHsKKyAgICAgICAg
cGFpbnQuc2V0Q29sb3IoYmFzZUNvbG9yKTsKKyAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwg
cmVjdC55KCksIHJpZ2h0LCBib3R0b20pOworICAgICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVj
dCwgcGFpbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgaW50IGJvcmRl
ckFscGhhID0gdGhlbWUtPmlzSG92ZXJlZChvKSA/IDB4ODAgOiAweDU1OworICAgIHBhaW50LnNl
dEFSR0IoYm9yZGVyQWxwaGEsIDAsIDAsIDApOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54
KCkgKyAxLCByZWN0LnkoKSwgcmlnaHQgLSAxLCByZWN0LnkoKSwgcGFpbnQpOworICAgIGNhbnZh
cy0+ZHJhd0xpbmUocmlnaHQgLSAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0g
MSwgcGFpbnQpOworICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAx
LCByaWdodCAtIDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdMaW5lKHJl
Y3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3QueCgpLCBib3R0b20gLSAxLCBwYWludCk7CisKKyAg
ICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOworICAgIFNrUG9pbnQgcFsyXTsKKyAgICBj
b25zdCBpbnQgbGlnaHRFbmQgPSB0aGVtZS0+aXNQcmVzc2VkKG8pID8gMSA6IDA7CisgICAgY29u
c3QgaW50IGRhcmtFbmQgPSAhbGlnaHRFbmQ7CisgICAgcFtsaWdodEVuZF0uc2V0KFNrSW50VG9T
Y2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKHJlY3QueSgpKSk7CisgICAgcFtkYXJrRW5k
XS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIoYm90dG9tIC0gMSkp
OworICAgIFNrQ29sb3IgY29sb3JzWzJdOworICAgIGNvbG9yc1swXSA9IGxpZ2h0Q29sb3I7Cisg
ICAgY29sb3JzWzFdID0gYmFzZUNvbG9yOworCisgICAgU2tTaGFkZXIqIHNoYWRlciA9IFNrR3Jh
ZGllbnRTaGFkZXI6OkNyZWF0ZUxpbmVhcigKKyAgICAgICAgcCwgY29sb3JzLCBOVUxMLCAyLCBT
a1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlLCBOVUxMKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1Bh
aW50OjprRmlsbF9TdHlsZSk7CisgICAgcGFpbnQuc2V0U2hhZGVyKHNoYWRlcik7CisgICAgc2hh
ZGVyLT51bnJlZigpOworCisgICAgc2tyZWN0LnNldChyZWN0LngoKSArIDEsIHJlY3QueSgpICsg
MSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKKyAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwg
cGFpbnQpOworCisgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOworICAgIHBhaW50LnNldENvbG9y
KGJyaWdodGVuQ29sb3IoaCwgcywgbCwgLTAuMDU4OCkpOworICAgIGNhbnZhcy0+ZHJhd1BvaW50
KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCBwYWludCk7CisgICAgY2FudmFzLT5kcmF3UG9p
bnQocmlnaHQgLSAyLCByZWN0LnkoKSArIDEsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdQb2lu
dChyZWN0LngoKSArIDEsIGJvdHRvbSAtIDIsIHBhaW50KTsKKyAgICBjYW52YXMtPmRyYXdQb2lu
dChyaWdodCAtIDIsIGJvdHRvbSAtIDIsIHBhaW50KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWludEJ1dHRv
bkxpa2UodGhpcywgbywgaSwgcmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWlu
dFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxk
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAoreworICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9u
dCBzaXplCisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0
Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBscm91bmRm
KHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1bHRDYW5jZWxCdXR0
b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOworICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworfQorCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7
CisgICAgaWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5k
ZXJCb3goby0+cGFyZW50KCkpOworCisgICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5k
ZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2Fs
ZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveAor
ICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LndpZHRoKCksIHN0ZDo6bWlu
KHBhcmVudEJveC5oZWlnaHQoKSwgYm91bmRzLmhlaWdodCgpKSkpOworICAgIGJvdW5kcy5zZXRX
aWR0aChib3VuZHMuaGVpZ2h0KCkpOworCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGlj
YWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYt
Y2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9t
IG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4K
KyAgICBib3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJv
dW5kcy5oZWlnaHQoKSArIDEpIC8gMik7CisKKyAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbEltYWdl
ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWwiKS5yZWxlYXNlUmVm
KCk7CisgICAgc3RhdGljIEltYWdlKiBjYW5jZWxQcmVzc2VkSW1hZ2UgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbFByZXNzZWQiKS5yZWxlYXNlUmVmKCk7CisgICAg
aS5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8pID8gY2FuY2VsUHJlc3NlZEltYWdlIDog
Y2FuY2VsSW1hZ2UsIGJvdW5kcyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChl
bXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChl
bXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBT
Y2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKKyAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVs
U2l6ZTsKKyAgICBpbnQgbWFnbmlmaWVyU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgo
bWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkp
OworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworfQorCiti
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgQVNTRVJU
KG8tPnBhcmVudCgpKTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJlbnQoKS0+aXNC
b3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5k
ZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAgSW50UmVjdCBwYXJlbnRCb3gg
PSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOworCisgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0
cyBwYXJlbnQncyBib3gKKyAgICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53
aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsK
KyAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsKKworICAgIC8vIENlbnRlciB0
aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMg
dG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwg
Y2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJl
dHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFy
ZW50Qm94LmhlaWdodCgpIC0gYm91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKworICAgIHN0YXRp
YyBJbWFnZSogbWFnbmlmaWVySW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNl
YXJjaE1hZ25pZmllciIpLnJlbGVhc2VSZWYoKTsKKyAgICBpLmNvbnRleHQtPmRyYXdJbWFnZSht
YWduaWZpZXJJbWFnZSwgYm91bmRzKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
eworICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCisg
ICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZv
bnRQaXhlbFNpemU7CisgICAgaW50IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYoc3RkOjptaW4o
c3RkOjptYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TaXplKSk7CisgICAgaW50IG1hZ25pZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZpZXJI
ZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgobWFnbmlmaWVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
bWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIElu
dFJlY3QgYm91bmRzID0gcjsKKyAgICBBU1NFUlQoby0+cGFyZW50KCkpOworICAgIGlmICghby0+
cGFyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW8tPnBhcmVudCgpIHx8
ICFvLT5wYXJlbnQoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVu
ZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7CisgICAg
SW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgp
OworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBp
dHMgcGFyZW50J3MgYm94CisgICAgYm91bmRzLnNldEhlaWdodChzdGQ6Om1pbihwYXJlbnRCb3gu
aGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpOworICAgIGJvdW5kcy5zZXRXaWR0aChzdGQ6Om1p
bihwYXJlbnRCb3gud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZHMuaGVpZ2h0KCkgKiBk
ZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUpKSk7CisKKyAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0
aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9m
Zi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0
b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0
LgorICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0g
Ym91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKKworICAgIHN0YXRpYyBJbWFnZSogbWFnbmlmaWVy
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaE1hZ25pZmllclJlc3Vs
dHMiKS5yZWxlYXNlUmVmKCk7CisgICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1h
Z2UsIGJvdW5kcyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCit7CisgICAgY29udGV4dC0+
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihkZWZhdWx0TWVkaWFDb250cm9sT3BhY2l0eSk7CisKKyAg
ICAvLyBEcmF3IGJhY2tncm91bmQuCisgICAgQ29sb3Igb2xkRmlsbCA9IGNvbnRleHQtPmZpbGxD
b2xvcigpOworICAgIENvbG9yIG9sZFN0cm9rZSA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7CisK
KyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOworICAgIGNvbnRleHQtPmRyYXdSZWN0KHJlY3Qp
OworCisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG9sZEZpbGwpOworICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKG9sZFN0cm9rZSk7CisKKyAgICAvLyBDcmVhdGUgYSBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0IGlzIGNlbnRlcmVkIGluIHRoZSBkcmF3aW5nIHJl
Y3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQgZG93bi4KKyAgICBJbnRSZWN0IGltYWdlUmVjdCA9
IGltYWdlLT5yZWN0KCk7CisgICAgaW1hZ2VSZWN0LnNldFkocmVjdC55KCkgKyAocmVjdC5oZWln
aHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEpIC8gMik7CisgICAgaW1hZ2VSZWN0LnNldFgocmVj
dC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1hZ2UtPndpZHRoKCkgKyAxKSAvIDIpOworCisgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3Ap
OworICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUo
KSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJt
ZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBtZWRpYVBhdXNlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIikucmVsZWFzZVJlZigpOwor
CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwg
cmVjdCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlhUGxheSA6IG1lZGlhUGF1c2UpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworI2lmIEVOQUJMRShWSURFTykKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmRGdWxsIikucmVsZWFzZVJlZigp
OworICAgIHN0YXRpYyBJbWFnZSogc291bmROb25lID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJtZWRpYVNvdW5kTm9uZSIpLnJlbGVhc2VSZWYoKTsKKworICAgIHJldHVybiBwYWludE1l
ZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+
bXV0ZWQoKSA/IHNvdW5kTm9uZTogc291bmRGdWxsKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
V2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKK3sKKyAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRv
IGF1dG8gb24gYWxsIGJyb3dzZXJzLgorICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFNrQ2FudmFzKiBjb25z
dCBjYW52YXMgPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBj
b25zdCBpbnQgcmlnaHQgPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBpbnQg
bWlkZGxlID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMjsKKworICAgIHBhaW50QnV0dG9u
TGlrZSh0aGlzLCBvLCBpLCByZWN0KTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgcGFpbnQu
c2V0QVJHQigweGZmLCAwLCAwLCAwKTsKKyAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Cisg
ICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOworCisgICAgU2tQYXRoIHBh
dGg7CisgICAgcGF0aC5tb3ZlVG8ocmlnaHQgLSAxMywgbWlkZGxlIC0gMyk7CisgICAgcGF0aC5y
TGluZVRvKDYsIDApOworICAgIHBhdGguckxpbmVUbygtMywgNik7CisgICAgcGF0aC5jbG9zZSgp
OworICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGUpOworfQorCisvLyBVc2VkIHRvIHBhaW50IHN0eWxlZCBtZW51bGlzdHMgKGkuZS4gd2l0
aCBhIG5vbi1kZWZhdWx0IGJvcmRlcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNZW51
TGlzdChvLCBpLCByZWN0KTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1
cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJl
dHVybiBtZW51TGlzdEludGVybmFsUGFkZGluZyhzdHlsZSwgTGVmdFBhZGRpbmcpOworfQorCitp
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBtZW51TGlzdEludGVybmFsUGFk
ZGluZyhzdHlsZSwgUmlnaHRQYWRkaW5nKTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsK
K30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbnVMaXN0SW50
ZXJuYWxQYWRkaW5nKHN0eWxlLCBCb3R0b21QYWRkaW5nKTsKK30KKworaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5hbFBhZGRpbmdMZWZ0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMzsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5h
bFBhZGRpbmdSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDM7Cit9CisKK2ludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMTsKK30KKworaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRl
cm5hbFBhZGRpbmdCb3R0b20oKSBjb25zdAoreworICAgIHJldHVybiAxOworfQorCitkb3VibGUg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpOworfQor
CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJl
bmRlclN0eWxlKiBzdHlsZSwgaW50IHBhZGRpbmdUeXBlKSBjb25zdAoreworICAgIC8vIFRoaXMg
aW50ZXJuYWwgcGFkZGluZyBpcyBpbiBhZGRpdGlvbiB0byB0aGUgdXNlci1zdXBwbGllZCBwYWRk
aW5nLgorICAgIC8vIE1hdGNoZXMgdGhlIEZGIGJlaGF2aW9yLgorICAgIGludCBwYWRkaW5nID0g
c3R5bGVkTWVudUxpc3RJbnRlcm5hbFBhZGRpbmdbcGFkZGluZ1R5cGVdOworCisgICAgLy8gUmVz
ZXJ2ZSB0aGUgc3BhY2UgZm9yIHJpZ2h0IGFycm93IGhlcmUuIFRoZSByZXN0IG9mIHRoZSBwYWRk
aW5nIGlzCisgICAgLy8gc2V0IGJ5IGFkanVzdE1lbnVMaXN0U3R5bGUsIHNpbmNlIFBvcE1lbnVX
aW4uY3BwIHVzZXMgdGhlIHBhZGRpbmcgZnJvbQorICAgIC8vIFJlbmRlck1lbnVMaXN0IHRvIGxh
eSBvdXQgdGhlIGluZGl2aWR1YWwgaXRlbXMgaW4gdGhlIHBvcHVwLgorICAgIC8vIElmIHRoZSBN
ZW51TGlzdCBhY3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9BcHBlYXJhbmNlIiwgdGhlbiB0aGF0
IG1lYW5zCisgICAgLy8gd2UgZG9uJ3QgZHJhdyBhIGJ1dHRvbiwgc28gZG9uJ3QgcmVzZXJ2ZSBz
cGFjZSBmb3IgaXQuCisgICAgY29uc3QgaW50IGJhclR5cGUgPSBzdHlsZS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7CisgICAgaWYgKHBhZGRpbmdUeXBl
ID09IGJhclR5cGUgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0KQorICAg
ICAgICBwYWRkaW5nICs9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJU
aGlja25lc3MoKTsKKworICAgIHJldHVybiBwYWRkaW5nOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAppbmRl
eCBiZjIxN2M4Li40YWQyMzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtU2tpYS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmgKQEAgLTEsMiArMSwxNDAgQEAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgcGxhY2Vo
b2xkZXIgdG8gYXZvaWQgc29tZSBpc3N1ZXMgd2l0aCB3ZWJraXQuZ3lwIGluIHRoZSBjaHJvbWl1
bSB0cmVlLiBIYXZpbmcgdGhpcyBwbGFjZWhvbGRlciB1bnRpbCB3ZSBjYW4gZmFjdG9yIG91dAot
Ly8gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTGludXgg
d2lsbCBrZWVwIHRoZSBIRUFEIG9mIGJvdGggdHJlZXMgY29tcGF0aWJsZS4KKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWFfaAorCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKTsKKyAgICAgICAgdmlydHVhbCB+UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEoKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYURlZmF1bHRT
dHlsZVNoZWV0KCk7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhUXVpcmtzU3R5bGVTaGVl
dCgpOworI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRp
YUNvbnRyb2xzU3R5bGVTaGVldCgpOworI2VuZGlmCisKKyAgICAgICAgLy8gQSBtZXRob2QgYXNr
aW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5n
IHdoZW4gaG92ZXJlZC4KKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhl
IHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KKyAgICAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAg
ICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICAgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OworCisgICAgICAg
IC8vIFRvIGNoYW5nZSB0aGUgYmxpbmsgaW50ZXJ2YWwsIG92ZXJyaWRlIGNhcmV0QmxpbmtJbnRl
cnZhbEludGVybmFsIGluc3RlYWQgb2YgdGhpcyBvbmUgc28gdGhhdCB3ZSBtYXkgc2hhcmUgbGF5
b3V0IHRlc3QgY29kZSBhbiBpbnRlcmNlcHRzLgorICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJl
dEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKKworICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIC8vIE1lbnVM
aXN0IHJlZmVycyB0byBhbiB1bnN0eWxlZCBtZW51bGlzdCAobWVhbmluZyBhIG1lbnVsaXN0IHdp
dGhvdXQKKyAgICAgICAgLy8gYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KSBhbmQgTWVu
dUxpc3RCdXR0b24gcmVmZXJzIHRvIGEgc3R5bGVkCisgICAgICAgIC8vIG1lbnVsaXN0IChhIG1l
bnVsaXN0IHdpdGggYmFja2dyb3VuZC1jb2xvciBvciBib3JkZXIgc2V0KS4gVGhleSBoYXZlCisg
ICAgICAgIC8vIHRoaXMgZGlzdGluY3Rpb24gdG8gc3VwcG9ydCBzaG93aW5nIGFxdWEgc3R5bGUg
dGhlbWVzIHdoZW5ldmVyIHRoZXkKKyAgICAgICAgLy8gcG9zc2libHkgY2FuLCB3aGljaCBpcyBz
b21ldGhpbmcgd2UgZG9uJ3Qgd2FudCB0byByZXBsaWNhdGUuCisgICAgICAgIC8vCisgICAgICAg
IC8vIEluIHNob3J0LCB3ZSBlaXRoZXIgZ28gZG93biB0aGUgTWVudUxpc3QgY29kZSBwYXRoIG9y
IHRoZSBNZW51TGlzdEJ1dHRvbgorICAgICAgICAvLyBjb2RlcGF0aC4gV2UgbmV2ZXIgZ28gZG93
biBib3RoLiBBbmQgaW4gYm90aCBjYXNlcywgdGhleSByZW5kZXIgdGhlCisgICAgICAgIC8vIGVu
dGlyZSBtZW51bGlzdC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRlZmluZSB0aGUgcGFkZGlu
ZyBmb3IgdGhlIE1lbnVMaXN0J3MgaW5uZXIgYmxvY2suCisgICAgICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQ
YWRkaW5nTGVmdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBh
ZGRpbmdSaWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBh
ZGRpbmdUb3AoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRk
aW5nQm90dG9tKCkgY29uc3Q7CisKKyAgICAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcg
aWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgorICAgICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRHVUlG
b250KCk7CisKKyAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXpl
LiAgV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAorICAgICAgICAvLyBzaXplIGZvciB0
aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmlu
aykgZm9yCisgICAgICAgIC8vIGZvcm0gY29udHJvbCBmb250cy4KKyAgICAgICAgc3RhdGljIGZs
b2F0IGRlZmF1bHRGb250U2l6ZTsKKworICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5r
SW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1l
bnVMaXN0SW50ZXJuYWxQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50IHBhZGRpbmdUeXBlKSBjb25z
dDsKKyAgICAgICAgYm9vbCBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYsIEltYWdlKik7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWFfaAo=
</data>
<flag name="review"
          id="15993"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31303</attachid>
            <date>2009-06-15 12:55:57 -0700</date>
            <delta_ts>2009-06-17 00:28:46 -0700</delta_ts>
            <desc>Remove common code from RenderThemeChromiumWin (Rebased to tip of tree after patch 31302)</desc>
            <filename>kill_win_bitrot.patch</filename>
            <type>text/plain</type>
            <size>33350</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmQxM2NiZC4uNDQ1NmM3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTMsNiArMywzNiBAQAogICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjYxNDgKKyAgICAgICAgUmVtb3ZlIGNvbW1vbiBjb2RlIGZyb20gUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbiB0aGF0IGlzIHNoYXJlZCB3aXRoCisgICAgICAgIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLgorCisgICAgICAgIEFsc28gbW92ZSBzdXBwb3J0c0NvbnRyb2xUaW50cyB0byBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXggc2luY2UgaXQKKyAgICAgICAgaXMgbGludXggc3BlY2lmaWMu
CisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c3VwcG9ydHNDb250cm9sVGludHMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
IChXZWJDb3JlOjpnZXROb25DbGllbnRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OlJlbmRlclRoZW1lQ2hyb21pdW1XaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6flJlbmRlclRoZW1lQ2hyb21pdW1XaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludENoZWNrYm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50UmFkaW8pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXJUaHVt
Yik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpjYXJldEJsaW5r
SW50ZXJ2YWxJbnRlcm5hbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1XaW4uaDoKKworMjAwOS0wNi0xNSAgQWxiZXJ0IEouIFdvbmcgIDxhandvbmdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjE0OAogICAgICAgICBNb3Zl
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIGludG8gaXRzIG93biBmaWxlLgogCiAgICAgICAgIFdB
Uk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggNTMxODk4OC4uODZkY2MxNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCkBA
IC04NCw0ICs4NCw5IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6aW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gQ29sb3Io
MHgzMiwgMHgzMiwgMHgzMik7CiB9CiAKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojpz
dXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4LmgKaW5kZXggMzQ1Y2I3YS4uY2ViNDNiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmgKQEAgLTQ5LDYgKzQ5LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKwor
ICAgICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5n
IGlzIHN1cHBvcnRlZCBhdCBhbGwuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRy
b2xUaW50cygpIGNvbnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAppbmRleCA4Mjg0NjY4
Li5lYjM1ZmI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuY3BwCkBAIC0xNjIsMTEgKzE2Miw2IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKICAgICBy
ZXR1cm4gQ29sb3IoMHgzMiwgMHgzMiwgMHgzMik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOwotfQotCiBkb3VibGUgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7CiAgICAgLy8gRGlz
YWJsZSB0aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMgaXQgaW50cm9k
dWNlcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgKaW5kZXgg
NGFkMjMxNi4uNDIxYmQyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWEuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYS5oCkBAIC01NCw3ICs1NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKIAogICAgICAgICAv
LyBUbyBjaGFuZ2UgdGhlIGJsaW5rIGludGVydmFsLCBvdmVycmlkZSBjYXJldEJsaW5rSW50ZXJ2
YWxJbnRlcm5hbCBpbnN0ZWFkIG9mIHRoaXMgb25lIHNvIHRoYXQgd2UgbWF5IHNoYXJlIGxheW91
dCB0ZXN0IGNvZGUgYW4gaW50ZXJjZXB0cy4KICAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRC
bGlua0ludGVydmFsKCkgY29uc3Q7CkBAIC0xMTcsOSArMTE2LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25z
dDsKICAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29u
c3Q7CiAKLSAgICAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wg
dGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRHVUlGb250KCk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAKaW5kZXggNTI4ODE5MS4u
ZGMxMjFiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5j
cHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDx2c3N5bTMyLmg+CiAKICNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Rm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKQEAgLTQwLDkgKzM5LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgotI2luY2x1ZGUgIlNraWFVdGlscy5oIgogI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdp
bi5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiV2luZG93
c1ZlcnNpb24uaCIKIAogLy8gRklYTUU6IFRoaXMgZGVwZW5kZW5jeSBzaG91bGQgZXZlbnR1YWxs
eSBiZSByZW1vdmVkLgpAQCAtNTcsMjggKzU0LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIHsKLQotLy8gVGhlIGJhY2tncm91bmQgZm9yIHRoZSBtZWRpYSBwbGF5ZXIgY29u
dHJvbHMgc2hvdWxkIGJlIGEgNjAlIG9wYXF1ZSBibGFjayByZWN0YW5nbGUuIFRoaXMKLS8vIG1h
dGNoZXMgdGhlIFVJIG1vY2t1cHMgZm9yIHRoZSBkZWZhdWx0IFVJIHRoZW1lLgotc3RhdGljIGNv
bnN0IGZsb2F0IGRlZmF1bHRNZWRpYUNvbnRyb2xPcGFjaXR5ID0gMC42ZjsKLQotLy8gVGhlc2Ug
dmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luLgotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRD
b250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDYW5j
ZWxCdXR0b25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxCdXR0b25TaXpl
ID0gNTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0b25TaXplID0gMjE7Ci1zdGF0
aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0g
MTM7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUgPSA5Owotc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplID0gMzA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbldpZHRoID0gMTg7Ci0KLWJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3Qg
U2tDYW52YXMqIGNhbnZhcykKLXsKLSAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29uc3Rf
Y2FzdDxTa0NhbnZhcyo+KGNhbnZhcyksIGZhbHNlKTsKLSAgICBpdGVyLm5leHQoKTsgIC8vIFRo
ZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgbGF5ZXIuCi0gICAgcmV0dXJuICFpdGVyLmRvbmUo
KTsgIC8vIFRoZXJlIGlzID4gMSBsYXllciBpZiB0aGUgdGhlIGl0ZXJhdG9yIGNhbiBzdGlsIGFk
dmFuY2UuCi19Ci0KIGNsYXNzIFRoZW1lUGFpbnRlciA6IHB1YmxpYyBUcmFuc3BhcmVuY3lXaW4g
ewogcHVibGljOgogICAgIFRoZW1lUGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHIpCkBAIC05Myw2ICs2OCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgorICAgIHN0YXRpYyBib29sIGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKGNvbnN0IFNrQ2Fu
dmFzKiBjYW52YXMpCisgICAgeworICAgICAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoY29u
c3RfY2FzdDxTa0NhbnZhcyo+KGNhbnZhcyksIGZhbHNlKTsKKyAgICAgICAgaXRlci5uZXh0KCk7
ICAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxheWVyLgorICAgICAgICByZXR1cm4g
IWl0ZXIuZG9uZSgpOyAgLy8gVGhlcmUgaXMgPiAxIGxheWVyIGlmIHRoZSB0aGUgaXRlcmF0b3Ig
Y2FuIHN0aWwgYWR2YW5jZS4KKyAgICB9CisKICAgICBzdGF0aWMgTGF5ZXJNb2RlIGdldExheWVy
TW9kZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRyYW5zZm9ybU1vZGUgdHJhbnNmb3JtTW9k
ZSkKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNEcmF3
aW5nVG9JbWFnZUJ1ZmZlcigpKSAgLy8gTWlnaHQgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5k
LgpAQCAtMTE2LDcgKzk4LDggQEAgcHJpdmF0ZToKIAogfSAgLy8gbmFtZXNwYWNlCiAKLXN0YXRp
YyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykgewor
c3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50TWV0cmljcyhOT05DTElFTlRNRVRSSUNTKiBtZXRyaWNz
KQorewogICAgIHN0YXRpYyBVSU5UIHNpemUgPSBXZWJDb3JlOjppc1Zpc3RhT3JOZXdlcigpID8K
ICAgICAgICAgc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpF
X1BSRV9WSVNUQTsKICAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOwpAQCAtMTI0LDIwICsxMDcs
NiBAQCBzdGF0aWMgdm9pZCBnZXROb25DbGllbnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1l
dHJpY3MpIHsKICAgICBBU1NFUlQoc3VjY2Vzcyk7CiB9CiAKLWVudW0gUGFkZGluZ1R5cGUgewot
ICAgIFRvcFBhZGRpbmcsCi0gICAgUmlnaHRQYWRkaW5nLAotICAgIEJvdHRvbVBhZGRpbmcsCi0g
ICAgTGVmdFBhZGRpbmcKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkTWVudUxpc3RJbnRl
cm5hbFBhZGRpbmdbNF0gPSB7IDEsIDQsIDEsIDQgfTsKLQotLy8gVGhlIGRlZmF1bHQgdmFyaWFi
bGUtd2lkdGggZm9udCBzaXplLiAgV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAotLy8g
c2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2Ug
dGhlbiBzaHJpbmspIGZvcgotLy8gZm9ybSBjb250cm9sIGZvbnRzLgotc3RhdGljIGZsb2F0IGRl
ZmF1bHRGb250U2l6ZSA9IDE2LjA7Ci0KIHN0YXRpYyBGb250RGVzY3JpcHRpb24gc21hbGxTeXN0
ZW1Gb250Owogc3RhdGljIEZvbnREZXNjcmlwdGlvbiBtZW51Rm9udDsKIHN0YXRpYyBGb250RGVz
Y3JpcHRpb24gbGFiZWxGb250OwpAQCAtMTU5LDE0ICsxMjgsNiBAQCBzdGF0aWMgYm9vbCBzdXBw
b3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1zdGF0aWMgdm9pZCBzZXRGaXhlZFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBp
bnQgcGFkZGluZ1s0XSkKLXsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmdbTGVmdFBhZGRpbmddLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVu
Z3RoKHBhZGRpbmdbUmlnaHRQYWRkaW5nXSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgocGFkZGluZ1tUb3BQYWRkaW5nXSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ1tCb3R0b21QYWRkaW5nXSwgRml4ZWQpKTsKLX0K
LQogLy8gUmV0dXJuIHRoZSBoZWlnaHQgb2Ygc3lzdGVtIGZvbnQgfGZvbnR8IGluIHBpeGVscy4g
IFdlIHVzZSB0aGlzIHNpemUgYnkKIC8vIGRlZmF1bHQgZm9yIHNvbWUgbm9uLWZvcm0tY29udHJv
bCBlbGVtZW50cy4KIHN0YXRpYyBmbG9hdCBzeXN0ZW1Gb250U2l6ZShjb25zdCBMT0dGT05UJiBm
b250KQpAQCAtMjAxLDIwICsxNjIsNiBAQCBzdGF0aWMgZmxvYXQgc3lzdGVtRm9udFNpemUoY29u
c3QgTE9HRk9OVCYgZm9udCkKICAgICByZXR1cm4gKChzaXplIDwgMTIuMGYpICYmIChHZXRBQ1Ao
KSA9PSA5MzYpKSA/IDEyLjBmIDogc2l6ZTsKIH0KIAotLy8gV2UgYWltIHRvIG1hdGNoIElFIGhl
cmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZh
dWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCi0vLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcg
KGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAotLy8gd2hp
Y2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCi0vLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4K
LS8vCi0vLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNo
IElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KLS8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJl
LCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAotLy8gc2l6ZXMg
KGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgotc3RhdGljIHdjaGFy
X3QqIGRlZmF1bHRHVUlGb250KCkKLXsKLSAgICByZXR1cm4gTCJBcmlhbCI7Ci19Ci0KIC8vIENv
bnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4gIE9uZSBwb2ludCBpcyAxLzcyIG9mIGFuIGluY2gu
CiBzdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9pbnRzKQogewpAQCAtMjMzLDE0
ICsxODAsNiBAQCBzdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9pbnRzKQogICAg
IHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJbmNoICogcGl4ZWxzUGVySW5jaDsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0U2l6ZUlmQXV0byhSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0g
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KIHN0YXRpYyBkb3VibGUgcXVlcnlT
eXN0ZW1CbGlua0ludGVydmFsKGRvdWJsZSBkZWZhdWx0SW50ZXJ2YWwpCiB7CiAgICAgVUlOVCBi
bGlua1RpbWUgPSBHZXRDYXJldEJsaW5rVGltZSgpOwpAQCAtMjUxLDIwICsxOTAsNiBAQCBzdGF0
aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChkb3VibGUgZGVmYXVsdEludGVydmFs
KQogICAgIHJldHVybiBibGlua1RpbWUgLyAxMDAwLjA7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8p
Ci0vLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4g
UmV0dXJucyBOVUxMIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi1zdGF0aWMgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dBbmNl
c3Rvck5vZGUoKTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0jZW5kaWYKLQogLy8gSW1wbGVt
ZW50IFdlYkNvcmU6OnRoZW1lKCkgZm9yIGdldHRpbmcgdGhlIGdsb2JhbCBSZW5kZXJUaGVtZS4K
IFJlbmRlclRoZW1lKiB0aGVtZSgpCiB7CkBAIC0yNzIsMjIgKzE5NywxMyBAQCBSZW5kZXJUaGVt
ZSogdGhlbWUoKQogICAgIHJldHVybiAmd2luVGhlbWU7CiB9CiAKLVN0cmluZyBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luVXNlckFnZW50
U3R5bGVTaGVldCkpOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZXh0cmFR
dWlya3NTdHlsZVNoZWV0KCkKK1JlbmRlclRoZW1lQ2hyb21pdW1XaW46OlJlbmRlclRoZW1lQ2hy
b21pdW1XaW4oKQogewotICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRT
dHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5RdWlya3NVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9
CiAKLSNpZiBFTkFCTEUoVklERU8pCi1TdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZXh0
cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCitSZW5kZXJUaGVtZUNocm9taXVtV2luOjp+UmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbigpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xz
Q2hyb21pdW1Vc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0Nocm9taXVt
VXNlckFnZW50U3R5bGVTaGVldCkpOwogfQotI2VuZGlmCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAogewpAQCAtMzM3LDIzICsyNTMsMTEgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0CiAgICAgcmV0
dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOyAvLyBZZWxsb3cuCiB9CiAKLWRvdWJsZSBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAotewotICAgIC8v
IERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0IG1vZGUsIGFzIGl0IGlu
dHJvZHVjZXMKLSAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUgcGl4ZWwgdGVzdHMuIGh0
dHA6Ly9iLzExOTg0NDAKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gVGhpcyBpbnZvbHZlcyBhIHN5c3RlbSBjYWxs
LCBzbyB3ZSBjYWNoZSB0aGUgcmVzdWx0LgotICAgIHN0YXRpYyBkb3VibGUgYmxpbmtJbnRlcnZh
bCA9IHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChSZW5kZXJUaGVtZTo6Y2FyZXRCbGlua0ludGVy
dmFsKCkpOwotICAgIHJldHVybiBibGlua0ludGVydmFsOwotfQotCiB2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBsb2dpYyBvd2VzIG11Y2ggdG8gUmVu
ZGVyVGhlbWVTYWZhcmkuY3BwLgotICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVkRGVzYyA9IE5V
TEw7Ci0gICAgd2NoYXJfdCogZmFjZU5hbWUgPSAwOworICAgIEZvbnREZXNjcmlwdGlvbiogY2Fj
aGVkRGVzYyA9IDA7CisgICAgQXRvbWljU3RyaW5nIGZhY2VOYW1lOwogICAgIGZsb2F0IGZvbnRT
aXplID0gMDsKICAgICBzd2l0Y2ggKHByb3BJZCkgewogICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENh
cHRpb246CkBAIC0zNjEsNyArMjY1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXAKICAgICAg
ICAgaWYgKCFzbWFsbFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgewogICAgICAgICAgICAg
Tk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwogICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmlj
cygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IG1ldHJpY3MubGZTbUNhcHRpb25G
b250LmxmRmFjZU5hbWU7CisgICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRy
aWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZlNtQ2FwdGlv
bkZvbnQubGZGYWNlTmFtZSkpOwogICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6
ZShtZXRyaWNzLmxmU21DYXB0aW9uRm9udCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBA
IC0zNzAsNyArMjc0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Gb250
KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXAKICAgICAgICAgaWYgKCFt
ZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7CiAgICAgICAgICAgICBOT05DTElFTlRNRVRSSUNT
IG1ldHJpY3M7CiAgICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAg
ICAgICAgICAgIGZhY2VOYW1lID0gbWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWU7CisgICAg
ICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmTWVudUZvbnQubGZGYWNl
TmFtZSwgd2NzbGVuKG1ldHJpY3MubGZNZW51Rm9udC5sZkZhY2VOYW1lKSk7CiAgICAgICAgICAg
ICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZNZW51Rm9udCk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC00MDAsOSArMzA0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXAKICAgICAgICAgY2FjaGVkRGVzYyA9ICZmb250RGVzY3JpcHRpb247CiAKICAgICBpZiAo
Zm9udFNpemUpIHsKLSAgICAgICAgQVNTRVJUKGZhY2VOYW1lKTsKLSAgICAgICAgY2FjaGVkRGVz
Yy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoQXRvbWljU3RyaW5nKGZhY2VOYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NzbGVu
KGZhY2VOYW1lKSkpOworICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWls
eShmYWNlTmFtZSk7CiAgICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUp
OwogICAgICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6
Tm9GYW1pbHkpOwogICAgICAgICBjYWNoZWREZXNjLT5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXpl
KTsKQEAgLTQxMiwxMSArMzE0LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0
ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXAKICAgICBmb250
RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKIH0KIAotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1X
aW46Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IHJldHVybiAwOwotfQotCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CiAgICAgLy8gVGhlc2Ugc2l6ZXMg
bWF0Y2ggd2hhdCBXaW5YUCBkcmF3cyBmb3IgdmFyaW91cyBtZW51cy4KQEAgLTQzMSwyNSArMzI4
LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAg
IC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBo
YXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMg
d3JvbmcgYnV0IG5lY2Vzc2FyeQotICAgIC8vIGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3gu
ICBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsCi0gICAgLy8gcXVlcnlpbmcg
dGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yIHRoZSBo
aWdoZXIKLSAgICAvLyBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkg
c2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZQotICAgIC8vIGNhbid0IHJlbHkgb24gdGhlIHRoZW1l
J3MgbWV0cmljcy4KLSAgICBjb25zdCBJbnRTaXplIHNpemUoMTMsIDEzKTsKLSAgICBzZXRTaXpl
SWZBdXRvKHN0eWxlLCBzaXplKTsKKyAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7CiB9
Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRSYWRpbyhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQogewotICAgIC8vIFVzZSBzYW1lIHNpemluZyBmb3IgcmFkaW8gYm94IGFzIGNo
ZWNrYm94LgotICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7CisgICAgcmV0dXJuIHBhaW50QnV0
dG9uKG8sIGksIHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCkBAIC00ODMsMTc4ICszNjgsOSBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNjYWxlIHRoZSBi
dXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0gICAgaW50
IGNhbmNlbEJ1dHRvblNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1
dHRvblNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2Vs
QnV0dG9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6
ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXpl
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHI7
Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5w
YXJlbnQoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFJlbmRl
ckJveCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwotCi0gICAg
SW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgp
OwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUg
YW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAgICBib3VuZHMuc2V0SGVpZ2h0KHN0
ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJv
dW5kcy5oZWlnaHQoKSkpKTsKLSAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLmhlaWdodCgpKTsK
LQotICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gs
IHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8v
IGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRl
bmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgYm91bmRzLnNldFkocGFyZW50
Qm94LnkoKSArIChwYXJlbnRCb3guaGVpZ2h0KCkgLSBib3VuZHMuaGVpZ2h0KCkgKyAxKSAvIDIp
OwotCi0gICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgic2VhcmNoQ2FuY2VsIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSog
Y2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hD
YW5jZWxQcmVzc2VkIikucmVsZWFzZVJlZigpOwotICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKGlz
UHJlc3NlZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNlbEltYWdlLCBib3VuZHMpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAx
MSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUg
YmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250
U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBtYWduaWZpZXJT
aXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9u
dFNjYWxlKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KG1hZ25pZmllclNpemUsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
SW50UmVjdCBib3VuZHMgPSByOwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFv
LT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVyQm94KG8t
PnBhcmVudCgpKTsKLSAgICBJbnRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJz
b2x1dGVDb250ZW50Qm94KCk7Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVj
b3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKLSAg
ICBib3VuZHMuc2V0SGVpZ2h0KHN0ZDo6bWluKHBhcmVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihw
YXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICBib3VuZHMuc2V0V2lk
dGgoYm91bmRzLmhlaWdodCgpKTsKLQotICAgIC8vIENlbnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0
aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9m
Zi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0
b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0
LgotICAgIGJvdW5kcy5zZXRZKHBhcmVudEJveC55KCkgKyAocGFyZW50Qm94LmhlaWdodCgpIC0g
Ym91bmRzLmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICAKLSAgICBzdGF0aWMgSW1hZ2UqIG1hZ25p
ZmllckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hNYWduaWZpZXIi
KS5yZWxlYXNlUmVmKCk7Ci0gICAgaS5jb250ZXh0LT5kcmF3SW1hZ2UobWFnbmlmaWVySW1hZ2Us
IGJvdW5kcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1XaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNjYWxl
IHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7Ci0g
ICAgaW50IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7Ci0g
ICAgaW50IG1hZ25pZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblNpemUpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyV2lk
dGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgSW50UmVjdCBib3VuZHMgPSBy
OwotICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFvLT5wYXJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghby0+cGFyZW50KCkgfHwgIW8tPnBhcmVudCgpLT5p
c0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyQm94KiBwYXJl
bnRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChvLT5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJl
bnRCb3ggPSBwYXJlbnRSZW5kZXJCb3gtPmFic29sdXRlQ29udGVudEJveCgpOwotICAgIAotICAg
IC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVu
dCdzIGJveAotICAgIGJvdW5kcy5zZXRIZWlnaHQoc3RkOjptaW4ocGFyZW50Qm94LmhlaWdodCgp
LCBib3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBib3VuZHMuc2V0V2lkdGgoc3RkOjptaW4ocGFyZW50
Qm94LndpZHRoKCksIHN0YXRpY19jYXN0PGludD4oYm91bmRzLmhlaWdodCgpICogZGVmYXVsdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25TaXplKSkpOwotCi0gICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4g
IFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVy
LCBpdCB3aWxsCi0gICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRo
ZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBi
b3VuZHMuc2V0WShwYXJlbnRCb3gueSgpICsgKHBhcmVudEJveC5oZWlnaHQoKSAtIGJvdW5kcy5o
ZWlnaHQoKSArIDEpIC8gMik7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIG1hZ25pZmllckltYWdlID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hNYWduaWZpZXJSZXN1bHRzIikucmVs
ZWFzZVJlZigpOwotICAgIGkuY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBib3Vu
ZHMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgY29udGV4dC0+YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihkZWZhdWx0TWVkaWFDb250cm9sT3BhY2l0eSk7Ci0KLSAgICAvLyBEcmF3
IGJhY2tncm91bmQuCi0gICAgQ29sb3Igb2xkRmlsbCA9IGNvbnRleHQtPmZpbGxDb2xvcigpOwot
ICAgIENvbG9yIG9sZFN0cm9rZSA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7Ci0KLSAgICBjb250
ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spOwotICAgIGNvbnRleHQtPmRyYXdSZWN0KHJlY3QpOwotCi0gICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKG9sZEZpbGwpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG9sZFN0cm9rZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBkZXN0aW5hdGlvbiByZWN0YW5nbGUg
Zm9yIHRoZSBpbWFnZSB0aGF0IGlzIGNlbnRlcmVkIGluIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwg
cm91bmRlZCBsZWZ0LCBhbmQgZG93bi4KLSAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5y
ZWN0KCk7Ci0gICAgaW1hZ2VSZWN0LnNldFkocmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGlt
YWdlLT5oZWlnaHQoKSArIDEpIC8gMik7Ci0gICAgaW1hZ2VSZWN0LnNldFgocmVjdC54KCkgKyAo
cmVjdC53aWR0aCgpIC0gaW1hZ2UtPndpZHRoKCkgKyAxKSAvIDIpOwotCi0gICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIENvbXBvc2l0ZVNvdXJjZUF0b3ApOwotICAgIGNv
bnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKLSAgICBp
ZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIElt
YWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheSIp
LnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGF1c2UiKS5yZWxlYXNlUmVmKCk7Ci0KLSAgICByZXR1
cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRp
YUVsZW1lbnQtPnBhdXNlZCgpID8gbWVkaWFQbGF5IDogbWVkaWFQYXVzZSk7Ci0jZWxzZQotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotI2lmIEVO
QUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVs
ZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmRGdWxsIikucmVsZWFzZVJlZigpOwotICAgIHN0
YXRpYyBJbWFnZSogc291bmROb25lID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRp
YVNvdW5kTm9uZSIpLnJlbGVhc2VSZWYoKTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9u
SW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/
IHNvdW5kTm9uZTogc291bmRGdWxsKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAotewotICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0byBvbiBhbGwgYnJvd3Nl
cnMuCi0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOworICAgIHJldHVybiBwYWludFNsaWRlclRyYWNrKG8sIGksIHIpOwogfQogCiAvLyBV
c2VkIHRvIHBhaW50IHVuc3R5bGVkIG1lbnVsaXN0cyAoaS5lLiB3aXRoIHRoZSBkZWZhdWx0IGJv
cmRlcikKQEAgLTcwOSw1NyArNDI1LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc2Vs
ZWN0b3IsIHN0eWxlLCBlKTsKLX0KLQotLy8gVXNlZCB0byBwYWludCBzdHlsZWQgbWVudWxpc3Rz
IChpLmUuIHdpdGggYSBub24tZGVmYXVsdCBib3JkZXIpCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1XaW46OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFp
bnRNZW51TGlzdChvLCBpLCByKTsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBMZWZ0UGFkZGluZyk7Ci19Ci0K
LWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudUxpc3RJbnRlcm5hbFBh
ZGRpbmcoc3R5bGUsIFJpZ2h0UGFkZGluZyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVt
V2luOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nKHN0eWxlLCBUb3BQYWRkaW5nKTsK
LX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudUxpc3RJbnRl
cm5hbFBhZGRpbmcoc3R5bGUsIEJvdHRvbVBhZGRpbmcpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDM7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpidXR0b25JbnRlcm5hbFBh
ZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDM7Ci19Ci0KLWludCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdAotewotICAgIHJl
dHVybiAxOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9uSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMTsKLX0KLQogLy8gc3RhdGljCiB2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNp
emUpCiB7CkBAIC03NjksNiArNDM0LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKICAgICBzbWFsbFN5c3RlbUZvbnQgPSBt
ZW51Rm9udCA9IGxhYmVsRm9udCA9IEZvbnREZXNjcmlwdGlvbigpOwogfQogCitkb3VibGUgUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdAor
eworICAgIC8vIFRoaXMgaW52b2x2ZXMgYSBzeXN0ZW0gY2FsbCwgc28gd2UgY2FjaGUgdGhlIHJl
c3VsdC4KKyAgICBzdGF0aWMgZG91YmxlIGJsaW5rSW50ZXJ2YWwgPSBxdWVyeVN5c3RlbUJsaW5r
SW50ZXJ2YWwoUmVuZGVyVGhlbWU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpKTsKKyAgICByZXR1cm4g
YmxpbmtJbnRlcnZhbDsKK30KKwogdW5zaWduZWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6ZGV0
ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0KiBvKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IFRT
X05PUk1BTDsKQEAgLTkwOSwyMiArNTgxLDQgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwYWludFRleHRGaWVsZEludGVybmFsKFJlbmRlck9iamVjdCogbywKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWludCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjptZW51TGlzdEludGVybmFsUGFk
ZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwYWRkaW5nVHlwZSkgY29uc3QKLXsKLSAgICAv
LyBUaGlzIGludGVybmFsIHBhZGRpbmcgaXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzZXItc3VwcGxp
ZWQgcGFkZGluZy4KLSAgICAvLyBNYXRjaGVzIHRoZSBGRiBiZWhhdmlvci4KLSAgICBpbnQgcGFk
ZGluZyA9IHN0eWxlZE1lbnVMaXN0SW50ZXJuYWxQYWRkaW5nW3BhZGRpbmdUeXBlXTsKLQotICAg
IC8vIFJlc2VydmUgdGhlIHNwYWNlIGZvciByaWdodCBhcnJvdyBoZXJlLiBUaGUgcmVzdCBvZiB0
aGUgcGFkZGluZyBpcyBzZXQKLSAgICAvLyBieSBhZGp1c3RNZW51TGlzdFN0eWxlLCBzaW5jZSBQ
b3B1cE1lbnVDaHJvbWl1bS5jcHAgdXNlcyB0aGUgcGFkZGluZwotICAgIC8vIGZyb20gUmVuZGVy
TWVudUxpc3QgdG8gbGF5IG91dCB0aGUgaW5kaXZpZHVhbCBpdGVtcyBpbiB0aGUgcG9wdXAuICBJ
ZgotICAgIC8vIHRoZSBNZW51TGlzdCBhY3R1YWxseSBoYXMgYXBwZWFyYW5jZSAiTm9BcHBlYXJh
bmNlIiwgdGhlbiB0aGF0IG1lYW5zIHdlCi0gICAgLy8gZG9uJ3QgZHJhdyBhIGJ1dHRvbiwgc28g
ZG9uJ3QgcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuCi0gICAgY29uc3QgaW50IGJhclR5cGUgPSBzdHls
ZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gUmlnaHRQYWRkaW5nIDogTGVmdFBhZGRpbmc7Ci0gICAg
aWYgKHBhZGRpbmdUeXBlID09IGJhclR5cGUgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBOb0Nv
bnRyb2xQYXJ0KQotICAgICAgICBwYWRkaW5nICs9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKLQotICAgIHJldHVybiBwYWRkaW5nOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtV2luLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtV2luLmgKaW5kZXggNmJhNjU5NS4uZjdlOWE4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1XaW4uaApAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBSZW5kZXJU
aGVtZUNocm9taXVtV2luX2gKICNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbl9oCiAKLSNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
LmgiCiAKICNpZiBXSU4zMgogdHlwZWRlZiB2b2lkKiBIQU5ETEU7CkBAIC00MiwxOSArNDIsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2NsYXNzaWNTdGF0ZTsK
ICAgICB9OwogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbiA6IHB1YmxpYyBSZW5k
ZXJUaGVtZSB7CisgICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbiA6IHB1YmxpYyBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYSB7CiAgICAgcHVibGljOgotICAgICAgICBSZW5kZXJUaGVtZUNo
cm9taXVtV2luKCkgeyB9Ci0gICAgICAgIH5SZW5kZXJUaGVtZUNocm9taXVtV2luKCkgeyB9Ci0K
LSAgICAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQo
KTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBj
b250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtV2luKCk7CisgICAg
ICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1XaW4oKTsKIAogICAgICAgICAvLyBBIG1l
dGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4K
ICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3Q7CkBAIC02Nyw0NiArNTgsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcigpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0Qmxp
bmtJbnRlcnZhbCgpIGNvbnN0OwotCiAgICAgICAgIC8vIFN5c3RlbSBmb250cy4KICAgICAgICAg
dmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7CiAKLSAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBhaW50QnV0
dG9uKG8sIGksIHIpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKLQorICAgICAgICAvLyBWYXJpb3VzIHBhaW50IGZ1bmN0aW9ucy4KKyAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0KICAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBh
aW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0KICAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikgeyByZXR1cm4gcGFpbnRTbGlkZXJUcmFjayhvLCBpLCByKTsgfQotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHBh
aW50VGV4dEZpZWxkKG8sIGksIHIpOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICAg
ICAgICAgLy8gTWVudUxpc3QgcmVmZXJzIHRvIGFuIHVuc3R5bGVkIG1lbnVsaXN0IChtZWFuaW5n
IGEgbWVudWxpc3Qgd2l0aG91dAogICAgICAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yIG9yIGJvcmRl
ciBzZXQpIGFuZCBNZW51TGlzdEJ1dHRvbiByZWZlcnMgdG8gYSBzdHlsZWQKQEAgLTExNywyMSAr
ODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEluIHNob3J0LCB3ZSBlaXRo
ZXIgZ28gZG93biB0aGUgTWVudUxpc3QgY29kZSBwYXRoIG9yIHRoZSBNZW51TGlzdEJ1dHRvbgog
ICAgICAgICAvLyBjb2RlcGF0aC4gV2UgbmV2ZXIgZ28gZG93biBib3RoLiBBbmQgaW4gYm90aCBj
YXNlcywgdGhleSByZW5kZXIgdGhlCiAgICAgICAgIC8vIGVudGlyZSBtZW51bGlzdC4KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAg
ICAvLyBUaGVzZSBtZXRob2RzIGRlZmluZSB0aGUgcGFkZGluZyBmb3IgdGhlIE1lbnVMaXN0J3Mg
aW5uZXIgYmxvY2suCi0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVm
dChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
LSAgICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCgpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGludCBidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBpbnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3Q7CiAK
ICAgICAgICAgLy8gUHJvdmlkZSBhIHdheSB0byBwYXNzIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBm
cm9tIHRoZSBTZXR0aW5ncyBvYmplY3QKICAgICAgICAgLy8gdG8gdGhlIHJlbmRlciB0aGVtZS4g
IEZJWE1FOiBodHRwOi8vYi8xMTI5MTg2IEEgY2xlYW5lciB3YXkgd291bGQgYmUKQEAgLTE0MCw2
ICs4OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gb2JqZWN0LgogICAgICAg
ICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKIAorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25z
dDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGRldGVybWluZVN0YXRlKFJlbmRl
ck9iamVjdCopOwogICAgICAgICB1bnNpZ25lZCBkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKFJl
bmRlck9iamVjdCopOwpAQCAtMTQ4LDkgKzEwMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqKTsKIAogICAgICAgICBi
b29sIHBhaW50VGV4dEZpZWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiwgYm9vbCk7Ci0gICAgICAgIGJvb2wgcGFp
bnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJ
bWFnZSopOwotCi0gICAgICAgIGludCBtZW51TGlzdEludGVybmFsUGFkZGluZyhSZW5kZXJTdHls
ZSosIGludCBwYWRkaW5nVHlwZSkgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>
<flag name="review"
          id="15994"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>