<?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>35087</bug_id>
          
          <creation_ts>2010-02-18 03:37:13 -0800</creation_ts>
          <short_desc>New port: EFL; adding files to WebCore/*/efl</short_desc>
          <delta_ts>2010-03-06 21:35:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Leandro Pereira">leandro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barbieri</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joone.hur</cc>
    
    <cc>kenneth</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191515</commentid>
    <comment_count>0</comment_count>
      <attachid>48994</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:37:13 -0800</bug_when>
    <thetext>Created attachment 48994
Add EFL port files in WebCore/page/efl

This patch is part of a series of patches to add an updated version of the EFL
port to the WebKit tree.

This particular patch adds files to WebCore/platform/efl, WebCore/platform/graphics/efl,
WebCore/platform/text/efl and WebCore/page/efl directories. Changes to the port-independent
parts and build system changes, will come later.

(See bug #35059 and bug #35084 for the first two patches in this series.)

It should apply cleanly on SVN rev 54651.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191516</commentid>
    <comment_count>1</comment_count>
      <attachid>48995</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:38:13 -0800</bug_when>
    <thetext>Created attachment 48995
Add EFL port files in WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191517</commentid>
    <comment_count>2</comment_count>
      <attachid>48996</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:39:11 -0800</bug_when>
    <thetext>Created attachment 48996
Add EFL port files in WebCore/platform/graphics/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191518</commentid>
    <comment_count>3</comment_count>
      <attachid>48997</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:40:15 -0800</bug_when>
    <thetext>Created attachment 48997
Add EFL port files in WebCore/platform/text/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191521</commentid>
    <comment_count>4</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:47:52 -0800</bug_when>
    <thetext>Changing platform to Other / Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191526</commentid>
    <comment_count>5</comment_count>
      <attachid>48997</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:59:48 -0800</bug_when>
    <thetext>Comment on attachment 48997
Add EFL port files in WebCore/platform/text/efl

Mark patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191527</commentid>
    <comment_count>6</comment_count>
      <attachid>48994</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 03:59:55 -0800</bug_when>
    <thetext>Comment on attachment 48994
Add EFL port files in WebCore/page/efl

Mark patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191528</commentid>
    <comment_count>7</comment_count>
      <attachid>48995</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 04:00:00 -0800</bug_when>
    <thetext>Comment on attachment 48995
Add EFL port files in WebCore/platform/efl

Mark patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191529</commentid>
    <comment_count>8</comment_count>
      <attachid>48996</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-18 04:00:07 -0800</bug_when>
    <thetext>Comment on attachment 48996
Add EFL port files in WebCore/platform/graphics/efl

Mark patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191531</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-18 04:06:16 -0800</bug_when>
    <thetext>Attachment 48995 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:488:  VK_OEM_3 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:491:  VK_OEM_4 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:494:  VK_OEM_5 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:497:  VK_OEM_6 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:500:  VK_OEM_7 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:503:  VK_OEM_8 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:506:  VK_OEM_102 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:509:  VK_PROCESSKEY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:512:  VK_PACKET is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:515:  VK_ATTN is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:518:  VK_CRSEL is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:521:  VK_EXSEL is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:524:  VK_EREOF is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:527:  VK_PLAY is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:530:  VK_ZOOM is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:533:  VK_NONAME is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:536:  VK_PA1 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:539:  VK_OEM_CLEAR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/KeyboardCodes.h:541:  VK_UNKNOWN is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/efl/ScrollbarEfl.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/PasteboardEfl.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 174 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191532</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-18 04:07:09 -0800</bug_when>
    <thetext>Attachment 48996 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/efl/IntPointEfl.cpp:34:  Evas_Point is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/FloatRectEfl.cpp:34:  Eina_Rectangle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/FontCustomPlatformData.h:29:  cairo_font_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/MediaPlayerPrivateGStreamer.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/efl/VideoSinkGStreamer.h:65:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/VideoSinkGStreamer.h:76:  webkit_video_sink_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/VideoSinkGStreamer.h:79:  webkit_video_sink_set_surface is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/efl/IntRectEfl.cpp:34:  Eina_Rectangle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191827</commentid>
    <comment_count>11</comment_count>
      <attachid>48997</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-18 22:31:25 -0800</bug_when>
    <thetext>Comment on attachment 48997
Add EFL port files in WebCore/platform/text/efl

All of these patches need changelogs, so they will be r-&apos;d on that alone, however as the larger ones are likely to require changes anyway that shouldn&apos;t be a problem :D

That said this specific patch only needs a changelog to be landable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191828</commentid>
    <comment_count>12</comment_count>
      <attachid>48996</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-18 22:43:45 -0800</bug_when>
    <thetext>Comment on attachment 48996
Add EFL port files in WebCore/platform/graphics/efl

The vast majority of this patch is code copied from the Gtk equivalents, really this should be shared code.  For that reason i suggest splitting this into two distinct patches.

One which contains the EFL changes to core WebCore types (IntRect, etc), and one that adds the EFL specific code to the Gtk platform code.

It&apos;s possible that some of the gtk code should be renamed from (for instance) FontPlatformDataGtk to FontPlatformDataCairo, and MediaPlayerGtk to MediaPlayerGStreamer, or at least the common cairo and gstreamer code be split into gstreamer and cairo specific files, with separate efl and gtk files for those pieces of functionality that aren&apos;t sharable.  The current copy-paste model seems likely to reduce the ability of the Efl port to benefit from work done on the Cairo and Gtk ports.  It may be worth discussing these file renames, etc with Gustavo, Philippe, and Ken in #webkit-gtk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191829</commentid>
    <comment_count>13</comment_count>
      <attachid>48994</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-18 22:45:20 -0800</bug_when>
    <thetext>Comment on attachment 48994
Add EFL port files in WebCore/page/efl

Only issue with this patch is the absence of a changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191830</commentid>
    <comment_count>14</comment_count>
      <attachid>48995</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-18 23:05:23 -0800</bug_when>
    <thetext>Comment on attachment 48995
Add EFL port files in WebCore/platform/efl

static HashMap&lt;String, String&gt; cookieJar;

In general we try to avoid raw globals in WebKit as they cause problems on some platforms (eg. windows) when loading webkit as a library.  But that&apos;s not too much of an issue (especially given eventually this should be replaced by a better, persistent storage)

class Cursors {
protected:
     Cursors()
         : PointerCursor(&quot;cursor/pointer&quot;),
...
The comma should be at the beginning of the next line rather than the end of the current

It looks like KeyboardCodes, KeyboardCodeMIMETypeRegistry are also candidates for refactoring to allow multiple ports to share code, which it is probably worth looking at before landing these patches, as otherwise the unshared code is unlikely to ever become shared.

RenderTheme implementation has a lot of incorrect style usage, ( for a call always goes after the function, not on the next line.

By and large these patches look okay.  My real concern is the degree of direct copying of code rather than reuse of a shared implementation.  I think for the most part that&apos;s what will need to be fixed in order to get this landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191848</commentid>
    <comment_count>15</comment_count>
    <who name="Gustavo Sverzut Barbieri">barbieri</who>
    <bug_when>2010-02-19 02:58:59 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; By and large these patches look okay.  My real concern is the degree of direct
&gt; copying of code rather than reuse of a shared implementation.  I think for the
&gt; most part that&apos;s what will need to be fixed in order to get this landed.

Yes, we noticed this. We actually improved a bit over the initial port done by INdT, but after some time it was not so simple to detect what was copied and just renamed and what was actually changed and how -- thus we still have couple of functions as you mentioned.

It is in our plans to progressively improve the whole thing by progressively merging with Gtk, renaming from &quot;*Gtk.{cpp,h}&quot; to Cairo or related. This way we avoid the burden we have been taking for a while, benefiting when API changes and not need to hunt the changes in our side.

Our hope is to get the files included and take part in the process as soon as possible. Later on apply such changes that may impact other ports (Gtk) directly, as they will need to take action and patches may hang in bugzilla for long time, requiring lots of work to keep it updated :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191990</commentid>
    <comment_count>16</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-19 11:20:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; class Cursors {
&gt; protected:
&gt;      Cursors()
&gt;          : PointerCursor(&quot;cursor/pointer&quot;),
&gt; ...
&gt; The comma should be at the beginning of the next line rather than the end of
&gt; the current

check-webkit-style didn&apos;t warn me about this.

&gt; 
&gt; It looks like KeyboardCodes, KeyboardCodeMIMETypeRegistry are also candidates
&gt; for refactoring to allow multiple ports to share code, which it is probably
&gt; worth looking at before landing these patches, as otherwise the unshared code
&gt; is unlikely to ever become shared.
&gt; 

I&apos;ve removed KeyboardCodes, as it happened to be almost identical to the shared one.

&gt;
&gt; RenderTheme implementation has a lot of incorrect style usage, ( for a call
&gt; always goes after the function, not on the next line.
&gt; 

check-webkit-style didn&apos;t warn me about this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191991</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-19 11:23:14 -0800</bug_when>
    <thetext>
&gt; check-webkit-style didn&apos;t warn me about this.

That script isn&apos;t perfect and only meant to help you. Please check the style guide and feel free to supply patches to the script to make it better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191992</commentid>
    <comment_count>18</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-19 11:26:25 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; check-webkit-style didn&apos;t warn me about this.
&gt; 
&gt; That script isn&apos;t perfect and only meant to help you. Please check the style
&gt; guide and feel free to supply patches to the script to make it better.

Yes, I know about that. But WebKit&apos;s a monster, you know :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192414</commentid>
    <comment_count>19</comment_count>
      <attachid>49200</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-22 03:58:04 -0800</bug_when>
    <thetext>Created attachment 49200
Add EFL port files in WebCore/platform/text/efl

New patch, with ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192415</commentid>
    <comment_count>20</comment_count>
      <attachid>49201</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-22 03:59:21 -0800</bug_when>
    <thetext>Created attachment 49201
Add EFL port files in WebCore/platform/graphics/efl

Now with the correct ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192416</commentid>
    <comment_count>21</comment_count>
      <attachid>49201</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-22 04:05:33 -0800</bug_when>
    <thetext>Comment on attachment 49201
Add EFL port files in WebCore/platform/graphics/efl

&gt; +        See https://bugs.webkit.org/show_bug.cgi?id=35087 for details.

Just having the bug link would be enough. As a short cut you could write webkit.org/b/35087, but r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192417</commentid>
    <comment_count>22</comment_count>
      <attachid>49202</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-22 04:07:53 -0800</bug_when>
    <thetext>Created attachment 49202
Add EFL port files in WebCore/platform/text/efl

Previous patch was submitted with wrong description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192436</commentid>
    <comment_count>23</comment_count>
      <attachid>49202</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-22 06:10:02 -0800</bug_when>
    <thetext>Comment on attachment 49202
Add EFL port files in WebCore/platform/text/efl

Rejecting patch 49202 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 2
patching file WebCore/platform/text/efl/TextBreakIteratorInternalICUEfl.cpp
patching file WebCore/ChangeLog
patch: **** malformed patch at line 17:          Reviewed by Nate Chapin.


Full output: http://webkit-commit-queue.appspot.com/results/298760</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192527</commentid>
    <comment_count>24</comment_count>
      <attachid>49226</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-22 10:54:57 -0800</bug_when>
    <thetext>Created attachment 49226
Add EFL port files in WebCore/platform/graphics/efl

Adding revised patch, with ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192530</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-22 11:01:23 -0800</bug_when>
    <thetext>Attachment 49226 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/efl/IntPointEfl.cpp:24:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
WebCore/platform/graphics/efl/MediaPlayerPrivateGStreamer.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192534</commentid>
    <comment_count>26</comment_count>
      <attachid>49227</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-22 11:03:24 -0800</bug_when>
    <thetext>Created attachment 49227
Add EFL port files in WebCore/platform/efl

Patch with coding style fixes and ChangeLog entry. It is still large, but there isn&apos;t a logical way to split it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192537</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-22 11:08:35 -0800</bug_when>
    <thetext>Attachment 49227 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/efl/FileSystemEfl.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/WidgetEfl.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/TemporaryLinkStubs.cpp:32:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/efl/TemporaryLinkStubs.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/RenderThemeEfl.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/PasteboardEfl.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/efl/ScrollbarEfl.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192542</commentid>
    <comment_count>28</comment_count>
      <attachid>49201</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 11:39:54 -0800</bug_when>
    <thetext>Comment on attachment 49201
Add EFL port files in WebCore/platform/graphics/efl

Clearing flags from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192544</commentid>
    <comment_count>29</comment_count>
      <attachid>49227</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 11:44:46 -0800</bug_when>
    <thetext>Comment on attachment 49227
Add EFL port files in WebCore/platform/efl

Half of your files are LGPL the other half are BSD.  Is this intentional?

Also, I don&apos;t understand why you&apos;re listing any copyright from 2008 (or before 2010).  If the work wasn&apos;t published, I&apos;m not sure how it can have copyright.

I think normally we leave a blank line here, but I don&apos;t think there is an official style:
+namespace WebCore {
+PassRefPtr&lt;Clipboard&gt; Editor::newGeneralClipboard(ClipboardAccessPolicy policy)

This patch would be much easier to handle in smaller pieces.

See examples from other recent ports, like BREW or Haiku, how they posted smaller patches grouped by related files.  Personally I target my patches to be &lt; 20k, although for simple patches like these that&apos;s not always needed.  The problem here is that some of this patch is simple,a nd some of it actually has real logic.  Would be much better to post the simple patches of just &quot;notImplemented()&quot; code in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192545</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 11:45:56 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 49227 [details])
&gt; Half of your files are LGPL the other half are BSD.  Is this intentional?
&gt; 
&gt; Also, I don&apos;t understand why you&apos;re listing any copyright from 2008 (or before
&gt; 2010).  If the work wasn&apos;t published, I&apos;m not sure how it can have copyright.

My comment was about how this patch seems to *add* a copyright from 2008, obviously when copying files you should maintain copyrights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193008</commentid>
    <comment_count>31</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-23 10:23:28 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 49227 [details])
&gt; Half of your files are LGPL the other half are BSD.  Is this intentional?
&gt; 

Files that were copied retained their original licenses. But we&apos;ll review all files since everything originally written by us should be LGPL-licensed.

&gt;
&gt; Also, I don&apos;t understand why you&apos;re listing any copyright from 2008 (or before
&gt; 2010).  If the work wasn&apos;t published, I&apos;m not sure how it can have copyright.
&gt; 

This port is based on previous work by INdT, which is already published. Files based on their work have their copyright intact.

&gt; 
&gt; This patch would be much easier to handle in smaller pieces.
&gt; 

I&apos;ll try to find a way to split them so they&apos;re easier to grasp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193839</commentid>
    <comment_count>32</comment_count>
      <attachid>49519</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:34:30 -0800</bug_when>
    <thetext>Created attachment 49519
Patch 1/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193840</commentid>
    <comment_count>33</comment_count>
      <attachid>49520</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:34:56 -0800</bug_when>
    <thetext>Created attachment 49520
Patch 2/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193841</commentid>
    <comment_count>34</comment_count>
      <attachid>49521</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:35:21 -0800</bug_when>
    <thetext>Created attachment 49521
Patch 3/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193842</commentid>
    <comment_count>35</comment_count>
      <attachid>49522</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:35:52 -0800</bug_when>
    <thetext>Created attachment 49522
Patch 4/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193843</commentid>
    <comment_count>36</comment_count>
      <attachid>49523</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:36:26 -0800</bug_when>
    <thetext>Created attachment 49523
Patch 5/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193844</commentid>
    <comment_count>37</comment_count>
      <attachid>49524</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:36:56 -0800</bug_when>
    <thetext>Created attachment 49524
Patch 6/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193845</commentid>
    <comment_count>38</comment_count>
      <attachid>49525</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 12:37:32 -0800</bug_when>
    <thetext>Created attachment 49525
Patch 7/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193846</commentid>
    <comment_count>39</comment_count>
      <attachid>49519</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:43:15 -0800</bug_when>
    <thetext>Comment on attachment 49519
Patch 1/7 to WebCore/platform/efl

WebCore/platform/efl/MIMETypeRegistryEfl.cpp looks like it could be shared across ports. You could consider this in a future patch.

But apart from that, looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193847</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-25 12:44:42 -0800</bug_when>
    <thetext>Attachment 49525 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/efl/TemporaryLinkStubs.cpp:32:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193849</commentid>
    <comment_count>41</comment_count>
      <attachid>49520</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:46:40 -0800</bug_when>
    <thetext>Comment on attachment 49520
Patch 2/7 to WebCore/platform/efl


&gt; +namespace {

Why this?


&gt; +Cursors* Cursors::self()
&gt; +{
&gt; +    if (!s_self)
&gt; +        s_self = new Cursors();
&gt; +
&gt; +    return s_self;
&gt; +}
&gt; +
&gt; +}
&gt; +

and why end it here?
&gt; +namespace WebCore {
&gt; +
&gt; +String submitButtonDefaultLabel()
&gt; +{
&gt; +    return String::fromUTF8(&quot;Submit&quot;);
&gt; +}

EFL provides no translation support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193850</commentid>
    <comment_count>42</comment_count>
      <attachid>49521</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:49:26 -0800</bug_when>
    <thetext>Comment on attachment 49521
Patch 3/7 to WebCore/platform/efl


&gt; +IntSize dragImageSize(DragImageRef)
&gt; +{
&gt; +    return IntSize(0, 0);
&gt; +}
&gt; +
&gt; +void deleteDragImage(DragImageRef)
&gt; +{
&gt; +}
&gt; +
&gt; +DragImageRef scaleDragImage(DragImageRef image, FloatSize)
&gt; +{
&gt; +    return image;
&gt; +}
&gt; +
&gt; +DragImageRef dissolveDragImageToFraction(DragImageRef image, float)
&gt; +{
&gt; +    return image;
&gt; +}
&gt; +

Shouldn&apos;t you add notImplemented to these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193853</commentid>
    <comment_count>43</comment_count>
      <attachid>49522</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:54:50 -0800</bug_when>
    <thetext>Comment on attachment 49522
Patch 4/7 to WebCore/platform/efl


&gt; +
&gt; +class ScrollbarThemeEfl : public ScrollbarTheme {
&gt; +public:
&gt; +    virtual ~ScrollbarThemeEfl();
&gt; +
&gt; +    virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar);
&gt; +
&gt; +    virtual void registerScrollbar(Scrollbar* scrollbar);
&gt; +    virtual void unregisterScrollbar(Scrollbar* scrollbar);
&gt; +
&gt; +
&gt; +};

excessive new lines, please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193855</commentid>
    <comment_count>44</comment_count>
      <attachid>49524</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:58:22 -0800</bug_when>
    <thetext>Comment on attachment 49524
Patch 6/7 to WebCore/platform/efl

In the future, please group the files, like the RenderThemeQt.h and RenderTheme.cpp together. I believe I saw RenderThemeQt.h in an earlier patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193856</commentid>
    <comment_count>45</comment_count>
      <attachid>49525</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 12:59:28 -0800</bug_when>
    <thetext>Comment on attachment 49525
Patch 7/7 to WebCore/platform/efl

style issues according to the bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193862</commentid>
    <comment_count>46</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-25 13:15:27 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 49525 [details])
&gt; style issues according to the bot

All ports have the same issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193908</commentid>
    <comment_count>47</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-25 16:00:53 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; (From update of attachment 49525 [details] [details])
&gt; &gt; style issues according to the bot
&gt; 
&gt; All ports have the same issue.

And it is not fixable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194072</commentid>
    <comment_count>48</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 06:39:57 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; &gt; 
&gt; &gt; All ports have the same issue.
&gt; 
&gt; And it is not fixable?
&gt;

It is software, it&apos;s almost always fixable.  :)

The easiest way (although not the best) to fix this would be adding an exception for the build/include_order rule for platform/*/TemporaryLinkStubs.cpp.

Prototypes for methods defined in this file are in SSLKeyGenerator.h (WebCore::getSupportedKeySizes and WebCore::signedPublicKeyAndChallengeString) and SystemTime.h (WebCore::userIdleTime), both in platform/.

The proper way to fix this would be implementing things currently inside TemporaryLinkStubs.cpp in two other files: SSLKeyGenerator${PORT}.cpp and SystemTime${PORT}.cpp. Some ports already implement one and/or another, and both have their respective port-independent header files.

However, I cannot fix this in all ports, as I&apos;ll be moving things around and I&apos;m not familiar with all build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194073</commentid>
    <comment_count>49</comment_count>
      <attachid>49579</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 06:46:55 -0800</bug_when>
    <thetext>Created attachment 49579
Patch 1/1 to WebCore/page/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194191</commentid>
    <comment_count>50</comment_count>
      <attachid>49606</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 11:53:02 -0800</bug_when>
    <thetext>Created attachment 49606
Patch 2/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194205</commentid>
    <comment_count>51</comment_count>
      <attachid>49606</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 12:17:28 -0800</bug_when>
    <thetext>Comment on attachment 49606
Patch 2/7 to WebCore/platform/efl

The anonymous namespace inside CursorEfl.cpp is there so the Cursors class isn&apos;t available anywhere else. This class is used only inside this file so that all the cursors are allocated once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194211</commentid>
    <comment_count>52</comment_count>
      <attachid>49613</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 12:24:54 -0800</bug_when>
    <thetext>Created attachment 49613
Patch 3/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194217</commentid>
    <comment_count>53</comment_count>
      <attachid>49614</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 12:31:36 -0800</bug_when>
    <thetext>Created attachment 49614
Patch 4/7 to WebCore/platform/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194249</commentid>
    <comment_count>54</comment_count>
      <attachid>49628</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 13:07:10 -0800</bug_when>
    <thetext>Created attachment 49628
Patch 1/3 to WebCore/platform/graphics/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194250</commentid>
    <comment_count>55</comment_count>
      <attachid>49629</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 13:07:46 -0800</bug_when>
    <thetext>Created attachment 49629
Patch 2/3 to WebCore/platform/graphics/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194251</commentid>
    <comment_count>56</comment_count>
      <attachid>49630</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-02-26 13:08:21 -0800</bug_when>
    <thetext>Created attachment 49630
Patch 3/3 to WebCore/platform/graphics/efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194259</commentid>
    <comment_count>57</comment_count>
      <attachid>49525</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-26 13:18:19 -0800</bug_when>
    <thetext>Comment on attachment 49525
Patch 7/7 to WebCore/platform/efl

Ok, I will make an exception to the style issue then. Thanks for the explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194382</commentid>
    <comment_count>58</comment_count>
      <attachid>49519</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 17:51:47 -0800</bug_when>
    <thetext>Comment on attachment 49519
Patch 1/7 to WebCore/platform/efl

Clearing flags on attachment: 49519

Committed r55328: &lt;http://trac.webkit.org/changeset/55328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194428</commentid>
    <comment_count>59</comment_count>
      <attachid>49523</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 19:53:30 -0800</bug_when>
    <thetext>Comment on attachment 49523
Patch 5/7 to WebCore/platform/efl

Clearing flags on attachment: 49523

Committed r55338: &lt;http://trac.webkit.org/changeset/55338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194440</commentid>
    <comment_count>60</comment_count>
      <attachid>49524</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 20:43:02 -0800</bug_when>
    <thetext>Comment on attachment 49524
Patch 6/7 to WebCore/platform/efl

Clearing flags on attachment: 49524

Committed r55340: &lt;http://trac.webkit.org/changeset/55340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194447</commentid>
    <comment_count>61</comment_count>
      <attachid>49525</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 21:16:09 -0800</bug_when>
    <thetext>Comment on attachment 49525
Patch 7/7 to WebCore/platform/efl

Clearing flags on attachment: 49525

Committed r55342: &lt;http://trac.webkit.org/changeset/55342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194451</commentid>
    <comment_count>62</comment_count>
      <attachid>49579</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 21:32:49 -0800</bug_when>
    <thetext>Comment on attachment 49579
Patch 1/1 to WebCore/page/efl

Clearing flags on attachment: 49579

Committed r55343: &lt;http://trac.webkit.org/changeset/55343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194453</commentid>
    <comment_count>63</comment_count>
      <attachid>49606</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 21:49:29 -0800</bug_when>
    <thetext>Comment on attachment 49606
Patch 2/7 to WebCore/platform/efl

Clearing flags on attachment: 49606

Committed r55344: &lt;http://trac.webkit.org/changeset/55344&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194455</commentid>
    <comment_count>64</comment_count>
      <attachid>49613</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-26 22:06:08 -0800</bug_when>
    <thetext>Comment on attachment 49613
Patch 3/7 to WebCore/platform/efl

Clearing flags on attachment: 49613

Committed r55345: &lt;http://trac.webkit.org/changeset/55345&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194461</commentid>
    <comment_count>65</comment_count>
      <attachid>49614</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-02-26 22:41:02 -0800</bug_when>
    <thetext>Comment on attachment 49614
Patch 4/7 to WebCore/platform/efl


&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +
&gt; +#include &quot;CString.h&quot;
&gt; +
&gt; +#include &lt;Ecore.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +String KURL::fileSystemPath() const
&gt; +{
&gt; +    char* filename = (char*)m_string.utf8().data();
&gt; +    if (!filename)
&gt; +        return String();
&gt; +
&gt; +    String path = String::fromUTF8(filename);
&gt; +    free(filename);
&gt; +    return path;


Sorry, I stopped here reading. The memory returned by .data() will be dead shortly afterwards, calling free (filename) is certainly not right. The whole method seems to be bogus though. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194493</commentid>
    <comment_count>66</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-02-27 04:42:45 -0800</bug_when>
    <thetext>I am a bit worried about the last commits. The ChangeLog says &quot;Reviewed by Nobody&quot;. We never commit ChangeLog, w/o listing the reviewer. As the comit queue also cleared the review flags, I am unable to figure out who gave r+ to these patches.

Please fix the ChangeLogs, before landing anything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194671</commentid>
    <comment_count>67</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 03:58:49 -0800</bug_when>
    <thetext>(In reply to comment #66)
&gt; I am a bit worried about the last commits. The ChangeLog says &quot;Reviewed by
&gt; Nobody&quot;. We never commit ChangeLog, w/o listing the reviewer. As the comit
&gt; queue also cleared the review flags, I am unable to figure out who gave r+ to
&gt; these patches.
&gt; 
&gt; Please fix the ChangeLogs, before landing anything else.

Apparently the ChangeLog was malformed and the commit queue committed it anyway without the substitution. Eric talked about rolling it out. I think that would be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194673</commentid>
    <comment_count>68</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:17:22 -0800</bug_when>
    <thetext>I&apos;m going to roll out the patches.

Leandro, please create some new bugs for each part of the initial landing of the port, because this bug is getting a bit out of hands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194677</commentid>
    <comment_count>69</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-03-01 04:34:51 -0800</bug_when>
    <thetext>(In reply to comment #68)
&gt; I&apos;m going to roll out the patches.

If the problem is only the Reviewed by NOBODY, and the patches have actually been reviewed, I don&apos;t think we need to rollout. Just fixing the changelog entries should be enough.
 
&gt; Leandro, please create some new bugs for each part of the initial landing of
&gt; the port, because this bug is getting a bit out of hands

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194678</commentid>
    <comment_count>70</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-03-01 04:37:17 -0800</bug_when>
    <thetext>(In reply to comment #66)
&gt; I am a bit worried about the last commits. The ChangeLog says &quot;Reviewed by
&gt; Nobody&quot;. We never commit ChangeLog, w/o listing the reviewer. As the comit
&gt; queue also cleared the review flags, I am unable to figure out who gave r+ to
&gt; these patches.

The history link in the summary of the bug keeps the r?-&gt;r+-&gt;- history, so it&apos;s verifiable that Kenneth has given r+ to the patches. I agree with fixing the changelogs so that they get merged correctly, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194679</commentid>
    <comment_count>71</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:37:50 -0800</bug_when>
    <thetext>(In reply to comment #68)
&gt; I&apos;m going to roll out the patches.
&gt; 
&gt; Leandro, please create some new bugs for each part of the initial landing of
&gt; the port, because this bug is getting a bit out of hands

Rolling out using webkit-patch just failed misserable... I&apos;m now back in 2008
in my history and now I have no webkit-patch as that didn&apos;t exist then :-). So
much for automated tools.

Should we rollout or just change the ChangeLogs ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194681</commentid>
    <comment_count>72</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:43:28 -0800</bug_when>
    <thetext>OK, the cq didn&apos;t set the reviewed by name, as the ChangeLogs were created manually (though with spaces as required)

The issues comes from the (OOPS!!!) being left out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194683</commentid>
    <comment_count>73</comment_count>
      <attachid>49628</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:46:11 -0800</bug_when>
    <thetext>Comment on attachment 49628
Patch 1/3 to WebCore/platform/graphics/efl

r- due to ChangeLog missing the (OOPS!!!) part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194684</commentid>
    <comment_count>74</comment_count>
      <attachid>49629</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:46:37 -0800</bug_when>
    <thetext>Comment on attachment 49629
Patch 2/3 to WebCore/platform/graphics/efl

cq- due to ChangeLog missing the (OOPS!!!) part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194685</commentid>
    <comment_count>75</comment_count>
      <attachid>49628</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:47:42 -0800</bug_when>
    <thetext>Comment on attachment 49628
Patch 1/3 to WebCore/platform/graphics/efl

cq- due to ChangeLog missing the (OOPS!!!) part. The patch as such can be reviewed, but as the author is not a committer will have to be landed manually or though the commit-queue, essentially making this a r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194686</commentid>
    <comment_count>76</comment_count>
      <attachid>49630</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:48:03 -0800</bug_when>
    <thetext>Comment on attachment 49630
Patch 3/3 to WebCore/platform/graphics/efl

cq- due to ChangeLog missing the (OOPS!!!) part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194690</commentid>
    <comment_count>77</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 04:58:22 -0800</bug_when>
    <thetext>Leandro could you please clone this bug and create other ones? You might have to clean the flags, I&apos;m not really sure. Just check afterward if the r? patches are still showing up in the review queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194724</commentid>
    <comment_count>78</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-01 09:57:52 -0800</bug_when>
    <thetext>(In reply to comment #77)
&gt; Leandro could you please clone this bug and create other ones? You might have
&gt; to clean the flags, I&apos;m not really sure. Just check afterward if the r? patches
&gt; are still showing up in the review queue

I&apos;ve cloned this bug as bug #35531.

I&apos;m cleaning the flags for r? patches, and then create a bug report for each directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194731</commentid>
    <comment_count>79</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-01 10:40:12 -0800</bug_when>
    <thetext>(In reply to comment #71)
&gt; Rolling out using webkit-patch just failed misserable... I&apos;m now back in 2008
&gt; in my history and now I have no webkit-patch as that didn&apos;t exist then :-). So
&gt; much for automated tools.

I would love to know more about this failure.  &quot;rollout&quot; takes a revision argument.  Did you pass it a bug number instead?

The suggestion of rolling them out was mostly in response to Oliver Hunt emailing me about the bad commit.  As the administrator of the commit-queue it doesn&apos;t make much sense for me to do anything other than roll out patches when they&apos;re wrong, as I&apos;m often completely removed from the bugs in question (and there sure are a lot of them per day!)

I think a commit to just fix the changeLog would be fine.  These aren&apos;t particularly important patches in the grand scheme of things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194732</commentid>
    <comment_count>80</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-01 10:42:33 -0800</bug_when>
    <thetext>(In reply to comment #79)
&gt; These aren&apos;t
&gt; particularly important patches in the grand scheme of things.

I mean no disrespect to these patches of course. :)  I just meant to point out that these only affect one (incomplete) port and do not change security issues, or core features which affect all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194760</commentid>
    <comment_count>81</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-03-01 12:19:37 -0800</bug_when>
    <thetext>
&gt; I would love to know more about this failure.  &quot;rollout&quot; takes a revision
&gt; argument.  Did you pass it a bug number instead?

I did pass the revision, but I believe without the r. Can that be the problem?

&gt; The suggestion of rolling them out was mostly in response to Oliver Hunt
&gt; emailing me about the bad commit.  As the administrator of the commit-queue it
&gt; doesn&apos;t make much sense for me to do anything other than roll out patches when
&gt; they&apos;re wrong, as I&apos;m often completely removed from the bugs in question (and
&gt; there sure are a lot of them per day!)

Yes, I agree with that.

&gt; I think a commit to just fix the changeLog would be fine.  These aren&apos;t
&gt; particularly important patches in the grand scheme of things.

I have done so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196040</commentid>
    <comment_count>82</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-04 06:51:25 -0800</bug_when>
    <thetext>I am closing this bug, as other patches will have a bug report of their own.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48994</attachid>
            <date>2010-02-18 03:37:13 -0800</date>
            <delta_ts>2010-02-26 06:46:55 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/page/efl</desc>
            <filename>webkit-efl-port-webcore_page_efl.diff</filename>
            <type>text/plain</type>
            <size>10595</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9lZmwvQWNjZXNzaWJpbGl0eU9iamVjdEVmbC5jcHAg
Yi9XZWJDb3JlL3BhZ2UvZWZsL0FjY2Vzc2liaWxpdHlPYmplY3RFZmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1N2MzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BhZ2UvZWZsL0FjY2Vzc2liaWxpdHlPYmplY3RFZmwuY3BwCkBAIC0wLDAgKzEsMzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxp
dHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwIGIvV2ViQ29y
ZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGM1ZjAwMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9lZmwv
RHJhZ0NvbnRyb2xsZXJFZmwuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEcmFnRGF0YS5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6TGlua0RyYWdCb3JkZXJJbnNldCA9IDI7Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6Ok1h
eE9yaWdpbmFsSW1hZ2VBcmVhID0gMTUwMCAqIDE1MDA7Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xs
ZXI6OkRyYWdJY29uUmlnaHRJbnNldCA9IDc7Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRy
YWdJY29uQm90dG9tSW5zZXQgPSAzOworCitjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJh
Z0ltYWdlQWxwaGEgPSAwLjc1ZjsKKworYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93
bigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKK3sKKyAgICBpZiAoZHJhZ0Rh
dGEtPmNvbnRhaW5zVVJMKCkpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKKwor
ICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKK30KKworY29uc3QgSW50U2l6ZSYgRHJhZ0Nv
bnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXpl
IG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOworCisgICAgcmV0dXJuIG1heERyYWdJbWFnZVNp
emU7Cit9CisKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbURyYWcoKQor
e30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3Bw
IGIvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRmNWMyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bh
Z2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0
IChDKSAyMDA5LDIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAo
QykgMjAwOSwyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmRFZmwu
aCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBk
b3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5ID0gMC4wOworCitzdGF0aWMgYm9vbCBp
c0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIHJldHVybiBl
dmVudAorICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpCisgICAg
ICAgICYmIGV2ZW50LT5hbHRLZXkoKQorICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmllcigp
ID09ICJVKzAwMDkiOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNU
b0xpbmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIHJldHVybiBpc0tleWJv
YXJkT3B0aW9uVGFiKGV2ZW50KTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbENv
bnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQoreworICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50
YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAwOworCisgICAg
aWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KHRhcmdldCktPndpZGdldCgpKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lk
Z2V0KQoreworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRn
ZXQtPndpZGdldCgpKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxF
dmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCogd2lkZ2V0KQor
eworICAgIEFTU0VSVCh3aWRnZXQpOworICAgIGlmICghd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZl
bnQpOworfQorCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFn
Z2luZ0NsaXBib2FyZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBDbGlwYm9hcmRFZmwoQ2xp
cGJvYXJkV3JpdGFibGUsIHRydWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNl
UHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBG
cmFtZSogc3ViZnJhbWUpCit7CisgICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVByZXNzRXZlbnQobWV2LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSwgSGl0VGVzdFJlc3VsdCogaG92
ZXJlZE5vZGUpCit7CisgICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZU1v
dmVFdmVudChtZXYuZXZlbnQoKSwgaG92ZXJlZE5vZGUpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICBz
dWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KG1ldi5ldmVu
dCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQgRXZlbnRIYW5kbGVyOjphY2Nl
c3NLZXlNb2RpZmllcnMoKQoreworICAgIHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkFs
dEtleTsKK30KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9lZmwvRnJhbWVFZmwuY3BwIGIv
V2ViQ29yZS9wYWdlL2VmbC9GcmFtZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzgzZGY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9lZmwvRnJh
bWVFZmwuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5k
VCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQo=
</data>
<flag name="review"
          id="31744"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48995</attachid>
            <date>2010-02-18 03:38:13 -0800</date>
            <delta_ts>2010-02-22 11:03:24 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/efl</desc>
            <filename>webkit-efl-port-webcore_platform_efl.diff</filename>
            <type>text/plain</type>
            <size>175149</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjZlZjUxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DbGlwYm9hcmRFZmwuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRF
ZmwuaCIKKworI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxD
bGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkKK3sKKyAgICByZXR1cm4gbmV3
IENsaXBib2FyZEVmbChwb2xpY3ksIGZhbHNlKTsKK30KKworQ2xpcGJvYXJkRWZsOjpDbGlwYm9h
cmRFZmwoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZykKKyAg
ICA6IENsaXBib2FyZChwb2xpY3ksIGZvckRyYWdnaW5nKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0NsaXBib2FyZEVmbDo6fkNsaXBib2FyZEVmbCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDbGlwYm9hcmRFZmw6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjp3cml0
ZVBsYWluVGV4dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjpjbGVhckFsbERhdGEoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBDbGlwYm9hcmRFZmw6OmdldERhdGEoY29uc3QgU3Ry
aW5nJiwgYm9vbCAmc3VjY2VzcykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2xpcGJv
YXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBD
bGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKK30KKworUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xp
cGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkRWZsOjpkcmFnTG9jYXRpb24oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOwor
fQorCitDYWNoZWRJbWFnZSogQ2xpcGJvYXJkRWZsOjpkcmFnSW1hZ2UoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZs
OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworTm9kZSogQ2xpcGJvYXJkRWZsOjpkcmFnSW1hZ2VFbGVtZW50
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENs
aXBib2FyZEVmbDo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRFZmw6
OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDbGlwYm9hcmRFZmw6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEVmbDo6d3JpdGVV
UkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEVmbDo6d3JpdGVSYW5nZShSYW5nZSosIEZyYW1l
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEVmbDo6aGFz
RGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjY3YjQzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRFZmxfaAorI2RlZmluZSBDbGlwYm9hcmRFZmxf
aAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENhY2hlZEltYWdlOworCitjbGFzcyBDbGlwYm9hcmRFZmwgOiBwdWJsaWMgQ2xpcGJvYXJkIHsK
K3B1YmxpYzoKKyAgICBDbGlwYm9hcmRFZmwoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBib29sKTsK
KyAgICB+Q2xpcGJvYXJkRWZsKCk7CisKKworICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nJiwgYm9vbCYpIGNvbnN0OworICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKworICAgIEludFBv
aW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OworICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBj
b25zdDsKKyAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50
Jik7CisgICAgTm9kZSogZHJhZ0ltYWdlRWxlbWVudCgpOworICAgIHZvaWQgc2V0RHJhZ0ltYWdl
RWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgIHZpcnR1YWwgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBk
ZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmLCBGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSos
IEZyYW1lKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKK307Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGYxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVmbC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
dGV4dE1lbnUuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCkKKyAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCisgICAgLCBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24oMCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVu
dTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENv
bnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlv
biA9IG1lbnU7Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpwbGF0
Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0
aW9uOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cmVsZWFzZVBs
YXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51
SXRlbUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjkxMzAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNl
cyBJbmMuIDxpbmZvQHN0YWlrb3MubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJ
bnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGV4dE1lbnVJ
dGVtOjpDb250ZXh0TWVudUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVt
KENvbnRleHRNZW51KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVu
dUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlLCBDb250ZXh0TWVudUFj
dGlvbiwgY29uc3QgU3RyaW5nJiwgQ29udGV4dE1lbnUqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRN
ZW51SXRlbTo6cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQ29udGV4dE1l
bnVJdGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIEFjdGlvblR5cGU7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJ
dGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRN
ZW51QWN0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBDb250ZXh0
TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0
IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJ
dGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ29va2llSmFyRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0Nvb2tp
ZUphckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkY2RkYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0Nvb2tpZUphckVmbC5jcHAK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDb29raWVKYXIuaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGNvb2tpZUphcjsKKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBwb2xpY3lVUkwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKK30KKworU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7Cisg
ICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI5YjA0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DdXJzb3JFZmwuY3BwCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBwKQoreworICAgIG1faW1wbCA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHApOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJz
b3ImIG90aGVyKQoreworICAgIG1faW1wbCA9IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1f
aW1wbCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7CisgICAgaWYgKG1faW1wbCkgeworICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChtX2ltcGwpOworICAgICAgICBtX2ltcGwgPSAwOwor
ICAgIH0KK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
aG90c3BvdCkKKyAgICA6IG1faW1wbCgwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlZihvdGhlci5tX2ltcGwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKG1faW1wbCk7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiAqdGhp
czsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ3Vyc29ycyB7Citwcm90ZWN0ZWQ6CisgICAg
Q3Vyc29ycygpCisgICAgICAgIDogUG9pbnRlckN1cnNvcigiY3Vyc29yL3BvaW50ZXIiKSwKKyAg
ICAgICAgICBNb3ZlQ3Vyc29yKCJjdXJzb3IvbW92ZSIpLAorICAgICAgICAgIENyb3NzQ3Vyc29y
KCJjdXJzb3IvY3Jvc3MiKSwKKyAgICAgICAgICBIYW5kQ3Vyc29yKCJjdXJzb3IvaGFuZCIpLAor
ICAgICAgICAgIElCZWFtQ3Vyc29yKCJjdXJzb3IvaV9iZWFtIiksCisgICAgICAgICAgV2FpdEN1
cnNvcigiY3Vyc29yL3dhaXQiKSwKKyAgICAgICAgICBIZWxwQ3Vyc29yKCJjdXJzb3IvaGVscCIp
LAorICAgICAgICAgIEVhc3RSZXNpemVDdXJzb3IoImN1cnNvci9lYXN0X3Jlc2l6ZSIpLAorICAg
ICAgICAgIE5vcnRoUmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfcmVzaXplIiksCisgICAgICAg
ICAgTm9ydGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfZWFzdF9yZXNpemUiKSwKKyAg
ICAgICAgICBOb3J0aFdlc3RSZXNpemVDdXJzb3IoImN1cnNvci9ub3J0aF93ZXN0X3Jlc2l6ZSIp
LAorICAgICAgICAgIFNvdXRoUmVzaXplQ3Vyc29yKCJjdXJzb3Ivc291dGhfcmVzaXplIiksCisg
ICAgICAgICAgU291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivc291dGhfZWFzdF9yZXNpemUi
KSwKKyAgICAgICAgICBTb3V0aFdlc3RSZXNpemVDdXJzb3IoImN1cnNvci9zb3V0aF93ZXN0X3Jl
c2l6ZSIpLAorICAgICAgICAgIFdlc3RSZXNpemVDdXJzb3IoImN1cnNvci93ZXN0X3Jlc2l6ZSIp
LAorICAgICAgICAgIE5vcnRoU291dGhSZXNpemVDdXJzb3IoImN1cnNvci9ub3J0aF9zb3V0aF9y
ZXNpemUiKSwKKyAgICAgICAgICBFYXN0V2VzdFJlc2l6ZUN1cnNvcigiY3Vyc29yL2Vhc3Rfd2Vz
dF9yZXNpemUiKSwKKyAgICAgICAgICBOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoImN1
cnNvci9ub3J0aF9lYXN0X3NvdXRoX3dlc3RfcmVzaXplIiksCisgICAgICAgICAgTm9ydGhXZXN0
U291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0aF9lYXN0X3Jlc2l6
ZSIpLAorICAgICAgICAgIENvbHVtblJlc2l6ZUN1cnNvcigiY3Vyc29yL2NvbHVtbl9yZXNpemUi
KSwKKyAgICAgICAgICBSb3dSZXNpemVDdXJzb3IoImN1cnNvci9yb3dfcmVzaXplIiksCisgICAg
ICAgICAgTWlkZGxlUGFubmluZ0N1cnNvcigiY3Vyc29yL21pZGRsZV9wYW5uaW5nIiksCisgICAg
ICAgICAgRWFzdFBhbm5pbmdDdXJzb3IoImN1cnNvci9lYXN0X3Bhbm5pbmciKSwKKyAgICAgICAg
ICBOb3J0aFBhbm5pbmdDdXJzb3IoImN1cnNvci9ub3J0aF9wYW5uaW5nIiksCisgICAgICAgICAg
Tm9ydGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL25vcnRoX2Vhc3RfcGFubmluZyIpLAorICAg
ICAgICAgIE5vcnRoV2VzdFBhbm5pbmdDdXJzb3IoImN1cnNvci9ub3J0aF93ZXN0X3Bhbm5pbmci
KSwKKyAgICAgICAgICBTb3V0aFBhbm5pbmdDdXJzb3IoImN1cnNvci9zb3V0aF9wYW5uaW5nIiks
CisgICAgICAgICAgU291dGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRoX2Vhc3RfcGFu
bmluZyIpLAorICAgICAgICAgIFNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoImN1cnNvci9zb3V0aF93
ZXN0X3Bhbm5pbmciKSwKKyAgICAgICAgICBXZXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3dlc3Rf
cGFubmluZyIpLAorICAgICAgICAgIFZlcnRpY2FsVGV4dEN1cnNvcigiY3Vyc29yL3ZlcnRpY2Fs
X3RleHQiKSwKKyAgICAgICAgICBDZWxsQ3Vyc29yKCJjdXJzb3IvY2VsbCIpLAorICAgICAgICAg
IENvbnRleHRNZW51Q3Vyc29yKCJjdXJzb3IvY29udGV4dF9tZW51IiksCisgICAgICAgICAgTm9E
cm9wQ3Vyc29yKCJjdXJzb3Ivbm9fZHJvcCIpLAorICAgICAgICAgIENvcHlDdXJzb3IoImN1cnNv
ci9jb3B5IiksCisgICAgICAgICAgUHJvZ3Jlc3NDdXJzb3IoImN1cnNvci9wcm9ncmVzcyIpLAor
ICAgICAgICAgIEFsaWFzQ3Vyc29yKCJjdXJzb3IvYWxpYXMiKSwKKyAgICAgICAgICBOb25lQ3Vy
c29yKCJjdXJzb3Ivbm9uZSIpLAorICAgICAgICAgIE5vdEFsbG93ZWRDdXJzb3IoImN1cnNvci9u
b3RfYWxsb3dlZCIpLAorICAgICAgICAgIFpvb21JbkN1cnNvcigiY3Vyc29yL3pvb21faW4iKSwK
KyAgICAgICAgICBab29tT3V0Q3Vyc29yKCJjdXJzb3Ivem9vbV9vdXQiKSwKKyAgICAgICAgICBH
cmFiQ3Vyc29yKCJjdXJzb3IvZ3JhYiIpLAorICAgICAgICAgIEdyYWJiaW5nQ3Vyc29yKCJjdXJz
b3IvZ3JhYmJpbmciKQorICAgIHsKKyAgICB9CisKKyAgICB+Q3Vyc29ycygpCisgICAgeworICAg
IH0KKworcHVibGljOgorICAgIHN0YXRpYyBDdXJzb3JzKiBzZWxmKCk7CisgICAgc3RhdGljIEN1
cnNvcnMqIHNfc2VsZjsKKworICAgIEN1cnNvciBQb2ludGVyQ3Vyc29yOworICAgIEN1cnNvciBN
b3ZlQ3Vyc29yOworICAgIEN1cnNvciBDcm9zc0N1cnNvcjsKKyAgICBDdXJzb3IgSGFuZEN1cnNv
cjsKKyAgICBDdXJzb3IgSUJlYW1DdXJzb3I7CisgICAgQ3Vyc29yIFdhaXRDdXJzb3I7CisgICAg
Q3Vyc29yIEhlbHBDdXJzb3I7CisgICAgQ3Vyc29yIEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vy
c29yIE5vcnRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RSZXNpemVDdXJzb3I7
CisgICAgQ3Vyc29yIE5vcnRoV2VzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgU291dGhSZXNp
emVDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3Ig
U291dGhXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBXZXN0UmVzaXplQ3Vyc29yOworICAg
IEN1cnNvciBOb3J0aFNvdXRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBFYXN0V2VzdFJlc2l6
ZUN1cnNvcjsKKyAgICBDdXJzb3IgTm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOworICAg
IEN1cnNvciBOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIENvbHVt
blJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgUm93UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBN
aWRkbGVQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBFYXN0UGFubmluZ0N1cnNvcjsKKyAgICBD
dXJzb3IgTm9ydGhQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RQYW5uaW5nQ3Vy
c29yOworICAgIEN1cnNvciBOb3J0aFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBTb3V0
aFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFBhbm5pbmdDdXJzb3I7CisgICAg
Q3Vyc29yIFNvdXRoV2VzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFdlc3RQYW5uaW5nQ3Vy
c29yOworICAgIEN1cnNvciBWZXJ0aWNhbFRleHRDdXJzb3I7CisgICAgQ3Vyc29yIENlbGxDdXJz
b3I7CisgICAgQ3Vyc29yIENvbnRleHRNZW51Q3Vyc29yOworICAgIEN1cnNvciBOb0Ryb3BDdXJz
b3I7CisgICAgQ3Vyc29yIENvcHlDdXJzb3I7CisgICAgQ3Vyc29yIFByb2dyZXNzQ3Vyc29yOwor
ICAgIEN1cnNvciBBbGlhc0N1cnNvcjsKKyAgICBDdXJzb3IgTm9uZUN1cnNvcjsKKyAgICBDdXJz
b3IgTm90QWxsb3dlZEN1cnNvcjsKKyAgICBDdXJzb3IgWm9vbUluQ3Vyc29yOworICAgIEN1cnNv
ciBab29tT3V0Q3Vyc29yOworICAgIEN1cnNvciBHcmFiQ3Vyc29yOworICAgIEN1cnNvciBHcmFi
YmluZ0N1cnNvcjsKK307CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNfc2VsZiA9IDA7CisKK0N1cnNv
cnMqIEN1cnNvcnM6OnNlbGYoKQoreworICAgIGlmICghc19zZWxmKQorICAgICAgICBzX3NlbGYg
PSBuZXcgQ3Vyc29ycygpOworCisgICAgcmV0dXJuIHNfc2VsZjsKK30KKworfQorCitjb25zdCBD
dXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBv
aW50ZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+TW92ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9z
c0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Q3Jvc3NDdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNl
bGYoKS0+SGFuZEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgd2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+V2FpdEN1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29y
czo6c2VsZigpLT5IZWxwQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RSZXNpemVDdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPk5vcnRoUmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
RWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhF
YXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0UmVzaXplQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4g
Q3Vyc29yczo6c2VsZigpLT5Tb3V0aFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNv
dXRoRWFzdFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVD
dXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFJlc2l6ZUN1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gQ3Vyc29yczo6c2VsZigpLT5XZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
Pk5vcnRoU291dGhSZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RXZXN0UmVzaXpl
Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhFYXN0U291dGhXZXN0UmVz
aXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0U291dGhFYXN0
UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7
CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Q29sdW1uUmVzaXplQ3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNl
bGYoKS0+Um93UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1pZGRsZVBhbm5pbmdD
dXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk1pZGRsZVBhbm5pbmdDdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVy
biBDdXJzb3JzOjpzZWxmKCktPkVhc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IG5vcnRoUGFubmluZ0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9y
dGhQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFBhbm5pbmdDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoRWFzdFBhbm5pbmdDdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0UGFubmluZ0N1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBzb3V0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpz
ZWxmKCktPlNvdXRoUGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RQ
YW5uaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Tb3V0aEVhc3RQ
YW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3Io
KQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFBhbm5pbmdDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBD
dXJzb3JzOjpzZWxmKCktPldlc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHZl
cnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+VmVydGlj
YWxUZXh0Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPkNlbGxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29u
dGV4dE1lbnVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvbnRleHRN
ZW51Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9Ecm9wQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNv
cHlDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvcHlDdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3Jz
OjpzZWxmKCktPlByb2dyZXNzQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5BbGlhc0N1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5O
b25lQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vdEFsbG93ZWRDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgem9vbUluQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5ab29t
SW5DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+Wm9vbU91dEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBn
cmFiQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5HcmFiQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29y
czo6c2VsZigpLT5HcmFiYmluZ0N1cnNvcjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvRHJhZ0RhdGFFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0Rh
dGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWVjY2IKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EcmFnRGF0YUVmbC5jcHAKQEAg
LTAsMCArMSw4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0
byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgIkNsaXBib2FyZC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6
OmNvbnRhaW5zRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBE
cmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKK3sKK30K
KworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBEcmFn
RGF0YTo6Y3JlYXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERyYWdEYXRhOjpjb250
YWluc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRHJhZ0Rh
dGE6OmFzVVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERv
Y3VtZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0ltYWdlRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0RyYWdJbWFnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQy
YTM3MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVm
bC5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAt
IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZikKK3sKKyAgICByZXR1cm4gSW50
U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQorewor
fQorCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9h
dFNpemUpCit7CisgICAgcmV0dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVE
cmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCit7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKElt
YWdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0V2ZW50TG9vcEVmbC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUzM2ZmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5z
dGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudExvb3Au
aCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBF
dmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9GaWxlQ2hvb3NlckVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlQ2hvb3NlckVm
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2Y2FhZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0ZpbGVDaG9vc2VyRWZsLmNwcApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IElOZFQgLSBJbnN0aXR1
dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNo
b29zZXIuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9u
dCYgZm9udCwgaW50IHdpZHRoKSBjb25zdAoreworICAgIGlmICh3aWR0aCA8PSAwKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAobV9maWxlbmFtZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NzY4Y2MyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvRmlsZVN5c3RlbUVmbC5jcHAKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5o
PgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgorI2luY2x1ZGUg
PEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKyNpbmNs
dWRlIDxnbGliLmg+IC8vIFRPRE86IHJlbW92ZSBtZSBhZnRlciBmb2xsb3dpbmcgVE9ETyBpcyBz
b2x2ZWQuCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cit9CisKK2NoYXIqIGZpbGVuYW1lRnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKy8vIFdBUk5JTkc6IHRoaXMgaXMganVzdCB1c2Vk
IGJ5IHBsYXRmb3JtL25ldHdvcmsvc291cCwgdGh1cyBtdXN0IGJlIEdMSUIhISEKKy8vIFRPRE86
IG1vdmUgdGhpcyB0byBDU3RyaW5nIGFuZCB1c2UgaXQgaW5zdGVhZCBpbiBib3RoLCBiZWluZyBt
b3JlIHN0YW5kYXJkCisjaWYgUExBVEZPUk0oV0lOX09TKQorICAgIHJldHVybiBnX3N0cmR1cChz
dHJpbmcudXRmOCgpLmRhdGEoKSk7CisjZWxzZQorICAgIHJldHVybiBnX3VyaV91bmVzY2FwZV9z
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCksIDApOworI2VuZGlmCit9CisKK0NTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhh
bmRsZSkKK3sKKyAgICBjaGFyIGJ1ZmZlcltQQVRIX01BWF07CisgICAgY29uc3QgY2hhciogdG1w
RGlyID0gZ2V0ZW52KCJUTVBESVIiKTsKKworICAgIGlmICghdG1wRGlyKQorICAgICAgICB0bXBE
aXIgPSAiL3RtcCI7CisKKyAgICBpZiAoc25wcmludGYoYnVmZmVyLCBQQVRIX01BWCwgIiVzLyVz
WFhYWFhYIiwgdG1wRGlyLCBwcmVmaXgpID49IFBBVEhfTUFYKQorICAgICAgICBnb3RvIGVuZDsK
KworICAgIGhhbmRsZSA9IG1rc3RlbXAoYnVmZmVyKTsKKyAgICBpZiAoaGFuZGxlIDwgMCkKKyAg
ICAgICAgZ290byBlbmQ7CisKKyAgICByZXR1cm4gQ1N0cmluZyhidWZmZXIpOworCitlbmQ6Cisg
ICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICByZXR1cm4gQ1N0cmlu
ZygpOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5kbGUpKSB7CisgICAgICAgIGNsb3NlKGhhbmRsZSk7
CisgICAgICAgIGhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQorfQor
CitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzaXplX3QgdG90YWxCeXRlc1dyaXR0ZW4gPSAwOwor
ICAgIHNpemVfdCB0b2RvID0gbGVuZ3RoOworICAgIHdoaWxlICh0b2RvID4gMCkgeworICAgICAg
ICBzc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IHdyaXRlKGhhbmRsZSwgZGF0YSwgdG9kbyk7CisgICAg
ICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUlO
VFIgJiYgZXJybm8gIT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgfSBlbHNlIGlmIChieXRlc1dyaXR0ZW4gPiAwKSB7CisgICAgICAgICAgICB0b3RhbEJ5dGVz
V3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICBkYXRhICs9IGJ5dGVzV3JpdHRl
bjsKKyAgICAgICAgICAgIHRvZG8gLT0gYnl0ZXNXcml0dGVuOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuOworfQorCitib29sIHVubG9hZE1vZHVsZShQ
bGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgLy8gY2F1dGlvbiwgY2xvc2luZyBoYW5kbGUg
d2lsbCBtYWtlIG1lbW9yeSB2YW5pc2ggYW5kIGFueSByZW1haW5pbmcKKyAgICAvLyB0aW1lciwg
aWRsZXIsIHRocmVhZHMgb3IgYW55IG90aGVyIGxlZnQtb3ZlciB3aWxsIGNyYXNoLAorICAgIC8v
IG1heWJlIGp1c3QgaWdub3JlIHRoaXMgaXMgYSBzYWZlciBzb2x1dGlvbj8KKyAgICByZXR1cm4g
IWRsY2xvc2UobW9kdWxlKTsKK30KKworU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKK3sKKyAg
ICBjb25zdCBjaGFyICpob21lID0gZ2V0ZW52KCJIT01FIik7CisgICAgaWYgKCFob21lKSB7Cisg
ICAgICAgIGhvbWUgPSBnZXRlbnYoIlRNUERJUiIpOworICAgICAgICBpZiAoIWhvbWUpCisgICAg
ICAgICAgICBob21lID0gIi90bXAiOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChob21lKTsKK30KKworVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJp
ZXM7CisgICAgQ1N0cmluZyBjcGF0aCA9IHBhdGgudXRmOCgpOworICAgIENTdHJpbmcgY2ZpbHRl
ciA9IGZpbHRlci51dGY4KCk7CisgICAgY2hhciBmaWxlUGF0aFtQQVRIX01BWF07CisgICAgY2hh
ciogZmlsZU5hbWU7CisgICAgc2l6ZV90IGZpbGVOYW1lU3BhY2U7CisgICAgRElSKiBkaXI7CisK
KyAgICBpZiAoY3BhdGgubGVuZ3RoKCkgKyBOQU1FX01BWCA+PSBzaXplb2YoZmlsZVBhdGgpKQor
ICAgICAgICByZXR1cm4gZW50cmllczsKKyAgICAvLyBsb29wIGludmFyaWFudDogZGlyZWN0b3J5
IHBhcnQgKyAnLycKKyAgICBtZW1jcHkoZmlsZVBhdGgsIGNwYXRoLmRhdGEoKSwgY3BhdGgubGVu
Z3RoKCkpOworICAgIGZpbGVOYW1lID0gZmlsZVBhdGggKyBjcGF0aC5sZW5ndGgoKTsKKyAgICBp
ZiAoY3BhdGgubGVuZ3RoKCkgPiAwICYmIGZpbGVQYXRoW2NwYXRoLmxlbmd0aCgpIC0gMV0gIT0g
Jy8nKSB7CisgICAgICAgIGZpbGVOYW1lWzBdID0gJy8nOworICAgICAgICBmaWxlTmFtZSsrOwor
ICAgIH0KKyAgICBmaWxlTmFtZVNwYWNlID0gc2l6ZW9mKGZpbGVQYXRoKSAtIChmaWxlTmFtZSAt
IGZpbGVQYXRoKSAtIDE7CisKKyAgICBkaXIgPSBvcGVuZGlyKGNwYXRoLmRhdGEoKSk7CisgICAg
aWYgKCFkaXIpCisgICAgICAgIHJldHVybiBlbnRyaWVzOworCisgICAgc3RydWN0IGRpcmVudCog
ZGU7CisgICAgd2hpbGUgKGRlID0gcmVhZGRpcihkaXIpKSB7CisgICAgICAgIHNpemVfdCBuYW1l
TGVuOworICAgICAgICBpZiAoZGUtPmRfbmFtZVswXSA9PSAnLicpIHsKKyAgICAgICAgICAgIGlm
IChkZS0+ZF9uYW1lWzFdID09ICdcMCcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoZGUtPmRfbmFtZVsxXSA9PSAnLicgJiYgZGUtPmRfbmFtZVsyXSA9PSAnXDAn
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmbm1h
dGNoKGNmaWx0ZXIuZGF0YSgpLCBkZS0+ZF9uYW1lLCAwKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIG5hbWVMZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7CisgICAgICAgIGlmIChu
YW1lTGVuID49IGZpbGVOYW1lU3BhY2UpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gbWF5YmUg
YXNzZXJ0PyBpdCBzaG91bGQgbmV2ZXIgaGFwcGVuIGFueXdheS4uLgorCisgICAgICAgIG1lbWNw
eShmaWxlTmFtZSwgZGUtPmRfbmFtZSwgbmFtZUxlbiArIDEpOworICAgICAgICBlbnRyaWVzLmFw
cGVuZChmaWxlUGF0aCk7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcik7CisgICAgcmV0dXJuIGVu
dHJpZXM7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0tVUkxFZmwu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvS1VSTEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTFiMzZkYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL0tVUkxFZmwuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5z
dGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
CisjaW5jbHVkZSA8RWNvcmUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgS1VS
TDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIGNoYXIqIGZpbGVuYW1lID0gKGNoYXIq
KW1fc3RyaW5nLnV0ZjgoKS5kYXRhKCk7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHBhdGggPSBTdHJpbmc6OmZyb21VVEY4KGZpbGVu
YW1lKTsKKyAgICBmcmVlKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcGF0aDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvS2V5Ym9h
cmRDb2Rlcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvS2V5Ym9hcmRDb2Rlcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWEwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9LZXlib2FyZENvZGVzLmgKQEAgLTAsMCArMSw1NDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVzX2gKKyNkZWZpbmUg
S2V5Ym9hcmRDb2Rlc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVktfTEJVVFRPTiAo
MDEpIExlZnQgbW91c2UgYnV0dG9uCisvLyBWS19SQlVUVE9OICgwMikgUmlnaHQgbW91c2UgYnV0
dG9uCisvLyBWS19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHByb2Nlc3NpbmcKKy8vIFZLX01C
VVRUT04gKDA0KSBNaWRkbGUgbW91c2UgYnV0dG9uICh0aHJlZS1idXR0b24gbW91c2UpCisvLyBW
S19YQlVUVE9OMSAoMDUpCisvLyBWS19YQlVUVE9OMiAoMDYpCisKKy8vIFZLX0JBQ0sgKDA4KSBC
QUNLU1BBQ0Uga2V5Citjb25zdCBpbnQgVktfQkFDSyA9IDB4MDg7CisKKy8vIFZLX1RBQiAoMDkp
IFRBQiBrZXkKK2NvbnN0IGludCBWS19UQUIgPSAweDA5OworCisvLyBWS19DTEVBUiAoMEMpIENM
RUFSIGtleQorY29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworLy8gVktfUkVUVVJOICgwRCkK
K2NvbnN0IGludCBWS19SRVRVUk4gPSAweDBEOworCisvLyBWS19TSElGVCAoMTApIFNISUZUIGtl
eQorY29uc3QgaW50IFZLX1NISUZUID0gMHgxMDsKKworLy8gVktfQ09OVFJPTCAoMTEpIENUUkwg
a2V5Citjb25zdCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisKKy8vIFZLX01FTlUgKDEyKSBBTFQg
a2V5Citjb25zdCBpbnQgVktfTUVOVSA9IDB4MTI7CisKKy8vIFZLX1BBVVNFICgxMykgUEFVU0Ug
a2V5Citjb25zdCBpbnQgVktfUEFVU0UgPSAweDEzOworCisvLyBWS19DQVBJVEFMICgxNCkgQ0FQ
UyBMT0NLIGtleQorY29uc3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisvLyBWS19LQU5BICgx
NSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKK2NvbnN0IGludCBWS19LQU5B
ID0gMHgxNTsKKworLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUgKG1haW50YWlu
ZWQgZm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisvLyBWS19IQU5HVUwgKDE1KSBJ
TUUgSGFuZ3VsIG1vZGUKK2NvbnN0IGludCBWS19IQU5HVUwgPSAweDE1OworCisvLyBWS19KVU5K
QSAoMTcpIElNRSBKdW5qYSBtb2RlCitjb25zdCBpbnQgVktfSlVOSkEgPSAweDE3OworCisvLyBW
S19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCitjb25zdCBpbnQgVktfRklOQUwgPSAweDE4Owor
CisvLyBWS19IQU5KQSAoMTkpIElNRSBIYW5qYSBtb2RlCitjb25zdCBpbnQgVktfSEFOSkEgPSAw
eDE5OworCisvLyBWS19LQU5KSSAoMTkpIElNRSBLYW5qaSBtb2RlCitjb25zdCBpbnQgVktfS0FO
SkkgPSAweDE5OworCisvLyBWS19FU0NBUEUgKDFCKSBFU0Mga2V5Citjb25zdCBpbnQgVktfRVND
QVBFID0gMHgxQjsKKworLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0Citjb25zdCBpbnQg
VktfQ09OVkVSVCA9IDB4MUM7CisKKy8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVy
dAorY29uc3QgaW50IFZLX05PTkNPTlZFUlQgPSAweDFEOworCisvLyBWS19BQ0NFUFQgKDFFKSBJ
TUUgYWNjZXB0Citjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKworLy8gVktfTU9ERUNIQU5H
RSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0Citjb25zdCBpbnQgVktfTU9ERUNIQU5HRSA9
IDB4MUY7CisKKy8vIFZLX1NQQUNFICgyMCkgU1BBQ0VCQVIKK2NvbnN0IGludCBWS19TUEFDRSA9
IDB4MjA7CisKKy8vIFZLX1BSSU9SICgyMSkgUEFHRSBVUCBrZXkKK2NvbnN0IGludCBWS19QUklP
UiA9IDB4MjE7CisKKy8vIFZLX05FWFQgKDIyKSBQQUdFIERPV04ga2V5Citjb25zdCBpbnQgVktf
TkVYVCA9IDB4MjI7CisKKy8vIFZLX0VORCAoMjMpIEVORCBrZXkKK2NvbnN0IGludCBWS19FTkQg
PSAweDIzOworCisvLyBWS19IT01FICgyNCkgSE9NRSBrZXkKK2NvbnN0IGludCBWS19IT01FID0g
MHgyNDsKKworLy8gVktfTEVGVCAoMjUpIExFRlQgQVJST1cga2V5Citjb25zdCBpbnQgVktfTEVG
VCA9IDB4MjU7CisKKy8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5Citjb25zdCBpbnQgVktfVVAg
PSAweDI2OworCisvLyBWS19SSUdIVCAoMjcpIFJJR0hUIEFSUk9XIGtleQorY29uc3QgaW50IFZL
X1JJR0hUID0gMHgyNzsKKworLy8gVktfRE9XTiAoMjgpIERPV04gQVJST1cga2V5Citjb25zdCBp
bnQgVktfRE9XTiA9IDB4Mjg7CisKKy8vIFZLX1NFTEVDVCAoMjkpIFNFTEVDVCBrZXkKK2NvbnN0
IGludCBWS19TRUxFQ1QgPSAweDI5OworCisvLyBWS19QUklOVCAoMkEpIFBSSU5UIGtleQorY29u
c3QgaW50IFZLX1BSSU5UID0gMHgyQTsKKworLy8gVktfRVhFQ1VURSAoMkIpIEVYRUNVVEUga2V5
Citjb25zdCBpbnQgVktfRVhFQ1VURSA9IDB4MkI7CisKKy8vIFZLX1NOQVBTSE9UICgyQykgUFJJ
TlQgU0NSRUVOIGtleQorY29uc3QgaW50IFZLX1NOQVBTSE9UID0gMHgyQzsKKworLy8gVktfSU5T
RVJUICgyRCkgSU5TIGtleQorY29uc3QgaW50IFZLX0lOU0VSVCA9IDB4MkQ7CisKKy8vIFZLX0RF
TEVURSAoMkUpIERFTCBrZXkKK2NvbnN0IGludCBWS19ERUxFVEUgPSAweDJFOworCisvLyBWS19I
RUxQICgyRikgSEVMUCBrZXkKK2NvbnN0IGludCBWS19IRUxQID0gMHgyRjsKKworLy8gKDMwKSAw
IGtleQorY29uc3QgaW50IFZLXzAgPSAweDMwOworCisvLyAoMzEpIDEga2V5Citjb25zdCBpbnQg
VktfMSA9IDB4MzE7CisKKy8vICgzMikgMiBrZXkKK2NvbnN0IGludCBWS18yID0gMHgzMjsKKwor
Ly8gKDMzKSAzIGtleQorY29uc3QgaW50IFZLXzMgPSAweDMzOworCisvLyAoMzQpIDQga2V5Citj
b25zdCBpbnQgVktfNCA9IDB4MzQ7CisKKy8vICgzNSkgNSBrZXk7CisKK2NvbnN0IGludCBWS181
ID0gMHgzNTsKKworLy8gKDM2KSA2IGtleQorY29uc3QgaW50IFZLXzYgPSAweDM2OworCisvLyAo
MzcpIDcga2V5Citjb25zdCBpbnQgVktfNyA9IDB4Mzc7CisKKy8vICgzOCkgOCBrZXkKK2NvbnN0
IGludCBWS184ID0gMHgzODsKKworLy8gKDM5KSA5IGtleQorY29uc3QgaW50IFZLXzkgPSAweDM5
OworCisvLyAoNDEpIEEga2V5Citjb25zdCBpbnQgVktfQSA9IDB4NDE7CisKKy8vICg0MikgQiBr
ZXkKK2NvbnN0IGludCBWS19CID0gMHg0MjsKKworLy8gKDQzKSBDIGtleQorY29uc3QgaW50IFZL
X0MgPSAweDQzOworCisvLyAoNDQpIEQga2V5Citjb25zdCBpbnQgVktfRCA9IDB4NDQ7CisKKy8v
ICg0NSkgRSBrZXkKK2NvbnN0IGludCBWS19FID0gMHg0NTsKKworLy8gKDQ2KSBGIGtleQorY29u
c3QgaW50IFZLX0YgPSAweDQ2OworCisvLyAoNDcpIEcga2V5Citjb25zdCBpbnQgVktfRyA9IDB4
NDc7CisKKy8vICg0OCkgSCBrZXkKK2NvbnN0IGludCBWS19IID0gMHg0ODsKKworLy8gKDQ5KSBJ
IGtleQorY29uc3QgaW50IFZLX0kgPSAweDQ5OworCisvLyAoNEEpIEoga2V5Citjb25zdCBpbnQg
VktfSiA9IDB4NEE7CisKKy8vICg0QikgSyBrZXkKK2NvbnN0IGludCBWS19LID0gMHg0QjsKKwor
Ly8gKDRDKSBMIGtleQorY29uc3QgaW50IFZLX0wgPSAweDRDOworCisvLyAoNEQpIE0ga2V5Citj
b25zdCBpbnQgVktfTSA9IDB4NEQ7CisKKy8vICg0RSkgTiBrZXkKK2NvbnN0IGludCBWS19OID0g
MHg0RTsKKworLy8gKDRGKSBPIGtleQorY29uc3QgaW50IFZLX08gPSAweDRGOworCisvLyAoNTAp
IFAga2V5Citjb25zdCBpbnQgVktfUCA9IDB4NTA7CisKKy8vICg1MSkgUSBrZXkKK2NvbnN0IGlu
dCBWS19RID0gMHg1MTsKKworLy8gKDUyKSBSIGtleQorY29uc3QgaW50IFZLX1IgPSAweDUyOwor
CisvLyAoNTMpIFMga2V5Citjb25zdCBpbnQgVktfUyA9IDB4NTM7CisKKy8vICg1NCkgVCBrZXkK
K2NvbnN0IGludCBWS19UID0gMHg1NDsKKworLy8gKDU1KSBVIGtleQorY29uc3QgaW50IFZLX1Ug
PSAweDU1OworCisvLyAoNTYpIFYga2V5Citjb25zdCBpbnQgVktfViA9IDB4NTY7CisKKy8vICg1
NykgVyBrZXkKK2NvbnN0IGludCBWS19XID0gMHg1NzsKKworLy8gKDU4KSBYIGtleQorY29uc3Qg
aW50IFZLX1ggPSAweDU4OworCisvLyAoNTkpIFkga2V5Citjb25zdCBpbnQgVktfWSA9IDB4NTk7
CisKKy8vICg1QSkgWiBrZXkKK2NvbnN0IGludCBWS19aID0gMHg1QTsKKworLy8gVktfTFdJTiAo
NUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQorY29uc3Qg
aW50IFZLX0xXSU4gPSAweDVCOworCisvLyBWS19SV0lOICg1QykgUmlnaHQgV2luZG93cyBrZXkg
KE5hdHVyYWwga2V5Ym9hcmQpCitjb25zdCBpbnQgVktfUldJTiA9IDB4NUM7CisKKy8vIFZLX0FQ
UFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29uc3QgaW50IFZL
X0FQUFMgPSAweDVEOworCisvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorY29u
c3QgaW50IFZLX1NMRUVQID0gMHg1RjsKKworLy8gVktfTlVNUEFEMCAoNjApIE51bWVyaWMga2V5
cGFkIDAga2V5Citjb25zdCBpbnQgVktfTlVNUEFEMCA9IDB4NjA7CisKKy8vIFZLX05VTVBBRDEg
KDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorY29uc3QgaW50IFZLX05VTVBBRDEgPSAweDYxOwor
CisvLyBWS19OVU1QQUQyICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKK2NvbnN0IGludCBWS19O
VU1QQUQyID0gMHg2MjsKKworLy8gVktfTlVNUEFEMyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5
Citjb25zdCBpbnQgVktfTlVNUEFEMyA9IDB4NjM7CisKKy8vIFZLX05VTVBBRDQgKDY0KSBOdW1l
cmljIGtleXBhZCA0IGtleQorY29uc3QgaW50IFZLX05VTVBBRDQgPSAweDY0OworCisvLyBWS19O
VU1QQUQ1ICg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ1ID0g
MHg2NTsKKworLy8gVktfTlVNUEFENiAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Citjb25zdCBp
bnQgVktfTlVNUEFENiA9IDB4NjY7CisKKy8vIFZLX05VTVBBRDcgKDY3KSBOdW1lcmljIGtleXBh
ZCA3IGtleQorY29uc3QgaW50IFZLX05VTVBBRDcgPSAweDY3OworCisvLyBWS19OVU1QQUQ4ICg2
OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ4ID0gMHg2ODsKKwor
Ly8gVktfTlVNUEFEOSAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Citjb25zdCBpbnQgVktfTlVN
UEFEOSA9IDB4Njk7CisKKy8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5Citjb25zdCBp
bnQgVktfTVVMVElQTFkgPSAweDZBOworCisvLyBWS19BREQgKDZCKSBBZGQga2V5Citjb25zdCBp
bnQgVktfQUREID0gMHg2QjsKKworLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQor
Y29uc3QgaW50IFZLX1NFUEFSQVRPUiA9IDB4NkM7CisKKy8vIFZLX1NVQlRSQUNUICg2RCkgU3Vi
dHJhY3Qga2V5Citjb25zdCBpbnQgVktfU1VCVFJBQ1QgPSAweDZEOworCisvLyBWS19ERUNJTUFM
ICg2RSkgRGVjaW1hbCBrZXkKK2NvbnN0IGludCBWS19ERUNJTUFMID0gMHg2RTsKKworLy8gVktf
RElWSURFICg2RikgRGl2aWRlIGtleQorY29uc3QgaW50IFZLX0RJVklERSA9IDB4NkY7CisKKy8v
IFZLX0YxICg3MCkgRjEga2V5Citjb25zdCBpbnQgVktfRjEgPSAweDcwOworCisvLyBWS19GMiAo
NzEpIEYyIGtleQorY29uc3QgaW50IFZLX0YyID0gMHg3MTsKKworLy8gVktfRjMgKDcyKSBGMyBr
ZXkKK2NvbnN0IGludCBWS19GMyA9IDB4NzI7CisKKy8vIFZLX0Y0ICg3MykgRjQga2V5Citjb25z
dCBpbnQgVktfRjQgPSAweDczOworCisvLyBWS19GNSAoNzQpIEY1IGtleQorY29uc3QgaW50IFZL
X0Y1ID0gMHg3NDsKKworLy8gVktfRjYgKDc1KSBGNiBrZXkKK2NvbnN0IGludCBWS19GNiA9IDB4
NzU7CisKKy8vIFZLX0Y3ICg3NikgRjcga2V5Citjb25zdCBpbnQgVktfRjcgPSAweDc2OworCisv
LyBWS19GOCAoNzcpIEY4IGtleQorY29uc3QgaW50IFZLX0Y4ID0gMHg3NzsKKworLy8gVktfRjkg
KDc4KSBGOSBrZXkKK2NvbnN0IGludCBWS19GOSA9IDB4Nzg7CisKKy8vIFZLX0YxMCAoNzkpIEYx
MCBrZXkKK2NvbnN0IGludCBWS19GMTAgPSAweDc5OworCisvLyBWS19GMTEgKDdBKSBGMTEga2V5
Citjb25zdCBpbnQgVktfRjExID0gMHg3QTsKKworLy8gVktfRjEyICg3QikgRjEyIGtleQorY29u
c3QgaW50IFZLX0YxMiA9IDB4N0I7CisKKy8vIFZLX0YxMyAoN0MpIEYxMyBrZXkKK2NvbnN0IGlu
dCBWS19GMTMgPSAweDdDOworCisvLyBWS19GMTQgKDdEKSBGMTQga2V5Citjb25zdCBpbnQgVktf
RjE0ID0gMHg3RDsKKworLy8gVktfRjE1ICg3RSkgRjE1IGtleQorY29uc3QgaW50IFZLX0YxNSA9
IDB4N0U7CisKKy8vIFZLX0YxNiAoN0YpIEYxNiBrZXkKK2NvbnN0IGludCBWS19GMTYgPSAweDdG
OworCisvLyBWS19GMTcgKDgwSCkgRjE3IGtleQorY29uc3QgaW50IFZLX0YxNyA9IDB4ODA7CisK
Ky8vIFZLX0YxOCAoODFIKSBGMTgga2V5Citjb25zdCBpbnQgVktfRjE4ID0gMHg4MTsKKworLy8g
VktfRjE5ICg4MkgpIEYxOSBrZXkKK2NvbnN0IGludCBWS19GMTkgPSAweDgyOworCisvLyBWS19G
MjAgKDgzSCkgRjIwIGtleQorY29uc3QgaW50IFZLX0YyMCA9IDB4ODM7CisKKy8vIFZLX0YyMSAo
ODRIKSBGMjEga2V5Citjb25zdCBpbnQgVktfRjIxID0gMHg4NDsKKworLy8gVktfRjIyICg4NUgp
IEYyMiBrZXkKK2NvbnN0IGludCBWS19GMjIgPSAweDg1OworCisvLyBWS19GMjMgKDg2SCkgRjIz
IGtleQorY29uc3QgaW50IFZLX0YyMyA9IDB4ODY7CisKKy8vIFZLX0YyNCAoODdIKSBGMjQga2V5
Citjb25zdCBpbnQgVktfRjI0ID0gMHg4NzsKKworLy8gVktfTlVNTE9DSyAoOTApIE5VTSBMT0NL
IGtleQorY29uc3QgaW50IFZLX05VTUxPQ0sgPSAweDkwOworCisvLyBWS19TQ1JPTEwgKDkxKSBT
Q1JPTEwgTE9DSyBrZXkKK2NvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOworCisvLyBWS19MU0hJ
RlQgKEEwKSBMZWZ0IFNISUZUIGtleQorY29uc3QgaW50IFZLX0xTSElGVCA9IDB4QTA7CisKKy8v
IFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorY29uc3QgaW50IFZLX1JTSElGVCA9IDB4
QTE7CisKKy8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9MIGtleQorY29uc3QgaW50IFZL
X0xDT05UUk9MID0gMHhBMjsKKworLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtl
eQorY29uc3QgaW50IFZLX1JDT05UUk9MID0gMHhBMzsKKworLy8gVktfTE1FTlUgKEE0KSBMZWZ0
IE1FTlUga2V5Citjb25zdCBpbnQgVktfTE1FTlUgPSAweEE0OworCisvLyBWS19STUVOVSAoQTUp
IFJpZ2h0IE1FTlUga2V5Citjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1OworCisvLyBWS19CUk9X
U0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKK2NvbnN0IGlu
dCBWS19CUk9XU0VSX0JBQ0sgPSAweEE2OworCisvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VS
X0ZPUldBUkQgPSAweEE3OworCisvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIw
MDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1JFRlJFU0gg
PSAweEE4OworCisvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dz
ZXIgU3RvcCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1NUT1AgPSAweEE5OworCisvLyBWS19C
Uk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5Citj
b25zdCBpbnQgVktfQlJPV1NFUl9TRUFSQ0ggPSAweEFBOworCisvLyBWS19CUk9XU0VSX0ZBVk9S
SVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5Citjb25zdCBp
bnQgVktfQlJPV1NFUl9GQVZPUklURVMgPSAweEFCOworCisvLyBWS19CUk9XU0VSX0hPTUUgKEFD
KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5Citjb25zdCBpbnQg
VktfQlJPV1NFUl9IT01FID0gMHhBQzsKKworLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dz
IDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9NVVRFID0gMHhB
RDsKKworLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3du
IGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKworLy8gVktfVk9MVU1FX1VQ
IChBRikgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5Citjb25zdCBpbnQgVktfVk9MVU1F
X1VQID0gMHhBRjsKKworLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9Y
UDogTmV4dCBUcmFjayBrZXkKK2NvbnN0IGludCBWS19NRURJQV9ORVhUX1RSQUNLID0gMHhCMDsK
KworLy8gVktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMg
VHJhY2sga2V5Citjb25zdCBpbnQgVktfTUVESUFfUFJFVl9UUkFDSyA9IDB4QjE7CisKKy8vIFZL
X01FRElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5Citjb25zdCBp
bnQgVktfTUVESUFfU1RPUCA9IDB4QjI7CisKKy8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBX
aW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Citjb25zdCBpbnQgVktfTUVESUFf
UExBWV9QQVVTRSA9IDB4QjM7CisKKy8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAw
L1hQOiBTdGFydCBNYWlsIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NQUlMID0gMHhC
NDsKKworLy8gVktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2Vs
ZWN0IE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QgPSAw
eEI1OworCisvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBw
bGljYXRpb24gMSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfQVBQMSA9IDB4QjY7CisK
Ky8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAyIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9BUFAyID0gMHhCNzsKKworLy8gVktf
T0VNXzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnOzonIGtleQorY29uc3QgaW50IFZLX09FTV8xID0gMHhCQTsKKworLy8gVktfT0VN
X1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAn
Kycga2V5Citjb25zdCBpbnQgVktfT0VNX1BMVVMgPSAweEJCOworCisvLyBWS19PRU1fQ09NTUEg
KEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5
Citjb25zdCBpbnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworLy8gVktfT0VNX01JTlVTIChCRCkg
V2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQorY29u
c3QgaW50IFZLX09FTV9NSU5VUyA9IDB4QkQ7CisKKy8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Citjb25zdCBp
bnQgVktfT0VNX1BFUklPRCA9IDB4QkU7CisKKy8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKK2NvbnN0
IGludCBWS19PRU1fMiA9IDB4QkY7CisKKy8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKK2NvbnN0IGlu
dCBWS19PRU1fMyA9IDB4QzA7CisKKy8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKK2NvbnN0IGludCBW
S19PRU1fNCA9IDB4REI7CisKKy8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91
cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBG
b3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKK2NvbnN0IGludCBWS19P
RU1fNSA9IDB4REM7CisKKy8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBj
aGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3Ig
dGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKK2NvbnN0IGludCBWS19PRU1f
NiA9IDB4REQ7CisKKy8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtl
eQorY29uc3QgaW50IFZLX09FTV83ID0gMHhERTsKKworLy8gVktfT0VNXzggKERGKSBVc2VkIGZv
ciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgorY29u
c3QgaW50IFZLX09FTV84ID0gMHhERjsKKworLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAw
MC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBv
biB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorY29uc3QgaW50IFZLX09FTV8xMDIgPSAweEUyOwor
CisvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAs
IFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Citjb25zdCBpbnQgVktfUFJPQ0VTU0tF
WSA9IDB4RTU7CisKKy8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBw
YXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZL
X1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVl
IHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdN
X0tFWVVQCitjb25zdCBpbnQgVktfUEFDS0VUID0gMHhFNzsKKworLy8gVktfQVRUTiAoRjYpIEF0
dG4ga2V5Citjb25zdCBpbnQgVktfQVRUTiA9IDB4RjY7CisKKy8vIFZLX0NSU0VMIChGNykgQ3JT
ZWwga2V5Citjb25zdCBpbnQgVktfQ1JTRUwgPSAweEY3OworCisvLyBWS19FWFNFTCAoRjgpIEV4
U2VsIGtleQorY29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworLy8gVktfRVJFT0YgKEY5KSBF
cmFzZSBFT0Yga2V5Citjb25zdCBpbnQgVktfRVJFT0YgPSAweEY5OworCisvLyBWS19QTEFZIChG
QSkgUGxheSBrZXkKK2NvbnN0IGludCBWS19QTEFZID0gMHhGQTsKKworLy8gVktfWk9PTSAoRkIp
IFpvb20ga2V5Citjb25zdCBpbnQgVktfWk9PTSA9IDB4RkI7CisKKy8vIFZLX05PTkFNRSAoRkMp
IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCitjb25zdCBpbnQgVktfTk9OQU1FID0gMHhGQzsKKwor
Ly8gVktfUEExIChGRCkgUEExIGtleQorY29uc3QgaW50IFZLX1BBMSA9IDB4RkQ7CisKKy8vIFZL
X09FTV9DTEVBUiAoRkUpIENsZWFyIGtleQorY29uc3QgaW50IFZLX09FTV9DTEVBUiA9IDB4RkU7
CisKK2NvbnN0IGludCBWS19VTktOT1dOID0gMDsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL0xhbmd1YWdlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0xhbmd1YWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQ1Y2Zk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTGFuZ3VhZ2UuY3BwCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcg
ZGVmYXVsdExhbmd1YWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9jYWxp
emVkU3RyaW5nc0VmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdz
RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE2YTE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9jYWxpemVkU3RyaW5nc0VmbC5j
cHAKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4g
RHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFu
dGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgSW5zdGl0dXRvIE5va2lhIGRlIFRl
Y25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgc3VibWl0QnV0dG9uRGVmYXVsdExh
YmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiU3VibWl0Iik7Cit9CisKK1N0
cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiU3VibWl0Iik7Cit9CisKK1N0cmluZyByZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlJlc2V0Iik7Cit9CisKK1N0cmluZyBzZWFyY2hh
YmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJf
U2VhcmNoYWJsZSBJbmRleCIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJl
bCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkNob29zZSBGaWxlIik7Cit9CisK
K1N0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoIk5vIGZpbGUgc2VsZWN0ZWQiKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJPcGVuIExpbmsgaW4gTmV3IF9XaW5kb3ciKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIl9Eb3dubG9hZCBMaW5rZWQgRmlsZSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoIkNvcHkgTGluayBMb2NfYXRpb24iKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z09wZW5JbWFnZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgi
T3BlbiBfSW1hZ2UgaW4gTmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
IlNhX3ZlIEltYWdlIEFzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1h
Z2VUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkNvcF95IElt
YWdlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRv
dygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4gX0ZyYW1lIGluIE5ldyBX
aW5kb3ciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKQoreworICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkNvcHkiKTsKKyAgICBy
ZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgp
Cit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiRGVs
ZXRlIik7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdTZWxlY3RBbGwoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoIlNlbGVjdCBfQWxsIik7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiX0luc2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIik7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJJbnB1dCBfTWV0aG9kcyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6
OmZyb21VVEY4KCJHb19CYWNrIik7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3Rv
Y2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkdvX0ZvcndhcmQiKTsKKyAgICByZXR1cm4gc3Rv
Y2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKQoreworICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIlN0b3AiKTsKKyAgICBy
ZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9SZWxvYWQiKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVs
ID0gU3RyaW5nOjpmcm9tVVRGOCgiQ3V0Iik7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpCit7CisgICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiUGFzdGUiKTsKKyAgICByZXR1cm4gc3RvY2tM
YWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8gR3Vlc3NlcyBGb3VuZCIpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJfSWdub3JlIFNwZWxsaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiX0xlYXJuIFNwZWxsaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTZWFy
Y2hXZWIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfU2VhcmNoIHRoZSBXZWIi
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9Mb29rIFVwIGluIERpY3Rpb25hcnkiKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiX09wZW4gTGluayIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnSWdub3JlR3JhbW1hcigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkln
bm9yZSBfR3JhbW1hciIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdN
ZW51KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiU3BlbGxpbmcgYW5kIF9HcmFt
bWFyIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChi
b29sIHNob3cpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc2hvdyA/ICJTaG93IFNw
ZWxsaW5nIGFuZCBHcmFtbWFyIiA6ICJIaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIik7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiX0NoZWNrIERvY3VtZW50IE5vdyIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ2hlY2sgX0dyYW1tYXIgV2l0aCBTcGVsbGluZyIp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KCJfRm9udCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnQm9sZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9t
VVRGOCgiQm9sZCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnSXRhbGljKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBT
dHJpbmc6OmZyb21VVEY4KCJJdGFsaWMiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSgpCit7CisgICAgc3RhdGljIFN0cmlu
ZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiVW5kZXJsaW5lIik7CisgICAgcmV0dXJu
IHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiX091dGxpbmUiKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiSW5zcGVjdCBfRWxlbWVudCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnUmlnaHRUb0xlZnQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVGV4dERp
cmVjdGlvbk1lbnUoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKQoreworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoIk5vIHJlY2VudCBzZWFyY2hlcyIpOworfQorCitTdHJpbmcg
c2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIlJlY2VudCBzZWFyY2hlcyIpOworfQorCitTdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVj
ZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiX0NsZWFy
IHJlY2VudCBzZWFyY2hlcyIpOworfQorCitTdHJpbmcgQVhEZWZpbml0aW9uTGlzdFRlcm1UZXh0
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidGVybSIpOworfQorCitTdHJpbmcg
QVhEZWZpbml0aW9uTGlzdERlZmluaXRpb25UZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiZGVmaW5pdGlvbiIpOworfQorCitTdHJpbmcgQVhCdXR0b25BY3Rpb25WZXJiKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgicHJlc3MiKTsKK30KKworU3RyaW5nIEFY
UmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgi
c2VsZWN0Iik7Cit9CisKK1N0cmluZyBBWFRleHRGaWVsZEFjdGlvblZlcmIoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJhY3RpdmF0ZSIpOworfQorCitTdHJpbmcgQVhDaGVja2Vk
Q2hlY2tCb3hBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidW5j
aGVjayIpOworfQorCitTdHJpbmcgQVhVbmNoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJjaGVjayIpOworfQorCitTdHJpbmcgQVhMaW5r
QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoImp1bXAiKTsKK30K
KworU3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJVbmtub3duIik7Cit9CisKK1N0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBtZWRpYUVsZW1lbnRMb2FkaW5nU3Rh
dGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTG9hZGluZy4uLiIpOwor
fQorCitTdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkxpdmUgQnJvYWRjYXN0Iik7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJwYXR0ZXJuIG1pc21hdGNoIik7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgicmFuZ2Ugb3ZlcmZsb3ciKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VV
bmRlcmZsb3dUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgicmFuZ2UgdW5k
ZXJmbG93Iik7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJzdGVwIG1pc21hdGNoIik7Cit9CisK
K1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOCgidG9vIGxvbmciKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInR5cGUg
bWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInZhbHVlIG1pc3NpbmciKTsKK30K
KworU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworU3RyaW5nIEFYTWVudUxpc3RBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0xvZ2dp
bmdFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyOWM4MAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL0xvZ2dpbmdFZmwuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJ
bml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQoreworICAgIExvZ05vdFlldElt
cGxlbWVudGVkLnN0YXRlID0gV1RGTG9nQ2hhbm5lbE9uOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9NSU1FVHlwZVJlZ2lzdHJ5RWZsLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL01JTUVUeXBlUmVnaXN0cnlFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmRkOGIyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9NSU1FVHlwZVJlZ2lzdHJ5RWZsLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV4dGVuc2lvbk1hcCB7
CisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOworICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOwor
fTsKKworc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXBbXSA9IHsKKyAgICB7
ICJibXAiLCAiaW1hZ2UvYm1wIiB9LAorICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKKyAgICB7
ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAorICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAorICAg
IHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwK
KyAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWci
IH0sCisgICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgIm1u
ZyIsICJ2aWRlby94LW1uZyIgfSwKKyAgICB7ICJwYm0iLCAiaW1hZ2UveC1wb3J0YWJsZS1iaXRt
YXAiIH0sCisgICAgeyAicGdtIiwgImltYWdlL3gtcG9ydGFibGUtZ3JheW1hcCIgfSwKKyAgICB7
ICJwZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9LAorICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0s
CisgICAgeyAicHBtIiwgImltYWdlL3gtcG9ydGFibGUtcGl4bWFwIiB9LAorICAgIHsgInJzcyIs
ICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9LAorICAgIHsgInN2ZyIsICJpbWFnZS9zdmcreG1sIiB9
LAorICAgIHsgInRleHQiLCAidGV4dC9wbGFpbiIgfSwKKyAgICB7ICJ0aWYiLCAiaW1hZ2UvdGlm
ZiIgfSwKKyAgICB7ICJ0aWZmIiwgImltYWdlL3RpZmYiIH0sCisgICAgeyAidHh0IiwgInRleHQv
cGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4bWwi
LCAidGV4dC94bWwiIH0sCisgICAgeyAieHBtIiwgImltYWdlL3gteHBtIiB9LAorICAgIHsgInhz
bCIsICJ0ZXh0L3hzbCIgfSwKKyAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4bWwi
IH0sCisgICAgeyAid21sIiwgInRleHQvdm5kLndhcC53bWwiIH0sCisgICAgeyAid21sYyIsICJh
cHBsaWNhdGlvbi92bmQud2FwLndtbGMiIH0sCisgICAgeyAwLCAwIH0KK307CisKK1N0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4
dCkKK3sKKyAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOworICAgIGNvbnN0IEV4dGVuc2lvbk1h
cCAqZSA9IGV4dGVuc2lvbk1hcDsKKyAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7CisgICAgICAg
IGlmIChzID09IGUtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsK
KyAgICAgICAgKytlOworICAgIH0KKworICAgIHJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGFzdGVib2Fy
ZEVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QYXN0ZWJvYXJkRWZsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTgwM2M5Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGFzdGVib2FyZEVmbC5jcHAKQEAgLTAsMCArMSw5OCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVi
b2FyZC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCkKK3sKKyAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IG5ldyBQ
YXN0ZWJvYXJkKCk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQ7Cit9CisKK1Bhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3RlYm9hcmQ6On5Q
YXN0ZWJvYXJkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRS
YW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJv
YXJkOjpjbGVhcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQYXN0ZWJv
YXJkOjpjYW5TbWFydFJlcGxhY2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6
OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpw
bGFpblRleHQoRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9y
bUtleWJvYXJkRXZlbnRFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXli
b2FyZEV2ZW50RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Zl
OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXli
b2FyZEV2ZW50RWZsLmNwcApAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBEaWVnbyBIaWRhbGdvIEMuIEdvbnphbGV6CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgor
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gS2V5TWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBX
aW5kb3dzS2V5TWFwOworCitzdGF0aWMgS2V5TWFwIGdLZXlNYXA7CitzdGF0aWMgV2luZG93c0tl
eU1hcCBnV2luZG93c0tleU1hcDsKKworc3RhdGljIHZvaWQgY3JlYXRlS2V5TWFwKCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgU3RyaW5n
IGtleSA9IFN0cmluZzo6Zm9ybWF0KCJGJWQiLCBpKTsKKyAgICAgICAgZ0tleU1hcC5zZXQoa2V5
LCBrZXkpOworICAgIH0KKyAgICBnS2V5TWFwLnNldCgiQWx0X0wiLCAiQWx0Iik7CisgICAgZ0tl
eU1hcC5zZXQoIklTT19MZXZlbDNfU2hpZnQiLCAiQWx0Iik7CisgICAgZ0tleU1hcC5zZXQoIk1l
bnUiLCAiQWx0Iik7CisgICAgZ0tleU1hcC5zZXQoIlNoaWZ0X0wiLCAiU2hpZnQiKTsKKyAgICBn
S2V5TWFwLnNldCgiU2hpZnRfUiIsICJTaGlmdCIpOworICAgIGdLZXlNYXAuc2V0KCJEb3duIiwg
IkRvd24iKTsKKyAgICBnS2V5TWFwLnNldCgiRW5kIiwgIkVuZCIpOworICAgIGdLZXlNYXAuc2V0
KCJSZXR1cm4iLCAiRW50ZXIiKTsKKyAgICBnS2V5TWFwLnNldCgiS1BfRW50ZXIiLCAiRW50ZXIi
KTsKKyAgICBnS2V5TWFwLnNldCgiSG9tZSIsICJIb21lIik7CisgICAgZ0tleU1hcC5zZXQoIklu
c2VydCIsICJJbnNlcnQiKTsKKyAgICBnS2V5TWFwLnNldCgiTGVmdCIsICJMZWZ0Iik7CisgICAg
Z0tleU1hcC5zZXQoIkRvd24iLCAiRG93biIpOworICAgIGdLZXlNYXAuc2V0KCJOZXh0IiwgIlBh
Z2VEb3duIik7CisgICAgZ0tleU1hcC5zZXQoIlByaW9yIiwgIlBhZ2VVcCIpOworICAgIGdLZXlN
YXAuc2V0KCJSaWdodCIsICJSaWdodCIpOworICAgIGdLZXlNYXAuc2V0KCJVcCIsICJVcCIpOwor
ICAgIGdLZXlNYXAuc2V0KCJEZWxldGUiLCAiVSswMDdGIik7CisgICAgZ0tleU1hcC5zZXQoIlRh
YiIsICJVKzAwMDkiKTsKKyAgICBnS2V5TWFwLnNldCgiSVNPX0xlZnRfVGFiIiwgIlUrMDAwOSIp
OworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVXaW5kb3dzS2V5TWFwKCkKK3sKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoIlJldHVybiIsICAgICBWS19SRVRVUk4pOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiS1BfUmV0dXJuIiwgIFZLX1JFVFVSTik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJB
bHRfTCIsICAgICAgVktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJJU09fTGV2ZWwz
X1NoaWZ0IiwgVktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJNZW51IiwgICAgICAg
VktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJTaGlmdF9MIiwgICAgVktfU0hJRlQp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfUiIsICAgIFZLX1NISUZUKTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoIkNvbnRyb2xfTCIsICBWS19DT05UUk9MKTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoIkNvbnRyb2xfUiIsICBWS19DT05UUk9MKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoIlBhdXNlIiwgICAgICBWS19QQVVTRSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJC
cmVhayIsICAgICAgVktfUEFVU0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQ2Fwc19Mb2Nr
IiwgIFZLX0NBUElUQUwpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2Nyb2xsX0xvY2siLCBW
S19TQ1JPTEwpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTnVtX0xvY2siLCAgIFZLX05VTUxP
Q0spOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRXNjYXBlIiwgICAgIFZLX0VTQ0FQRSk7Cisg
ICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJUYWIiLCAgICAgICAgVktfVEFCKTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsIFZLX1RBQik7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJCYWNrU3BhY2UiLCAgVktfQkFDSyk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJTcGFj
ZSIsICAgICAgVktfU1BBQ0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTmV4dCIsICAgICAg
IFZLX05FWFQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpb3IiLCAgICAgIFZLX1BSSU9S
KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkhvbWUiLCAgICAgICBWS19IT01FKTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoIkVuZCIsICAgICAgICBWS19FTkQpOworICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiUmlnaHQiLCAgICAgIFZLX1JJR0hUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
IkxlZnQiLCAgICAgICBWS19MRUZUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlVwIiwgICAg
ICAgICBWS19VUCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJEb3duIiwgICAgICAgVktfRE9X
Tik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJQcmludCIsICAgICAgVktfUFJJTlQpOworICAg
IGdXaW5kb3dzS2V5TWFwLnNldCgiSW5zZXJ0IiwgICAgIFZLX0lOU0VSVCk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJEZWxldGUiLCAgICAgVktfREVMRVRFKTsKKworICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiY29tbWEiLCAgICAgICAgVktfT0VNX0NPTU1BKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImxlc3MiLCAgICAgICAgIFZLX09FTV9DT01NQSk7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJwZXJpb2QiLCAgICAgICBWS19PRU1fUEVSSU9EKTsKKyAgICBnV2luZG93c0tleU1hcC5z
ZXQoImdyZWF0ZXIiLCAgICAgIFZLX09FTV9QRVJJT0QpOworICAgIGdXaW5kb3dzS2V5TWFwLnNl
dCgic2VtaWNvbG9uIiwgICAgVktfT0VNXzEpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiY29s
b24iLCAgICAgICAgVktfT0VNXzEpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgic2xhc2giLCAg
ICAgICAgVktfT0VNXzIpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicXVlc3Rpb24iLCAgICAg
VktfT0VNXzIpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZ3JhdmUiLCAgICAgICAgVktfT0VN
XzMpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXNjaWl0aWxkZSIsICAgVktfT0VNXzMpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYnJhY2tldGxlZnQiLCAgVktfT0VNXzQpOworICAgIGdX
aW5kb3dzS2V5TWFwLnNldCgiYnJhY2VsZWZ0IiwgICAgVktfT0VNXzQpOworICAgIGdXaW5kb3dz
S2V5TWFwLnNldCgiYmFja3NsYXNoIiwgICAgVktfT0VNXzUpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiYmFyIiwgICAgICAgICAgVktfT0VNXzUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
YnJhY2tldHJpZ2h0IiwgVktfT0VNXzYpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYnJhY2Vy
aWdodCIsICAgVktfT0VNXzYpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXBvc3Ryb3BoZSIs
ICAgVktfT0VNXzcpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicXVvdGVkYmwiLCAgICAgVktf
T0VNXzcpOworCisgICAgLy8gQWxwaGFiZXQKKyAgICBTdHJpbmcgYWxwaGFiZXQgPSAiYWJjZGVm
Z2hpamtsbW5vcHFyc3R1dnd4eXoiOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
MjY7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nOjpmb3JtYXQoIiVjIiwgYWxw
aGFiZXRbaV0pOworICAgICAgICBnV2luZG93c0tleU1hcC5zZXQoa2V5LCBWS19BICsgaSk7Cisg
ICAgfQorCisgICAgLy8gRGlnaXRzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAx
MDsgaSsrKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBpKTsK
KyAgICAgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KGtleSwgVktfMCArIGkpOworICAgIH0KKworICAg
IC8vIFNoaWZ0ZWQgZGlnaXRzCisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJleGNsYW0iLCAgICBW
S18xKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImF0IiwgICAgICAgIFZLXzIpOworICAgIGdX
aW5kb3dzS2V5TWFwLnNldCgibnVtYmVyc2lnbiIsIFZLXzMpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiZG9sbGFyIiwgICAgVktfNCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJwZXJjZW50
IiwgICBWS181KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImFzY2lpY2lyY3VtIiwgVktfNik7
CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhbXBlcnNhbmQiLCBWS183KTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoImFzdGVyaXNrIiwgIFZLXzgpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
cGFyZW5sZWZ0IiwgVktfOSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJwYXJlbnJpZ2h0Iiwg
VktfMCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJtaW51cyIsICAgICBWS19PRU1fTUlOVVMp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgidW5kZXJzY29yZSIsIFZLX09FTV9NSU5VUyk7Cisg
ICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJlcXVhbCIsICAgICBWS19PRU1fUExVUyk7CisgICAgZ1dp
bmRvd3NLZXlNYXAuc2V0KCJwbHVzIiwgICAgICBWS19PRU1fUExVUyk7CisKKyAgICAvLyBGX1hY
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIFN0
cmluZyBrZXkgPSBTdHJpbmc6OmZvcm1hdCgiRiVkIiwgaSk7CisgICAgICAgIGdXaW5kb3dzS2V5
TWFwLnNldChrZXksIFZLX0YxICsgaSk7CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIGtleUlk
ZW50aWZpZXJGb3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUpCit7CisgICAgaWYgKGdLZXlN
YXAuaXNFbXB0eSgpKQorICAgICAgICBjcmVhdGVLZXlNYXAoKTsKKworICAgIGlmIChnS2V5TWFw
LmNvbnRhaW5zKGtleU5hbWUpKQorICAgICAgICByZXR1cm4gZ0tleU1hcC5nZXQoa2V5TmFtZSk7
CisKKyAgICByZXR1cm4ga2V5TmFtZTsKK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZv
ckV2YXNLZXlOYW1lKFN0cmluZyYga2V5TmFtZSkKK3sKKyAgICBpZiAoZ1dpbmRvd3NLZXlNYXAu
aXNFbXB0eSgpKQorICAgICAgICBjcmVhdGVXaW5kb3dzS2V5TWFwKCk7CisKKyAgICBpZiAoZ1dp
bmRvd3NLZXlNYXAuY29udGFpbnMoa2V5TmFtZSkpCisgICAgICAgIHJldHVybiBnV2luZG93c0tl
eU1hcC5nZXQoa2V5TmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVudF9LZXlfRG93biog
ZXYpCisgICAgOiBtX3R5cGUoS2V5RG93bikKKyAgICAsIG1fbWV0YUtleShldmFzX2tleV9tb2Rp
Zmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIk1ldGEiKSkKKyAgICAsIG1fc2hpZnRLZXkoZXZh
c19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJTaGlmdCIpKQorICAgICwgbV9j
dHJsS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQ29udHJvbCIp
KQorICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMs
ICJBbHQiKSkKKyAgICAsIG1fdGV4dChTdHJpbmc6OmZyb21VVEY4KGV2LT5zdHJpbmcpKQorewor
ICAgIFN0cmluZyBrZXlOYW1lID0gU3RyaW5nKGV2LT5rZXkpOworICAgIG1fa2V5SWRlbnRpZmll
ciA9IGtleUlkZW50aWZpZXJGb3JFdmFzS2V5TmFtZShrZXlOYW1lKTsKKyAgICBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisK
KyAgICAvLyBGSVhNRToKKyAgICBtX2lzS2V5cGFkID0gZmFsc2U7CisgICAgbV9hdXRvUmVwZWF0
ID0gZmFsc2U7Cit9CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50KGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiBldikKKyAgICA6IG1fdHlwZShLZXlVcCkKKyAg
ICAsIG1fbWV0YUtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIk1l
dGEiKSkKKyAgICAsIG1fc2hpZnRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2Rp
ZmllcnMsICJTaGlmdCIpKQorICAgICwgbV9jdHJsS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3Nl
dChldi0+bW9kaWZpZXJzLCAiQ29udHJvbCIpKQorICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9k
aWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJBbHQiKSkKKyAgICAsIG1fdGV4dChTdHJpbmc6
OmZyb21VVEY4KGV2LT5zdHJpbmcpKQoreworICAgIFN0cmluZyBrZXlOYW1lID0gU3RyaW5nKGV2
LT5rZXkpOworICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JFdmFzS2V5TmFt
ZShrZXlOYW1lKTsKKyAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2Rl
Rm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisKKyAgICAvLyBGSVhNRToKKyAgICBtX2lzS2V5cGFk
ID0gZmFsc2U7CisgICAgbV9hdXRvUmVwZWF0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5RG93bik7CisgICAgbV90eXBlID0gdHlwZTsKKwor
ICAgIGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7
CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAgbV93aW5kb3dzVmlydHVh
bEtleUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1
cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZv
cm1Nb3VzZUV2ZW50RWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtTW91c2VF
dmVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0ZTE1YQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtTW91c2VFdmVu
dEVmbC5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgSU5kVCAt
IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisK
KyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbGF0Zm9ybU1vdXNlRXZlbnQ6OnNldENsaWNrQ291bnQo
RXZhc19CdXR0b25fRmxhZ3MgZmxhZ3MpCit7CisgICAgaWYgKGZsYWdzICYgRVZBU19CVVRUT05f
VFJJUExFX0NMSUNLKQorICAgICAgICBtX2NsaWNrQ291bnQgPSAzOworICAgIGVsc2UgaWYgKGZs
YWdzICYgRVZBU19CVVRUT05fRE9VQkxFX0NMSUNLKQorICAgICAgICBtX2NsaWNrQ291bnQgPSAy
OworICAgIGVsc2UKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKK30KKworUGxhdGZvcm1Nb3Vz
ZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBl
diwgSW50UG9pbnQgcG9zKQorICAgIDogbV90aW1lc3RhbXAoY3VycmVudFRpbWUoKSkKKyAgICAs
IG1fc2hpZnRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJTaGlm
dCIpKQorICAgICwgbV9jdHJsS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZp
ZXJzLCAiQ29udHJvbCIpKQorICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0
KGV2LT5tb2RpZmllcnMsICJBbHQiKSkKKyAgICAsIG1fbWV0YUtleShldmFzX2tleV9tb2RpZmll
cl9pc19zZXQoZXYtPm1vZGlmaWVycywgIk1ldGEiKSkKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
SW50UG9pbnQoZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpKQorICAgICwgbV9wb3NpdGlvbihJ
bnRQb2ludChldi0+Y2FudmFzLnggLSBwb3MueCgpLCBldi0+Y2FudmFzLnkgLSBwb3MueSgpKSkK
KyAgICAsIG1fYnV0dG9uKE1vdXNlQnV0dG9uKGV2LT5idXR0b24gLSAxKSkKKyAgICAsIG1fZXZl
bnRUeXBlKE1vdXNlRXZlbnRQcmVzc2VkKQoreworICAgIHNldENsaWNrQ291bnQoZXYtPmZsYWdz
KTsKK30KKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZh
c19FdmVudF9Nb3VzZV9VcCogZXYsIEludFBvaW50IHBvcykKKyAgICA6IG1fdGltZXN0YW1wKGN1
cnJlbnRUaW1lKCkpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChl
di0+bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmll
cl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNf
a2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX21ldGFL
ZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAg
LCBtX2dsb2JhbFBvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KSkK
KyAgICAsIG1fcG9zaXRpb24oSW50UG9pbnQoZXYtPmNhbnZhcy54IC0gcG9zLngoKSwgZXYtPmNh
bnZhcy55IC0gcG9zLnkoKSkpCisgICAgLCBtX2J1dHRvbihNb3VzZUJ1dHRvbihldi0+YnV0dG9u
IC0gMSkpCisgICAgLCBtX2V2ZW50VHlwZShNb3VzZUV2ZW50UmVsZWFzZWQpCit7CisgICAgc2V0
Q2xpY2tDb3VudChldi0+ZmxhZ3MpOworfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2LCBJbnRQb2ludCBwb3Mp
CisgICAgOiBtX3RpbWVzdGFtcChjdXJyZW50VGltZSgpKQorICAgICwgbV9zaGlmdEtleShldmFz
X2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBtX2N0
cmxLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9sIikp
CisgICAgLCBtX2FsdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywg
IkFsdCIpKQorICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9k
aWZpZXJzLCAiTWV0YSIpKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihJbnRQb2ludChldi0+Y3Vy
LmNhbnZhcy54LCBldi0+Y3VyLmNhbnZhcy55KSkKKyAgICAsIG1fcG9zaXRpb24oSW50UG9pbnQo
ZXYtPmN1ci5jYW52YXMueCAtIHBvcy54KCksIGV2LT5jdXIuY2FudmFzLnkgLSBwb3MueSgpKSkK
KyAgICAsIG1fY2xpY2tDb3VudCgwKQorICAgICwgbV9idXR0b24oTW91c2VCdXR0b24oZXYtPmJ1
dHRvbnMgLSAxKSkKKyAgICAsIG1fZXZlbnRUeXBlKE1vdXNlRXZlbnRNb3ZlZCkKK3sKK30KKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTg3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBU
ZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQg
c3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2lmZGVmIEhBVkVfRUNPUkVf
WAorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDg7Cit9CisKK2ludCBzY3JlZW5E
ZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDg7Cit9CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Zsb2F0UmVjdCBzY3Jl
ZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIGludCB4ID0gMCwgeSA9IDAsIHcgPSAwLCBo
ID0gMDsKKworI2lmZGVmIEhBVkVfRUNPUkVfWAorICAgIEVjb3JlX1hfRGlzcGxheSogZGlzcGxh
eSA9IGVjb3JlX3hfZGlzcGxheV9nZXQoKTsKKyAgICBpbnQgZGVmID0gRGVmYXVsdFNjcmVlbihk
aXNwbGF5KTsKKyAgICBTY3JlZW4qIHNjcmVlbiA9IFNjcmVlbk9mRGlzcGxheShkaXNwbGF5LCBk
ZWYpOworICAgIHggPSAwOworICAgIHkgPSAwOworICAgIHcgPSBzY3JlZW4tPndpZHRoOworICAg
IGggPSBzY3JlZW4tPmhlaWdodDsKKyNlbmRpZgorCisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LCB5
LCB3LCBoKTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRn
ZXQpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVdo
ZWVsRXZlbnRFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1XaGVlbEV2ZW50
RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY4NDRkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1XaGVlbEV2ZW50RWZs
LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20uICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgIChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwOSBJTmRUIC0gSW5zdGl0dXRv
IE5va2lhIGRlIFRlY25vbG9naWEuCisgKiAgICAgICAgICAgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0geworICAgIFZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gMCwKKyAgICBI
b3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gMQorfTsKKworUGxhdGZvcm1XaGVlbEV2ZW50OjpQ
bGF0Zm9ybVdoZWVsRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYpCisgICAg
OiBtX2dyYW51bGFyaXR5KFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50KQorICAgICwgbV9pc0FjY2Vw
dGVkKGZhbHNlKQorICAgICwgbV9zaGlmdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYt
Pm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBtX2N0cmxLZXkoZXZhc19rZXlfbW9kaWZpZXJf
aXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9sIikpCisgICAgLCBtX2FsdEtleShldmFzX2tl
eV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkFsdCIpKQorICAgICwgbV9tZXRhS2V5
KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiTWV0YSIpKQorICAgICwg
bV9nbG9iYWxQb3NpdGlvbihJbnRQb2ludChldi0+Y2FudmFzLngsIGV2LT5jYW52YXMueSkpCisg
ICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KSkKK3sK
KyAgICAvLyBBIG5lZ2F0aXZlIHogdmFsdWUgbWVhbnMgKGluIEVGTCkgdGhhdCB3ZSBhcmUgc2Ny
b2xsaW5nIGRvd24sIHNvIHdlIG5lZWQKKyAgICAvLyB0byBpbnZlcnQgdGhlIHZhbHVlLgorICAg
IGlmIChldi0+ZGlyZWN0aW9uID09IFZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uKSB7CisgICAgICAg
IG1fZGVsdGFYID0gMDsKKyAgICAgICAgbV9kZWx0YVkgPSAtIGV2LT56OworICAgIH0gZWxzZSBp
ZiAoZXYtPmRpcmVjdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uKSB7CisgICAgICAg
IG1fZGVsdGFYID0gLSBldi0+ejsKKyAgICAgICAgbV9kZWx0YVkgPSAwOworICAgIH0KKworICAg
IC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9mIGxp
bmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50CisgICAgbV93aGVlbFRpY2tzWCA9IG1f
ZGVsdGFYOworICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKKyAgICBtX2RlbHRhWCAqPSBz
dGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICBt
X2RlbHRhWSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUG9wdXBNZW51
RWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BvcHVwTWVudUVmbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwOTZjMgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1BvcHVwTWVudUVmbC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNu
b2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQb3B1cE1lbnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQoreworfQorCitQb3B1cE1lbnU6On5Qb3B1cE1l
bnUoKQoreworfQorCit2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBG
cmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KCkpOworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpoaWRlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQo
KQoreworICAgIGNsaWVudCgpLT5zZXRUZXh0RnJvbUl0ZW0oY2xpZW50KCktPnNlbGVjdGVkSW5k
ZXgoKSk7Cit9CisKK2Jvb2wgUG9wdXBNZW51OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJh
bCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDVlMDM1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwu
Y3BwCkBAIC0wLDAgKzEsOTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lRWZsLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxFZGplLmg+CituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFRPRE86IGNoYW5nZSBmcm9tIG9iamVjdCBjb3VudCB0byBlY29yZV9ldmFzIHNpemUg
KGJ5dGVzKQorLy8gVE9ETzogYXMgb2JqZWN0cyBhcmUgd2VicGFnZS91c2VyIGRlZmluZWQgYW5k
IHRoZXkgY2FuIGJlIHZlcnkgbGFyZ2UuCisjZGVmaW5lIFJFTkRFUl9USEVNRV9FRkxfUEFSVF9D
QUNIRV9NQVggMzIKKworCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUqIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAoreworICAgIGNvbnN0
IHN0cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7
CisKKyAgICBpZiAoc3R5bGUtPm1pbldpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAg
ICAgc3R5bGUtPnNldE1pbldpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUt
Pm1pbkhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRNaW5I
ZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKKworICAgIGlmIChkZXNjLT5tYXgud2lkdGgoKS52
YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAg
ICAgICBzdHlsZS0+c2V0TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRoKCkpOworICAgIGlmIChkZXNj
LT5tYXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1heEhlaWdodCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRNYXhIZWlnaHQoZGVzYy0+bWF4LmhlaWdo
dCgpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKGRlc2MtPnBhZGRpbmcudG9wKCkpOwor
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBhZGRpbmcuYm90dG9tKCkpOworICAg
IHN0eWxlLT5zZXRQYWRkaW5nTGVmdChkZXNjLT5wYWRkaW5nLmxlZnQoKSk7CisgICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkpOworfQorCitib29sIFJlbmRl
clRoZW1lRWZsOjp0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hl
RW50cnkqIGNlLCBGb3JtVHlwZSB0eXBlKQoreworICAgIGNvbnN0IGNoYXIgKmZpbGUsICpncm91
cDsKKworICAgIEFTU0VSVChjZSk7CisKKyAgICBlZGplX29iamVjdF9maWxlX2dldChtX2VkamUs
ICZmaWxlLCAwKTsKKyAgICBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlwZSh0eXBlKTsKKyAg
ICBBU1NFUlQoZmlsZSk7CisgICAgQVNTRVJUKGdyb3VwKTsKKworICAgIGlmICghZWRqZV9vYmpl
Y3RfZmlsZV9zZXQoY2UtPm8sIGZpbGUsIGdyb3VwKSkgeworICAgICAgICBpbnQgZXJyID0gZWRq
ZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQoY2UtPm8pOworICAgICAgICBjb25zdCBjaGFyICplcnJt
c2cgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IGxvYWQgJyVzJyBmcm9tIHRoZW1lICVzOiAlcyIsCisgICAgICAgICAgICAgICAgICAg
ICBncm91cCwgZmlsZSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6dGhlbWVQYXJ0Q2FjaGVF
bnRyeVN1cmZhY2VDcmVhdGUoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlKQoreworICAg
IGludCB3LCBoOworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1czsKKworICAgIEFTU0VSVChjZSk7
CisgICAgQVNTRVJUKGNlLT5lZSk7CisKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChjZS0+
ZWUsIDAsIDAsICZ3LCAmaCk7CisgICAgQVNTRVJUKHcgPiAwKTsKKyAgICBBU1NFUlQoaCA+IDAp
OworCisgICAgY2UtPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YQorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKillY29yZV9ldmFzX2J1ZmZlcl9waXhlbHNfZ2V0
KGNlLT5lZSksCisgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3LCBoLCB3ICogNCk7Cisg
ICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoY2UtPnN1cmZhY2UpOworICAgIGlmIChz
dGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJD
b3VsZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAg
IGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gYWxsb2NhdGUgYSBuZXcgZW50cnkg
YW5kIGZpbGwgaXQgd2l0aCBlZGplIGdyb3VwCitzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1l
UGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRoZW1lUGFydE5ldyhGb3JtVHlw
ZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNo
ZUVudHJ5ICpjZSA9IG5ldyBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeTsKKworICAgIGlmICgh
Y2UpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJjb3VsZCBub3QgYWxsb2NhdGUgVGhlbWVQYXJ0
Q2FjaGVFbnRyeS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2UtPmVlID0g
ZWNvcmVfZXZhc19idWZmZXJfbmV3KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
aWYgKCFjZS0+ZWUpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJlY29yZV9ldmFzX2J1ZmZlcl9u
ZXcoJWQsICVkKSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGRlbGV0ZSBjZTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgY2UtPm8gPSBlZGplX29iamVjdF9hZGQoZWNvcmVfZXZhc19nZXQoY2UtPmVl
KSk7CisgICAgQVNTRVJUKGNlLT5vKTsKKyAgICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlSZXNl
dChjZSwgdHlwZSkpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGNlLT5vKTsKKyAgICAgICAg
ZWNvcmVfZXZhc19mcmVlKGNlLT5lZSk7CisgICAgICAgIGRlbGV0ZSBjZTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFjZUNyZWF0
ZShjZSkpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGNlLT5vKTsKKyAgICAgICAgZWNvcmVf
ZXZhc19mcmVlKGNlLT5lZSk7CisgICAgICAgIGRlbGV0ZSBjZTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgZXZhc19vYmplY3RfcmVzaXplKGNlLT5vLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIGV2YXNfb2JqZWN0X3Nob3coY2UtPm8pOworCisgICAgY2UtPnR5
cGUgPSB0eXBlOworICAgIGNlLT5zaXplID0gc2l6ZTsKKworICAgIG1fcGFydENhY2hlLnByZXBl
bmQoY2UpOworICAgIHJldHVybiBjZTsKK30KKworLy8ganVzdCBjaGFuZ2UgdGhlIGVkamUgZ3Jv
dXAgYW5kIHJldHVybiB0aGUgc2FtZSBlbnRyeQorc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNldChGb3Jt
VHlwZSB0eXBlLCBzdHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGNl
KQoreworICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KGNlLCB0eXBlKSkgeworICAg
ICAgICBjZS0+dHlwZSA9IEZvcm1UeXBlTGFzdDsgLy8gaW52YWxpZGF0ZQorICAgICAgICBtX3Bh
cnRDYWNoZS5hcHBlbmQoY2UpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY2UtPnR5
cGUgPSB0eXBlOworICAgIG1fcGFydENhY2hlLnByZXBlbmQoY2UpOworICAgIHJldHVybiBjZTsK
K30KKworLy8gcmVzaXplIGVudHJ5IGFuZCByZXNldCBpdAorc3RydWN0IFJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRSZXNp
emVBbmRSZXNldChGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBzdHJ1Y3QgUmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIGNlKQoreworICAgIGNhaXJvX3N1cmZh
Y2VfZmluaXNoKGNlLT5zdXJmYWNlKTsKKyAgICBlY29yZV9ldmFzX3Jlc2l6ZShjZS0+ZWUsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGNlLT5v
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgaWYgKCF0aGVtZVBhcnRDYWNo
ZUVudHJ5U3VyZmFjZUNyZWF0ZShjZSkpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGNlLT5v
KTsKKyAgICAgICAgZWNvcmVfZXZhc19mcmVlKGNlLT5lZSk7CisgICAgICAgIGRlbGV0ZSBjZTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0UmVz
ZXQodHlwZSwgY2UpOworfQorCisvLyBnZW5lcmFsIHB1cnBvc2UgZ2V0ICh3aWxsIGNyZWF0ZSwg
cmV1c2UgYW5kIGFsbCkKK3N0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRy
eSogUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0R2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgVmVjdG9yPHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5
ICo+OjppdGVyYXRvciBpdHIsIGVuZDsKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAq
Y2VfbGFzdF9zaXplID0gMDsKKyAgICBpbnQgaSwgaWR4TGFzdFNpemUgPSAtMTsKKworICAgIGl0
ciA9IG1fcGFydENhY2hlLmJlZ2luKCk7CisgICAgZW5kID0gbV9wYXJ0Q2FjaGUuZW5kKCk7Cisg
ICAgZm9yIChpID0gMDsgaXRyICE9IGVuZDsgaSsrLCBpdHIrKykgeworICAgICAgICBzdHJ1Y3Qg
VGhlbWVQYXJ0Q2FjaGVFbnRyeSAqY2UgPSAqaXRyOworICAgICAgICBpZiAoY2UtPnNpemUgPT0g
c2l6ZSkgeworICAgICAgICAgICAgaWYgKGNlLT50eXBlID09IHR5cGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNlOworICAgICAgICAgICAgY2VfbGFzdF9zaXplID0gY2U7CisgICAgICAgICAg
ICBpZHhMYXN0U2l6ZSA9IGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9wYXJ0Q2Fj
aGUuc2l6ZSgpIDwgUkVOREVSX1RIRU1FX0VGTF9QQVJUX0NBQ0hFX01BWCkKKyAgICAgICAgcmV0
dXJuIGNhY2hlVGhlbWVQYXJ0TmV3KHR5cGUsIHNpemUpOworCisgICAgaWYgKGNlX2xhc3Rfc2l6
ZSAmJiBjZV9sYXN0X3NpemUgIT0gbV9wYXJ0Q2FjaGUuZmlyc3QoKSkgeworICAgICAgICBtX3Bh
cnRDYWNoZS5yZW1vdmUoaWR4TGFzdFNpemUpOworICAgICAgICByZXR1cm4gY2FjaGVUaGVtZVBh
cnRSZXNldCh0eXBlLCBjZV9sYXN0X3NpemUpOworICAgIH0KKworICAgIFRoZW1lUGFydENhY2hl
RW50cnkqIGNlID0gbV9wYXJ0Q2FjaGUubGFzdCgpOworICAgIG1fcGFydENhY2hlLnJlbW92ZUxh
c3QoKTsKKyAgICByZXR1cm4gY2FjaGVUaGVtZVBhcnRSZXNpemVBbmRSZXNldCh0eXBlLCBzaXpl
LCBjZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0Rmx1c2goKQor
eworICAgIFZlY3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6aXRlcmF0b3IgaXRy
LCBlbmQ7CisKKyAgICBpdHIgPSBtX3BhcnRDYWNoZS5iZWdpbigpOworICAgIGVuZCA9IG1fcGFy
dENhY2hlLmVuZCgpOworICAgIGZvciAoOyBpdHIgIT0gZW5kOyBpdHIrKykgeworICAgICAgICBz
dHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqY2UgPSAqaXRyOworICAgICAgICBjYWlyb19zdXJm
YWNlX2ZpbmlzaChjZS0+c3VyZmFjZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbChjZS0+byk7
CisgICAgICAgIGVjb3JlX2V2YXNfZnJlZShjZS0+ZWUpOworICAgICAgICBkZWxldGUgY2U7Cisg
ICAgfQorICAgIG1fcGFydENhY2hlLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFwcGx5RWRqZVN0YXRlRnJvbUZvcm0oRXZhc19PYmplY3QqIG8sIENvbnRyb2xTdGF0ZXMgc3Rh
dGVzKQoreworICAgIGNvbnN0IGNoYXIgKnNpZ25hbHNbXSA9IHsgLy8ga2VlcCBpbiBzeW5jIHdp
dGggV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmgKKyAgICAgICAgImhvdmVyZWQiLAorICAg
ICAgICAicHJlc3NlZCIsCisgICAgICAgICJmb2N1c2VkIiwKKyAgICAgICAgImVuYWJsZWQiLAor
ICAgICAgICAiY2hlY2tlZCIsCisgICAgICAgICJyZWFkLW9ubHkiLAorICAgICAgICAiZGVmYXVs
dCIsCisgICAgICAgICJ3aW5kb3ctaW5hY3RpdmUiLAorICAgICAgICAiaW5kZXRlcm1pbmF0ZSIK
KyAgICB9OworICAgIHNpemVfdCBpLCBsYXN0ID0gc2l6ZW9mKHNpZ25hbHMpIC8gc2l6ZW9mKHNp
Z25hbHNbMF0pOworCisgICAgZWRqZV9vYmplY3Rfc2lnbmFsX2VtaXQobywgInJlc2V0IiwgIiIp
OworCisgICAgZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworICAgICAgICBpZiAoc3RhdGVz
ICYgKDEgPDwgaSkpCisgICAgICAgICAgICBlZGplX29iamVjdF9zaWduYWxfZW1pdChvLCBzaWdu
YWxzW2ldLCAiIik7CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1l
UGFydChSZW5kZXJPYmplY3QqIG8sIEZvcm1UeXBlIHR5cGUsIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBjZTsKKyAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CisgICAgY2Fpcm9fdCog
Y2Fpcm87CisKKyAgICBBU1NFUlQobV9jYW52YXMpOworICAgIEFTU0VSVChtX2VkamUpOworCisg
ICAgY2UgPSBjYWNoZVRoZW1lUGFydEdldCh0eXBlLCByZWN0LnNpemUoKSk7CisgICAgQVNTRVJU
KGNlKTsKKyAgICBpZiAoIWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcHBseUVk
amVTdGF0ZUZyb21Gb3JtKGNlLT5vLCBjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobykpOworCisg
ICAgY2Fpcm8gPSBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChjYWly
byk7CisKKyAgICBlZGplX29iamVjdF9jYWxjX2ZvcmNlKGNlLT5vKTsKKyAgICBlZGplX29iamVj
dF9tZXNzYWdlX3NpZ25hbF9wcm9jZXNzKGNlLT5vKTsKKyAgICB1cGRhdGVzID0gZXZhc19yZW5k
ZXJfdXBkYXRlcyhlY29yZV9ldmFzX2dldChjZS0+ZWUpKTsKKyAgICBldmFzX3JlbmRlcl91cGRh
dGVzX2ZyZWUodXBkYXRlcyk7CisKKyAgICBjYWlyb19zYXZlKGNhaXJvKTsKKyAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY2Fpcm8sIGNlLT5zdXJmYWNlLCByZWN0LngoKSwgcmVjdC55KCkp
OworICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY2Fpcm8sIDEuMCk7CisgICAgY2Fpcm9fcmVz
dG9yZShjYWlybyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRo
ZW1lPiBSZW5kZXJUaGVtZUVmbDo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW5kZXJUaGVtZUVmbChwYWdlKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVy
VGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAo
cGFnZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lRWZsOjpjcmVhdGUocGFnZSk7CisKKyAg
ICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVFZmw6OmNyZWF0ZSgw
KS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIGZhbGxiYWNrOworfQorCitzdGF0aWMgdm9pZCBy
ZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NTZWxlY3Rpb25BY3RpdmUodm9pZCogZGF0YSwgRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgY2hhciogc291cmNlKQoreworICAg
IFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCogdGhhdCA9IHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCAqPihkYXRhKTsKKyAgICBpbnQgZnIsIGZnLCBmYiwg
ZmEsIGJyLCBiZywgYmIsIGJhOworICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0
CisgICAgICAgIChvLCBzb3VyY2UsICZmciwgJmZnLCAmZmIsICZmYSwgJmJyLCAmYmcsICZiYiwg
JmJhLAorICAgICAgICAgMCwgMCwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGF0LT5z
ZXRBY3RpdmVTZWxlY3Rpb25Db2xvcihmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmEpOwor
fQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NTZWxlY3Rpb25JbmFjdGl2
ZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBj
aGFyKiBzb3VyY2UpCit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKiB0aGF0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsICo+KGRhdGEpOwor
ICAgIGludCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisgICAgaWYgKCFlZGplX29i
amVjdF9jb2xvcl9jbGFzc19nZXQKKyAgICAgICAgKG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwg
JmZhLCAmYnIsICZiZywgJmJiLCAmYmEsCisgICAgICAgICAwLCAwLCAwLCAwKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHRoYXQtPnNldEluYWN0aXZlU2VsZWN0aW9uQ29sb3IoZnIsIGZnLCBmYiwg
ZmEsIGJyLCBiZywgYmIsIGJhKTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xv
ckNsYXNzRm9jdXNSaW5nKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBz
aWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVy
VGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVF
ZmwgKj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhOworICAgIGlmICghZWRqZV9vYmpl
Y3RfY29sb3JfY2xhc3NfZ2V0CisgICAgICAgIChvLCBzb3VyY2UsICZmciwgJmZnLCAmZmIsICZm
YSwKKyAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm47Cisg
ICAgdGhhdC0+c2V0Rm9jdXNSaW5nQ29sb3IoZnIsIGZnLCBmYiwgZmEpOworfQorCitzdGF0aWMg
dm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NCdXR0b25UZXh0KHZvaWQqIGRhdGEsIEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAg
ICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwgKj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIs
IGZhLCBiciwgYmcsIGJiLCBiYTsKKyAgICBpZiAoIWVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dl
dAorICAgICAgICAobywgc291cmNlLCAmZnIsICZmZywgJmZiLCAmZmEsICZiciwgJmJnLCAmYmIs
ICZiYSwKKyAgICAgICAgIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgdGhhdC0+
c2V0QnV0dG9uVGV4dENvbG9yKGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYSk7Cit9CisK
K3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0NvbWJvVGV4dCh2b2lkKiBkYXRh
LCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBjaGFyKiBzb3VyY2Up
Cit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKiB0aGF0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsICo+KGRhdGEpOworICAgIGludCBmciwg
ZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisgICAgaWYgKCFlZGplX29iamVjdF9jb2xvcl9j
bGFzc19nZXQKKyAgICAgICAgKG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAmYnIsICZi
ZywgJmJiLCAmYmEsCisgICAgICAgICAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHRoYXQtPnNldENvbWJvVGV4dENvbG9yKGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYSk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0VudHJ5VGV4dCh2b2lk
KiBkYXRhLCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBjaGFyKiBz
b3VyY2UpCit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKiB0aGF0ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsICo+KGRhdGEpOworICAgIGlu
dCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisgICAgaWYgKCFlZGplX29iamVjdF9j
b2xvcl9jbGFzc19nZXQKKyAgICAgICAgKG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAm
YnIsICZiZywgJmJiLCAmYmEsCisgICAgICAgICAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIHRoYXQtPnNldEVudHJ5VGV4dENvbG9yKGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJi
LCBiYSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlYXJjaFRl
eHQodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3Qg
Y2hhciogc291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCogdGhh
dCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCAqPihkYXRhKTsK
KyAgICBpbnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOworICAgIGlmICghZWRqZV9v
YmplY3RfY29sb3JfY2xhc3NfZ2V0CisgICAgICAgIChvLCBzb3VyY2UsICZmciwgJmZnLCAmZmIs
ICZmYSwgJmJyLCAmYmcsICZiYiwgJmJhLAorICAgICAgICAgMCwgMCwgMCwgMCkpCisgICAgICAg
IHJldHVybjsKKyAgICB0aGF0LT5zZXRTZWFyY2hUZXh0Q29sb3IoZnIsIGZnLCBmYiwgZmEsIGJy
LCBiZywgYmIsIGJhKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6Y3JlYXRlQ2FudmFzKCkK
K3sKKyAgICBBU1NFUlQoIW1fY2FudmFzKTsKKyAgICBtX2NhbnZhcyA9IGVjb3JlX2V2YXNfYnVm
ZmVyX25ldygxLCAxKTsKKyAgICBBU1NFUlQobV9jYW52YXMpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lRWZsOjpjcmVhdGVFZGplKCkKK3sKKyAgICBBU1NFUlQoIW1fZWRqZSk7CisgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlID8gbV9wYWdlLT5tYWluRnJhbWUoKSA6IDA7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gZnJhbWUgPyBmcmFtZS0+dmlldygpIDogMDsKKyAgICBTdHJpbmcgdGhlbWUgPSB2
aWV3ID8gdmlldy0+ZWRqZVRoZW1lUmVjdXJzaXZlKCkgOiAiIjsKKyAgICBpZiAodGhlbWUuaXNF
bXB0eSgpKQorICAgICAgICBFSU5BX0xPR19FUlIoIk5vIHRoZW1lIGRlZmluZWQsIHVuYWJsZSB0
byBzZXQgUmVuZGVyVGhlbWVFZmwuIik7CisgICAgZWxzZSB7CisgICAgICAgIG1fZWRqZSA9IGVk
amVfb2JqZWN0X2FkZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOworICAgICAgICBpZiAoIW1f
ZWRqZSkKKyAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBiYXNlIGVk
amUgb2JqZWN0LiIpOworICAgICAgICBlbHNlIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQKKyAg
ICAgICAgICAgICAgICAgICAobV9lZGplLCB0aGVtZS51dGY4KCkuZGF0YSgpLCAid2Via2l0L2Jh
c2UiKSkgeworICAgICAgICAgICAgaW50IGVyciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0
KG1fZWRqZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGplX2xvYWRfZXJy
b3Jfc3RyKGVycik7CisgICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkICd3
ZWJraXQvYmFzZScgZnJvbSB0aGVtZSAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHRoZW1lLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAgICAgICBldmFzX29iamVjdF9k
ZWwobV9lZGplKTsKKyAgICAgICAgICAgIG1fZWRqZSA9IDA7CisgICAgICAgIH0gZWxzZSB7Cisj
ZGVmaW5lIENPTk5FQ1QoY2MsIGZ1bmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlZGplX29iamVjdF9zaWduYWxfY2FsbGJhY2tf
YWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKG1fZWRq
ZSwgImNvbG9yX2NsYXNzLHNldCIsICJ3ZWJraXQvImNjLCBmdW5jLCB0aGlzKQorCisgICAgICAg
ICAgICBDT05ORUNUKCJzZWxlY3Rpb24vYWN0aXZlIiwKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VsZWN0aW9uQWN0aXZlKTsKKyAgICAgICAgICAgIENPTk5F
Q1QoInNlbGVjdGlvbi9pbmFjdGl2ZSIsCisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRoZW1l
RWZsQ29sb3JDbGFzc1NlbGVjdGlvbkluYWN0aXZlKTsKKyAgICAgICAgICAgIENPTk5FQ1QoImZv
Y3VzX3JpbmciLCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NGb2N1c1JpbmcpOworICAgICAgICAg
ICAgQ09OTkVDVCgiYnV0dG9uL3RleHQiLCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NCdXR0b25U
ZXh0KTsKKyAgICAgICAgICAgIENPTk5FQ1QoImNvbWJvL3RleHQiLCByZW5kZXJUaGVtZUVmbENv
bG9yQ2xhc3NDb21ib1RleHQpOworICAgICAgICAgICAgQ09OTkVDVCgiZW50cnkvdGV4dCIsIHJl
bmRlclRoZW1lRWZsQ29sb3JDbGFzc0VudHJ5VGV4dCk7CisgICAgICAgICAgICBDT05ORUNUKCJz
ZWFyY2gvdGV4dCIsIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlYXJjaFRleHQpOworI3VuZGVm
IENPTk5FQ1QKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobV9lZGplKTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplQ29sb3JzKCkKK3sKKyAgICBpbnQgZnIsIGZnLCBm
YiwgZmEsIGJyLCBiZywgYmIsIGJhOworICAgIEFTU0VSVChtX2VkamUpOworI2RlZmluZSBDT0xP
Ul9HRVQoY2xzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobV9lZGplLCAid2Via2l0LyJjbHMsICZm
ciwgJmZnLCAmZmIsICZmYSwgJmJyLCAmYmcsICZiYiwgJmJhLCAgXAorICAgICAgICAgMCwgMCwg
MCwgMCkKKworICAgIGlmIChDT0xPUl9HRVQoInNlbGVjdGlvbi9hY3RpdmUiKSkgeworICAgICAg
ICBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZh
KTsKKyAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwg
YmcsIGJiLCBiYSk7CisgICAgfQorICAgIGlmIChDT0xPUl9HRVQoInNlbGVjdGlvbi9pbmFjdGl2
ZSIpKSB7CisgICAgICAgIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBDb2xv
cihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIG1faW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7CisgICAgfQorICAgIGlmIChDT0xPUl9HRVQo
ImZvY3VzX3JpbmciKSkgeworICAgICAgICBtX2ZvY3VzUmluZ0NvbG9yID0gQ29sb3IoZnIsIGZn
LCBmYiwgZmEpOworICAgICAgICAvLyB3ZWJraXQganVzdCB1c2UgcGxhdGZvcm1Gb2N1c1JpbmdD
b2xvcigpIGZvciBkZWZhdWx0IHRoZW1lICh3aXRob3V0IHBhZ2UpCisgICAgICAgIC8vIHRoaXMg
aXMgdWdseSwgYnV0IG5vIG90aGVyIHdheSB0byBkbyBpdCB1bmxlc3Mgd2UgY2hhbmdlCisgICAg
ICAgIC8vIGl0IHRvIHVzZSBwYWdlIHRoZW1lcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAg
ICBSZW5kZXJUaGVtZTo6c2V0Q3VzdG9tRm9jdXNSaW5nQ29sb3IobV9mb2N1c1JpbmdDb2xvcik7
CisgICAgfQorICAgIGlmIChDT0xPUl9HRVQoImJ1dHRvbi90ZXh0IikpIHsKKyAgICAgICAgbV9i
dXR0b25UZXh0Rm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZnIsIGZnLCBmYiwgZmEpOworICAgICAg
ICBtX2J1dHRvblRleHRCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7Cisg
ICAgfQorICAgIGlmIChDT0xPUl9HRVQoImNvbWJvL3RleHQiKSkgeworICAgICAgICBtX2NvbWJv
VGV4dEZvcmVncm91bmRDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKKyAgICAgICAgbV9j
b21ib1RleHRCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7CisgICAgfQor
ICAgIGlmIChDT0xPUl9HRVQoImVudHJ5L3RleHQiKSkgeworICAgICAgICBtX2VudHJ5VGV4dEZv
cmVncm91bmRDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKKyAgICAgICAgbV9lbnRyeVRl
eHRCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7CisgICAgfQorICAgIGlm
IChDT0xPUl9HRVQoInNlYXJjaC90ZXh0IikpIHsKKyAgICAgICAgbV9zZWFyY2hUZXh0Rm9yZWdy
b3VuZENvbG9yID0gQ29sb3IoZnIsIGZnLCBmYiwgZmEpOworICAgICAgICBtX3NlYXJjaFRleHRC
YWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiciwgYmcsIGJiLCBiYSk7CisgICAgfQorI3VuZGVmIENP
TE9SX0dFVAorICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2soc3RydWN0IFRoZW1lUGFydERl
c2MqIGRlc2MpCit7CisgICAgZGVzYy0+bWluLnNldFdpZHRoKExlbmd0aCgwLCBGaXhlZCkpOwor
ICAgIGRlc2MtPm1pbi5zZXRIZWlnaHQoTGVuZ3RoKDAsIEZpeGVkKSk7CisKKyAgICBkZXNjLT5t
YXguc2V0V2lkdGgoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgZGVzYy0+bWF4LnNldEhlaWdodChM
ZW5ndGgoMCwgRml4ZWQpKTsKKworICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhCb3goMCwgMCwg
MCwgMCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9uKEV2
YXNfT2JqZWN0KiBvLCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYykKK3sKKyAgICBFdmFzX0Nv
b3JkIG1pbncsIG1pbmgsIG1heHcsIG1heGg7CisKKyAgICBlZGplX29iamVjdF9zaXplX21pbl9n
ZXQobywgJm1pbncsICZtaW5oKTsKKyAgICBpZiAoIW1pbncgJiYgIW1pbmgpCisgICAgICAgIGVk
amVfb2JqZWN0X3NpemVfbWluX2NhbGMobywgJm1pbncsICZtaW5oKTsKKworICAgIGRlc2MtPm1p
bi5zZXRXaWR0aChMZW5ndGgobWludywgRml4ZWQpKTsKKyAgICBkZXNjLT5taW4uc2V0SGVpZ2h0
KExlbmd0aChtaW5oLCBGaXhlZCkpOworCisgICAgZWRqZV9vYmplY3Rfc2l6ZV9tYXhfZ2V0KG8s
ICZtYXh3LCAmbWF4aCk7CisgICAgZGVzYy0+bWF4LnNldFdpZHRoKExlbmd0aChtYXh3LCBGaXhl
ZCkpOworICAgIGRlc2MtPm1heC5zZXRIZWlnaHQoTGVuZ3RoKG1heGgsIEZpeGVkKSk7CisKKyAg
ICBpZiAoIWVkamVfb2JqZWN0X3BhcnRfZXhpc3RzKG8sICJ0ZXh0X2NvbmZpbmVtZW50IikpCisg
ICAgICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhCb3goMCwgMCwgMCwgMCk7CisgICAgZWxzZSB7
CisgICAgICAgIEV2YXNfQ29vcmQgcHgsIHB5LCBwdywgcGg7CisgICAgICAgIEV2YXNfQ29vcmQg
b3ggPSAwLCBveSA9IDAsIG93ID0gMCwgb2ggPSAwOworICAgICAgICBpbnQgdCwgciwgYiwgbDsK
KworICAgICAgICBpZiAobWludyA+IDApCisgICAgICAgICAgICBvdyA9IG1pbnc7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG93ID0gMTAwOworICAgICAgICBpZiAobWluaCA+IDApCisgICAg
ICAgICAgICBvaCA9IG1pbmg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9oID0gMTAwOwor
ICAgICAgICBpZiAobWF4dyA+IDAgJiYgb3cgPiBtYXh3KQorICAgICAgICAgICAgb3cgPSBtYXh3
OworICAgICAgICBpZiAobWF4aCA+IDAgJiYgb2ggPiBtYXhoKQorICAgICAgICAgICAgb2ggPSBt
YXhoOworCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUobywgb3gsIG95KTsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKG8sIG93LCBvaCk7CisgICAgICAgIGVkamVfb2JqZWN0X2NhbGNfZm9y
Y2Uobyk7CisgICAgICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2lnbmFsX3Byb2Nlc3Mobyk7Cisg
ICAgICAgIGVkamVfb2JqZWN0X3BhcnRfZ2VvbWV0cnlfZ2V0KG8sICJ0ZXh0X2NvbmZpbmVtZW50
IiwgJnB4LCAmcHksICZwdywgJnBoKTsKKworICAgICAgICB0ID0gcHkgLSBveTsKKyAgICAgICAg
YiA9IChvaCArIG95KSAtIChwaCArIHB5KTsKKworICAgICAgICBsID0gcHggLSBveDsKKyAgICAg
ICAgciA9IChvdyArIG94KSAtIChwdyArIHB4KTsKKworICAgICAgICBkZXNjLT5wYWRkaW5nID0g
TGVuZ3RoQm94KHQsIHIsIGIsIGwpOworICAgIH0KK30KKworY29uc3QgY2hhciogUmVuZGVyVGhl
bWVFZmw6OmVkamVHcm91cEZyb21Gb3JtVHlwZShGb3JtVHlwZSB0eXBlKSBjb25zdAoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBncm91cHNbXSA9IHsKKyNkZWZpbmUgVyhuKSAid2Via2l0L3dp
ZGdldC8ibgorICAgICAgICBXKCJidXR0b24iKSwKKyAgICAgICAgVygicmFkaW8iKSwKKyAgICAg
ICAgVygiZW50cnkiKSwKKyAgICAgICAgVygiY2hlY2tib3giKSwKKyAgICAgICAgVygiY29tYm8i
KSwKKyAgICAgICAgVygic2VhcmNoL2ZpZWxkIiksCisgICAgICAgIFcoInNlYXJjaC9kZWNvcmF0
aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2J1dHRvbiIpLAorICAgICAgICBXKCJz
ZWFyY2gvcmVzdWx0c19kZWNvcmF0aW9uIiksCisgICAgICAgIFcoInNlYXJjaC9jYW5jZWxfYnV0
dG9uIiksCisjdW5kZWYgVworICAgICAgICAwCisgICAgfTsKKyAgICBBU1NFUlQodHlwZSA+PSAw
KTsKKyAgICBBU1NFUlQoKHNpemVfdCl0eXBlIDwgc2l6ZW9mKGdyb3VwcykgLyBzaXplb2YoZ3Jv
dXBzWzBdKSk7IC8vIG91dCBvZiBzeW5jPworICAgIHJldHVybiBncm91cHNbdHlwZV07Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW9ucygpCit7CisgICAgRXZh
c19PYmplY3QqIG87CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgY29uc3QgY2hhciogZmlsZTsK
KworICAgIEFTU0VSVChtX2NhbnZhcyk7CisgICAgQVNTRVJUKG1fZWRqZSk7CisKKyAgICBlZGpl
X29iamVjdF9maWxlX2dldChtX2VkamUsICZmaWxlLCAwKTsKKyAgICBBU1NFUlQoZmlsZSk7CisK
KyAgICBvID0gZWRqZV9vYmplY3RfYWRkKGVjb3JlX2V2YXNfZ2V0KG1fY2FudmFzKSk7CisgICAg
aWYgKCFvKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBFZGplIG9i
amVjdC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBG
b3JtVHlwZUxhc3Q7IGkrKykgeworICAgICAgICBGb3JtVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8
Rm9ybVR5cGU+KGkpOworICAgICAgICBjb25zdCBjaGFyKiBncm91cCA9IGVkamVHcm91cEZyb21G
b3JtVHlwZSh0eXBlKTsKKyAgICAgICAgbV9wYXJ0RGVzY3NbaV0udHlwZSA9IHR5cGU7CisgICAg
ICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQobywgZmlsZSwgZ3JvdXApKSB7CisgICAgICAg
ICAgICBpbnQgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9lcnJvcl9nZXQobyk7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7CisgICAgICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBzZXQgdGhlbWUgZ3JvdXAgJyVzJyBvZiBmaWxl
ICclcyc6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCwgZmlsZSwgZXJybXNn
KTsKKworICAgICAgICAgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb25GYWxsYmFjayhtX3BhcnREZXNj
cyArIGkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFwcGx5UGFydERlc2NyaXB0aW9u
KG8sIG1fcGFydERlc2NzICsgaSk7CisgICAgfQorICAgIGV2YXNfb2JqZWN0X2RlbChvKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUVmbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBjYWNoZVRoZW1l
UGFydEZsdXNoKCk7CisKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIGNyZWF0ZUNhbnZh
cygpOworICAgICAgICBpZiAoIW1fY2FudmFzKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9lZGplKSB7CisgICAgICAgIGNyZWF0ZUVkamUoKTsKKyAgICAgICAgaWYg
KCFtX2VkamUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlFZGplQ29s
b3JzKCk7CisgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb25zKCk7Cit9CisKK1JlbmRlclRoZW1lRWZs
OjpSZW5kZXJUaGVtZUVmbChQYWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWUoKQorICAgICwg
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigwLCAw
LCAyNTUpCisgICAgLCBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigyNTUsIDI1NSwg
MjU1KQorICAgICwgbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigwLCAwLCAxMjgp
CisgICAgLCBtX2luYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKDIwMCwgMjAwLCAyMDAp
CisgICAgLCBtX2ZvY3VzUmluZ0NvbG9yKDMyLCAzMiwgMjI0LCAyMjQpCisgICAgLCBtX2J1dHRv
blRleHRCYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKKyAgICAsIG1fYnV0dG9uVGV4dEZvcmVn
cm91bmRDb2xvcigwLCAwLCAwKQorICAgICwgbV9jb21ib1RleHRCYWNrZ3JvdW5kQ29sb3IoMCwg
MCwgMCwgMCkKKyAgICAsIG1fY29tYm9UZXh0Rm9yZWdyb3VuZENvbG9yKDAsIDAsIDApCisgICAg
LCBtX2VudHJ5VGV4dEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9lbnRyeVRl
eHRGb3JlZ3JvdW5kQ29sb3IoMCwgMCwgMCkKKyAgICAsIG1fc2VhcmNoVGV4dEJhY2tncm91bmRD
b2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9zZWFyY2hUZXh0Rm9yZWdyb3VuZENvbG9yKDAsIDAs
IDApCisgICAgLCBtX2NhbnZhcygwKQorICAgICwgbV9lZGplKDApCit7CisgICAgaWYgKHBhZ2Ug
JiYgcGFnZS0+bWFpbkZyYW1lKCkgJiYgcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkKKyAgICAg
ICAgdGhlbWVDaGFuZ2VkKCk7Cit9CisKK1JlbmRlclRoZW1lRWZsOjp+UmVuZGVyVGhlbWVFZmwo
KQoreworICAgIGNhY2hlVGhlbWVQYXJ0Rmx1c2goKTsKKworICAgIGlmIChtX2NhbnZhcykgewor
ICAgICAgICBpZiAobV9lZGplKQorICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZWRqZSk7
CisgICAgICAgIGVjb3JlX2V2YXNfZnJlZShtX2NhbnZhcyk7CisgICAgfQorfQorCit2b2lkIFJl
bmRlclRoZW1lRWZsOjpzZXRBY3RpdmVTZWxlY3Rpb25Db2xvcihpbnQgZm9yZVIsIGludCBmb3Jl
RywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0Is
IGludCBiYWNrQSkKK3sKKyAgICBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IENv
bG9yKGZvcmVSLCBmb3JlRywgZm9yZUIsIGZvcmVBKTsKKyAgICBtX2FjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvciA9IENvbG9yKGJhY2tSLCBiYWNrRywgYmFja0IsIGJhY2tBKTsKKyAgICBw
bGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRJ
bmFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGlu
dCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKQorewor
ICAgIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3JlUiwgZm9y
ZUcsIGZvcmVCLCBmb3JlQSk7CisgICAgbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ciA9IENvbG9yKGJhY2tSLCBiYWNrRywgYmFja0IsIGJhY2tBKTsKKyAgICBwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRGb2N1c1JpbmdDb2xv
cihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICBtX2ZvY3VzUmluZ0NvbG9yID0g
Q29sb3IociwgZywgYiwgYSk7CisgICAgLy8gd2Via2l0IGp1c3QgdXNlIHBsYXRmb3JtRm9jdXNS
aW5nQ29sb3IoKSBmb3IgZGVmYXVsdCB0aGVtZSAod2l0aG91dCBwYWdlKQorICAgIC8vIHRoaXMg
aXMgdWdseSwgYnV0IG5vIG90aGVyIHdheSB0byBkbyBpdCB1bmxlc3Mgd2UgY2hhbmdlCisgICAg
Ly8gaXQgdG8gdXNlIHBhZ2UgdGhlbWVzIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgUmVuZGVy
VGhlbWU6OnNldEN1c3RvbUZvY3VzUmluZ0NvbG9yKG1fZm9jdXNSaW5nQ29sb3IpOworICAgIHBs
YXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldEJ1
dHRvblRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEs
IGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSkKK3sKKyAgICBtX2J1
dHRvblRleHRGb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3JlUiwgZm9yZUcsIGZvcmVCLCBmb3Jl
QSk7CisgICAgbV9idXR0b25UZXh0QmFja2dyb3VuZENvbG9yID0gQ29sb3IoYmFja1IsIGJhY2tH
LCBiYWNrQiwgYmFja0EpOworICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVFZmw6OnNldENvbWJvVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVH
LCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwg
aW50IGJhY2tBKQoreworICAgIG1fY29tYm9UZXh0Rm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZm9y
ZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEpOworICAgIG1fY29tYm9UZXh0QmFja2dyb3VuZENvbG9y
ID0gQ29sb3IoYmFja1IsIGJhY2tHLCBiYWNrQiwgYmFja0EpOworICAgIHBsYXRmb3JtQ29sb3Jz
RGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldEVudHJ5VGV4dENvbG9y
KGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBp
bnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKQoreworICAgIG1fZW50cnlUZXh0Rm9yZWdy
b3VuZENvbG9yID0gQ29sb3IoZm9yZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEpOworICAgIG1fZW50
cnlUZXh0QmFja2dyb3VuZENvbG9yID0gQ29sb3IoYmFja1IsIGJhY2tHLCBiYWNrQiwgYmFja0Ep
OworICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVF
Zmw6OnNldFNlYXJjaFRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBp
bnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSkKK3sK
KyAgICBtX3NlYXJjaFRleHRGb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3JlUiwgZm9yZUcsIGZv
cmVCLCBmb3JlQSk7CisgICAgbV9zZWFyY2hUZXh0QmFja2dyb3VuZENvbG9yID0gQ29sb3IoYmFj
a1IsIGJhY2tHLCBiYWNrQiwgYmFja0EpOworICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7
Cit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkK
K3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0Ogor
ICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBU
ZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBNZW51bGlz
dFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHls
ZS0+YXBwZWFyYW5jZSgpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6Y29udHJvbFN1cHBv
cnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIHJldHVybiBpc0Vu
YWJsZWQobyk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUVmbDo6YmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gQ2hlY2ti
b3hQYXJ0CisgICAgfHwgIG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCisg
ICAgICAgIHJldHVybiB0b1JlbmRlckJveChvKS0+bWFyZ2luVG9wKCkgKyB0b1JlbmRlckJveChv
KS0+aGVpZ2h0KCkgLSAzOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0
aW9uKG8pOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKj4o
ZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0Q2hlY2tib3hTdHlsZShzZWxl
Y3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVD
b25zdHJhaW50cyhzdHlsZSwgQ2hlY2tCb3gpOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwor
CisgICAgY29uc3Qgc3RydWN0IFRoZW1lUGFydERlc2MgKmRlc2MgPSBtX3BhcnREZXNjcyArIChz
aXplX3QpQ2hlY2tCb3g7CisgICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5t
aW4ud2lkdGgoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndp
ZHRoKCkpOworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWln
aHQoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgQ2hlY2tCb3gsIGksIHJlY3QpOwor
fQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQo
KS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0UmFkaW9TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHls
ZSwgUmFkaW9CdXR0b24pOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworCisgICAgY29uc3Qg
c3RydWN0IFRoZW1lUGFydERlc2MgKmRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9C
dXR0b247CisgICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgo
KS52YWx1ZSgpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwor
ICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1
ZSgpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgUmFkaW9CdXR0b24sIGksIHJlY3QpOworfQorCit2b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGlmICgh
bV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2Uo
KS0+dGhlbWUoKSktPmFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIEJ1
dHRvbik7CisKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkg
eworICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICAgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAg
ICAgICBzdHlsZS0+c2V0Q29sb3IobV9idXR0b25UZXh0Rm9yZWdyb3VuZENvbG9yKTsKKyAgICAg
ICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX2J1dHRvblRleHRCYWNrZ3JvdW5kQ29sb3Ip
OworICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgQnV0dG9uLCBpLCByZWN0KTsK
K30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAor
eworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3Vt
ZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdE1lbnVMaXN0U3R5bGUoc2VsZWN0b3IsIHN0
eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoc3R5bGUsIENvbWJvQm94KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHls
ZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLT5zZXRDb2xvcihtX2NvbWJvVGV4dEZv
cmVncm91bmRDb2xvcik7CisgICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX2NvbWJvVGV4
dEJhY2tncm91bmRDb2xvcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgQ29tYm9C
b3gsIGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0RmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+
cGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVt
ZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFRleHRGaWVsZFN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBUZXh0RmllbGQpOworICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUtPnNldENv
bG9yKG1fZW50cnlUZXh0Rm9yZWdyb3VuZENvbG9yKTsKKyAgICBzdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKG1fZW50cnlUZXh0QmFja2dyb3VuZENvbG9yKTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRU
aGVtZVBhcnQobywgVGV4dEZpZWxkLCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkanVzdFRleHRGaWVsZFN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgp
LT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRo
ZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkRGVjb3Jh
dGlvbik7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoUFJFKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgU2Vh
cmNoRmllbGREZWNvcmF0aW9uLCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdl
KCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzZWxlY3Rv
ciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVDb25z
dHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKTsKKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworfQorCitib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24sIGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZSAmJiBl
ICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkp
LT5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxl
LCBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMo
c3R5bGUsIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOworICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uLCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGlmICghbV9wYWdlICYmIGUg
JiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSkt
PmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUs
IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJu
IHBhaW50VGhlbWVQYXJ0KG8sIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uLCBpLCByZWN0KTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAor
eworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3Vt
ZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc2VsZWN0b3Is
IHN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3Ry
YWludHMoc3R5bGUsIFNlYXJjaEZpZWxkKTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLT5zZXRDb2xvcihtX3NlYXJj
aFRleHRGb3JlZ3JvdW5kQ29sb3IpOworICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9z
ZWFyY2hUZXh0QmFja2dyb3VuZENvbG9yKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFy
dChvLCBTZWFyY2hGaWVsZCwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnN5
c3RlbUZvbnQoaW50LCBGb250RGVzY3JpcHRpb24mKSBjb25zdAoreworICAgIC8vIElmIHlvdSBy
ZW1vdmUgdGhpcyBub3RJbXBsZW1lbnRlZCgpLCByZXBsYWNlIGl0IHdpdGggYW4gY29tbWVudCB0
aGF0IGV4cGxhaW5zIHdoeS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43ZmU2MjgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVu
ZGVyVGhlbWVFZmwuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lRWZsX2gKKyNkZWZpbmUg
UmVuZGVyVGhlbWVFZmxfaAorCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKworI2luY2x1ZGUg
PGNhaXJvLmg+CisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEZvcm1UeXBlIHsgLy8gS0VFUCBJTiBTWU5DIFdJ
VEggZWRqZUdyb3VwRnJvbUZvcm1UeXBlKCkKKyAgICBCdXR0b24sCisgICAgUmFkaW9CdXR0b24s
CisgICAgVGV4dEZpZWxkLAorICAgIENoZWNrQm94LAorICAgIENvbWJvQm94LAorICAgIFNlYXJj
aEZpZWxkLAorICAgIFNlYXJjaEZpZWxkRGVjb3JhdGlvbiwKKyAgICBTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24sCisgICAgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwKKyAgICBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbiwKKyAgICBGb3JtVHlwZUxhc3QKK307CisKK2NsYXNzIFJlbmRlclRo
ZW1lRWZsIDogcHVibGljIFJlbmRlclRoZW1lIHsKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVF
ZmwoUGFnZSopOworICAgIH5SZW5kZXJUaGVtZUVmbCgpOworCitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICAvLyBBIG1ldGhv
ZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRy
YXdpbmcgd2hlbiBob3ZlcmVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQSBtZXRob2Qg
YXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7
CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGlu
dCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgY29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICAvLyBB
IGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRl
ZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGlu
ZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQg
aWYgYSBiYXNlbGluZQorICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4
YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBl
eGFtcGxlcyBvZgorICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgorICAgIHZp
cnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7IH0KKyAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOyB9Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yOyB9CisgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsgfQorICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9jdXNSaW5nQ29sb3I7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKKwor
ICAgIC8vIFNldCBwbGF0Zm9ybSBjb2xvcnMgYW5kIG5vdGlmeSB0aGV5IGNoYW5nZWQKKyAgICB2
b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9y
ZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tB
KTsKKyAgICB2b2lkIHNldEluYWN0aXZlU2VsZWN0aW9uQ29sb3IoaW50IGZvcmVSLCBpbnQgZm9y
ZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tC
LCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0Rm9jdXNSaW5nQ29sb3IoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworCisgICAgdm9pZCBzZXRCdXR0b25UZXh0Q29sb3IoaW50IGZvcmVSLCBp
bnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50
IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0Q29tYm9UZXh0Q29sb3IoaW50IGZvcmVS
LCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywg
aW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0RW50cnlUZXh0Q29sb3IoaW50IGZv
cmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNr
RywgaW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0U2VhcmNoVGV4dENvbG9yKGlu
dCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQg
YmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsKKworICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3Q7CisKKworICAg
IC8vIFN5c3RlbSBmb250cy4KKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElk
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVj
a2JveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNy
ZWF0ZUNhbnZhcygpOworICAgIHZvaWQgY3JlYXRlRWRqZSgpOworICAgIHZvaWQgYXBwbHlFZGpl
Q29sb3JzKCk7CisgICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbnMoKTsKKyAgICBjb25zdCBj
aGFyKiBlZGplR3JvdXBGcm9tRm9ybVR5cGUoRm9ybVR5cGUgdHlwZSkgY29uc3Q7CisgICAgdm9p
ZCBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzIHN0
YXRlcyk7CisgICAgYm9vbCBwYWludFRoZW1lUGFydChSZW5kZXJPYmplY3QqIG8sIEZvcm1UeXBl
IHR5cGUsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBDb2xvciBtX2FjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cjsKKyAgICBDb2xvciBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOworICAgIENv
bG9yIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9mb2N1
c1JpbmdDb2xvcjsKKyAgICBDb2xvciBtX2J1dHRvblRleHRCYWNrZ3JvdW5kQ29sb3I7CisgICAg
Q29sb3IgbV9idXR0b25UZXh0Rm9yZWdyb3VuZENvbG9yOworICAgIENvbG9yIG1fY29tYm9UZXh0
QmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fY29tYm9UZXh0Rm9yZWdyb3VuZENvbG9yOwor
ICAgIENvbG9yIG1fZW50cnlUZXh0QmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fZW50cnlU
ZXh0Rm9yZWdyb3VuZENvbG9yOworICAgIENvbG9yIG1fc2VhcmNoVGV4dEJhY2tncm91bmRDb2xv
cjsKKyAgICBDb2xvciBtX3NlYXJjaFRleHRGb3JlZ3JvdW5kQ29sb3I7CisgICAgRWNvcmVfRXZh
cyogbV9jYW52YXM7CisgICAgRXZhc19PYmplY3QqIG1fZWRqZTsKKworICAgIHN0cnVjdCBUaGVt
ZVBhcnREZXNjIHsKKyAgICAgICAgRm9ybVR5cGUgdHlwZTsKKyAgICAgICAgTGVuZ3RoU2l6ZSBt
aW47CisgICAgICAgIExlbmd0aFNpemUgbWF4OworICAgICAgICBMZW5ndGhCb3ggcGFkZGluZzsK
KyAgICB9OworICAgIHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb25GYWxsYmFjayhzdHJ1Y3QgVGhl
bWVQYXJ0RGVzYyogZGVzYyk7CisgICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlvbihFdmFzX09i
amVjdCogbywgc3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2MpOworCisgICAgc3RydWN0IFRoZW1l
UGFydENhY2hlRW50cnkgeworICAgICAgICBGb3JtVHlwZSB0eXBlOworICAgICAgICBJbnRTaXpl
IHNpemU7CisgICAgICAgIEVjb3JlX0V2YXMqIGVlOworICAgICAgICBFdmFzX09iamVjdCogbzsK
KyAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
VGhlbWVQYXJ0RGVzYyBtX3BhcnREZXNjc1tGb3JtVHlwZUxhc3RdOworCisgICAgLy8gdGhpcyBz
aG91bGQgYmUgc21hbGwgYW5kIG5vdCBzbyBmcmVxdWVudGx5IHVzZWQsCisgICAgLy8gc28gdXNl
IGEgdmVjdG9yIGFuZCBkbyBsaW5lYXIgc2VhcmNoZXMKKyAgICBWZWN0b3I8c3RydWN0IFRoZW1l
UGFydENhY2hlRW50cnkgKj4gbV9wYXJ0Q2FjaGU7CisKKyAgICAvLyBnZXQgKHVzZSwgY3JlYXRl
IG9yIHJlcGxhY2UpIGVudHJ5IGZyb20gY2FjaGUKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVF
bnRyeSogY2FjaGVUaGVtZVBhcnRHZXQoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSk7CisgICAgLy8gZmx1c2ggY2FjaGUsIGRlbGV0aW5nIGFsbCBlbnRyaWVzCisgICAgdm9pZCBj
YWNoZVRoZW1lUGFydEZsdXNoKCk7CisKKyAgICAvLyBpbnRlcm5hbCwgdXNlZCBieSBjYWNoZVRo
ZW1lUGFydEdldCgpCisgICAgYm9vbCB0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRo
ZW1lUGFydENhY2hlRW50cnkqIGNlLCBGb3JtVHlwZSB0eXBlKTsKKyAgICBib29sIHRoZW1lUGFy
dENhY2hlRW50cnlTdXJmYWNlQ3JlYXRlKHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjZSk7
CisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNhY2hlVGhlbWVQYXJ0TmV3KEZvcm1U
eXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpOworICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBjYWNoZVRoZW1lUGFydFJlc2V0KEZvcm1UeXBlIHR5cGUsIHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBjZSk7CisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNhY2hl
VGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlKTsKKworfTsKK30KKworI2VuZGlmIC8v
IFJlbmRlclRoZW1lRWZsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9s
bFZpZXdFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsVmlld0VmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2OGE0YQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xs
YmFyRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiNjk0YwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAKQEAgLTAsMCArMSwyMTUgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIHpl
Y2tlQHNlbGZpc2gub3JnCisgKiAgICAgICAgICAgIChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuCisgKiAgICAgICAgICAgIChDKSAyMDA5IElOZFQsIEluc3RpdHV0byBOb2tpYSBk
ZSBUZWNobm9sb2dpYQorICogICAgICAgICAgICAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiAgICAgICAgICAgIChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhckVmbC5oIgorCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSG9zdFdp
bmRvdy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCisjaW5j
bHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Bhc3NSZWZQ
dHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxiYXJD
bGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplIHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxiYXJF
ZmwoY2xpZW50LCBvcmllbnRhdGlvbiwgc2l6ZSkpOworfQorCitTY3JvbGxiYXJFZmw6OlNjcm9s
bGJhckVmbChTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQorICAgIDogU2Nyb2xs
YmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKQorICAgICwgbV9sYXN0UG9zKDAp
CisgICAgLCBtX2xhc3RUb3RhbFNpemUoMCkKKyAgICAsIG1fbGFzdFZpc2libGVTaXplKDApCit7
CisgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoSW50UmVjdCgwLCAwLCAwLCAwKSk7Cit9CisKK1Nj
cm9sbGJhckVmbDo6flNjcm9sbGJhckVmbCgpCit7CisgICAgaWYgKCFldmFzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCgpKTsKKyAgICBz
ZXRFdmFzT2JqZWN0KDApOworfQorCitzdGF0aWMgdm9pZCBzY3JvbGxiYXJFZmxFZGplTWVzc2Fn
ZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgRWRqZV9NZXNzYWdlX1R5cGUgdHlwZSwgaW50
IGlkLCB2b2lkKiBtc2cpCit7CisgICAgU2Nyb2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwqIHRoYXQg
PSBzdGF0aWNfY2FzdDxTY3JvbGxiYXJFZmw6OlNjcm9sbGJhckVmbCo+KGRhdGEpOworICAgIEVk
amVfTWVzc2FnZV9GbG9hdCogbTsKKyAgICBpbnQgdjsKKworICAgIGlmICghaWQpIHsKKyAgICAg
ICAgRUlOQV9MT0dfRVJSKCJVbmtub3duIG1lc3NhZ2UgaWQgJyVkJyBmcm9tIHNjcm9sbCBiYXIg
dGhlbWUuIiwgaWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHR5cGUgIT0g
RURKRV9NRVNTQUdFX0ZMT0FUKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiTWVzc2FnZSBpZCAn
JWQnIG9mIGluY29ycmVjdCB0eXBlIGZyb20gc2Nyb2xsIGJhciB0aGVtZS4gIgorICAgICAgICAg
ICAgICAgICAgICAgIkV4cGVjdGVkICclZCcsIGdvdCAnJWQnLiIsCisgICAgICAgICAgICAgICAg
ICAgICBpZCwgRURKRV9NRVNTQUdFX0ZMT0FULCB0eXBlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG0gPSBzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXQqPihtc2cpOworICAg
IHYgPSBtLT52YWwgKiAodGhhdC0+dG90YWxTaXplKCkgLSB0aGF0LT52aXNpYmxlU2l6ZSgpKTsK
KyAgICB0aGF0LT5zZXRWYWx1ZSh2KTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OnNldFBhcmVu
dChTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIEV2YXNfT2JqZWN0KiBvID0gZXZhc09iamVjdCgp
OworICAgIEV2YXNfQ29vcmQgdywgaDsKKworICAgIFdpZGdldDo6c2V0UGFyZW50KHZpZXcpOwor
CisgICAgaWYgKCFvKSB7CisgICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBvID0gZWRqZV9vYmplY3RfYWRkKHZpZXctPmV2YXMoKSk7CisgICAgICAgIGlm
ICghbykgeworICAgICAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGVkamUg
b2JqZWN0IGZvciB2aWV3PSVwIChldmFzPSVwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
dmlldywgdmlldy0+ZXZhcygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBlZGplX29iamVjdF9tZXNzYWdlX2hhbmRsZXJfc2V0KG8sIHNjcm9sbGJhckVmbEVkamVN
ZXNzYWdlLCB0aGlzKTsKKyAgICAgICAgc2V0RXZhc09iamVjdChvKTsKKyAgICB9IGVsc2UgaWYg
KCF2aWV3KSB7CisgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUobyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBncm91cCA9IChvcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgID8gInNjcm9sbGJhci5ob3Jpem9udGFsIiA6ICJzY3Jv
bGxiYXIudmVydGljYWwiOworICAgIFN0cmluZyB0aGVtZShlZGplVGhlbWVSZWN1cnNpdmUoKSk7
CisKKyAgICBpZiAodGhlbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IGxvYWQgdGhlbWUgJyVzJzogbm8gdGhlbWUgcGF0aCBzZXQuIiwgZ3JvdXApOworICAg
ICAgICBldmFzX29iamVjdF9oaWRlKG8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFlZGplX29iamVjdF9maWxlX3NldChvLCB0aGVtZS51dGY4KCkuZGF0YSgpLCBncm91cCkp
IHsKKyAgICAgICAgaW50IGVyciA9IGVkamVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0KG8pOworICAg
ICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBlZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7CisgICAg
ICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGxvYWQgdGhlbWUgJyVzJyBmcm9tIGZpbGUgJyVz
JzogIyVkICclcyciLAorICAgICAgICAgICAgICAgICAgICAgdGhlbWUudXRmOCgpLmRhdGEoKSwg
Z3JvdXAsIGVyciwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldFBs
YXRmb3JtV2lkZ2V0KG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQobywgdmll
dy0+ZXZhc09iamVjdCgpKTsKKyAgICBldmFzX29iamVjdF9zaG93KG8pOworCisgICAgZWRqZV9v
YmplY3Rfc2l6ZV9taW5fZ2V0KG8sICZ3LCAmaCk7CisKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFt
ZVJlY3QoKTsKKyAgICByZWN0LnNldFNpemUoSW50U2l6ZSh3LCBoKSk7CisgICAgc2V0RnJhbWVS
ZWN0KHJlY3QpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6dXBkYXRlVGh1bWJQb3NpdGlvbigp
Cit7CisgICAgdXBkYXRlVGh1bWJQb3NpdGlvbkFuZFByb3BvcnRpb24oKTsKK30KKwordm9pZCBT
Y3JvbGxiYXJFZmw6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCit7CisgICAgdXBkYXRlVGh1bWJQ
b3NpdGlvbkFuZFByb3BvcnRpb24oKTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OnVwZGF0ZVRo
dW1iUG9zaXRpb25BbmRQcm9wb3J0aW9uKCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBwb3MgPSBjdXJyZW50UG9zKCk7CisgICAgaW50
IHRTaXplID0gdG90YWxTaXplKCk7CisgICAgaW50IHZTaXplID0gdmlzaWJsZVNpemUoKTsKKwor
ICAgIGlmIChtX2xhc3RQb3MgPT0gcG9zCisgICAgICAgICYmIG1fbGFzdFRvdGFsU2l6ZSA9PSB0
U2l6ZQorICAgICAgICAmJiBtX2xhc3RWaXNpYmxlU2l6ZSA9PSB2U2l6ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9sYXN0UG9zID0gcG9zOworICAgIG1fbGFzdFRvdGFsU2l6ZSA9IHRTaXpl
OworICAgIG1fbGFzdFZpc2libGVTaXplID0gdlNpemU7CisKKyAgICBFZGplX01lc3NhZ2VfRmxv
YXRfU2V0KiBtc2cgPSBzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXRfU2V0Kj4KKyAgICAg
ICAgKGFsbG9jYShzaXplb2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZmxvYXQp
KSk7CisgICAgbXNnLT5jb3VudCA9IDI7CisKKyAgICBpZiAodFNpemUgLSB2U2l6ZSA+IDApCisg
ICAgICAgIG1zZy0+dmFsWzBdID0gcG9zIC8gKGZsb2F0KSh0U2l6ZSAtIHZTaXplKTsKKyAgICBl
bHNlCisgICAgICAgIG1zZy0+dmFsWzBdID0gMC4wOworCisgICAgaWYgKHRTaXplID4gMCkKKyAg
ICAgICAgbXNnLT52YWxbMV0gPSB2U2l6ZSAvIChmbG9hdCl0U2l6ZTsKKyAgICBlbHNlCisgICAg
ICAgIG1zZy0+dmFsWzFdID0gMC4wOworCisgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9zZW5kKHBs
YXRmb3JtV2lkZ2V0KCksIEVESkVfTUVTU0FHRV9GTE9BVF9TRVQsIDAsIG1zZyk7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyRWZsOjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBXaWRnZXQ6OnNldEZyYW1lUmVjdChyZWN0KTsKKyAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOwor
fQorCit2b2lkIFNjcm9sbGJhckVmbDo6ZnJhbWVSZWN0c0NoYW5nZWQoKQoreworICAgIEV2YXNf
T2JqZWN0KiBvID0gcGxhdGZvcm1XaWRnZXQoKTsKKyAgICBFdmFzX0Nvb3JkIHgsIHk7CisKKyAg
ICBpZiAoIXBhcmVudCgpIHx8ICFvKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHJl
Y3QgPSBmcmFtZVJlY3QoKTsKKyAgICBpZiAocGFyZW50KCktPmlzU2Nyb2xsVmlld1Njcm9sbGJh
cih0aGlzKSkKKyAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihwYXJlbnQoKS0+Y29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHJlY3Qu
c2V0TG9jYXRpb24ocGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7
CisKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocm9vdCgpLT5ldmFzT2JqZWN0KCksICZ4
LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfbW92ZShvLCB4ICsgcmVjdC54KCksIHkgKyBy
ZWN0LnkoKSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG8sIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Ny
b2xsYmFyRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4NTg4OAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5oCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGJhckVmbF9oCisjZGVm
aW5lIFNjcm9sbGJhckVmbF9oCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlIDxF
dmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTY3JvbGxiYXJFZmwgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKK3B1YmxpYzoKKyAg
ICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOworCisgICAgdmlydHVhbCB+U2Nyb2xsYmFyRWZsKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZU91dEV2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsK
KworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckVmbChTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOworCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRodW1iUG9zaXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQcm9wb3J0
aW9uKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpOwor
Citwcml2YXRlOgorICAgIGludCBtX2xhc3RQb3M7CisgICAgaW50IG1fbGFzdFRvdGFsU2l6ZTsK
KyAgICBpbnQgbV9sYXN0VmlzaWJsZVNpemU7Cit9OworCit9CisKKyNlbmRpZiAvLyBTY3JvbGxi
YXJFZmxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVF
ZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZGYwMDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5jcHAKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBU
ZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQg
c3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVFZmwuaCIKKworI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBz
dGF0aWMgU2Nyb2xsYmFyVGhlbWVFZmwgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKwor
U2Nyb2xsYmFyVGhlbWVFZmw6On5TY3JvbGxiYXJUaGVtZUVmbCgpCit7Cit9CisKK2ludCBTY3Jv
bGxiYXJUaGVtZUVmbDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNv
bnRyb2xTaXplKQoreworICAgIHJldHVybiAwOyAvLyB3ZSBwYWludCBvbiB0b3AKK30KKwordm9p
ZCBTY3JvbGxiYXJUaGVtZUVmbDo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVFZmw6OnVucmVnaXN0ZXJTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Nj
cm9sbGJhclRoZW1lRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYy
NDAwZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRo
ZW1lRWZsLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAt
IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lRWZsX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhl
bWVFZmxfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTY3JvbGxiYXJUaGVtZUVmbCA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVFZmwoKTsKKworICAgIHZpcnR1
YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJT
Y3JvbGxiYXIpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcik7CisKKworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TZWFyY2hQb3B1cE1lbnVFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvU2VhcmNoUG9wdXBNZW51RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kMTgxNzRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2VhcmNoUG9wdXBNZW51RWZsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1
cE1lbnUuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2VhcmNoUG9wdXBNZW51OjpTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50
KiBjbGllbnQpCisgICAgOiBQb3B1cE1lbnUoY2xpZW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51OjplbmFibGVkKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9TaGFyZWRCdWZmZXJFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2hhcmVkQnVmZmVyRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
ZDA4Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2hhcmVkQnVm
ZmVyRWZsLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgICAgICAgICAgICAgIDIwMDggS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4KKyAqICAgICAgICAgICAgICAgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiAgICAgICAgICAgICAgIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hh
cmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCkKK3sKKyAgICBGSUxFKiBmaWxlOworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdDsKKworICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCEoZmlsZSA9IGZvcGVuKGZpbGVQYXRoLnV0
ZjgoKS5kYXRhKCksICJyYiIpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZnN0YXQo
ZmlsZW5vKGZpbGUpLCAmZmlsZVN0YXQpKSB7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
KTsKKyAgICByZXN1bHQtPm1fYnVmZmVyLnJlc2l6ZShmaWxlU3RhdC5zdF9zaXplKTsKKyAgICBp
ZiAocmVzdWx0LT5tX2J1ZmZlci5zaXplKCkgIT0gZmlsZVN0YXQuc3Rfc2l6ZSkgeworICAgICAg
ICBmY2xvc2UoZmlsZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZyZWFkKHJl
c3VsdC0+bV9idWZmZXIuZGF0YSgpLCAxLCBmaWxlU3RhdC5zdF9zaXplLCBmaWxlKTsKKyAgICBm
Y2xvc2UoZmlsZSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2hhcmVk
VGltZXJFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2hhcmVkVGltZXJFZmwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMmM4YzMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TaGFyZWRUaW1lckVmbC5jcHAKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bgorICogICAgICAgICAgIChDKSAyMDA4IEFmb25zbyBSYWJlbG8gQ29zdGEgSnIuCisgKiAgICAg
ICAgICAgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAg
ICAgIChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEVj
b3JlX1RpbWVyICpnX3NoYXJlZFRpbWVyID0gMDsKKworc3RhdGljIHZvaWQgKCpnX3RpbWVyRnVu
Y3Rpb24pKCk7CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5j
KSgpKQoreworICAgIGdfdGltZXJGdW5jdGlvbiA9IGZ1bmM7Cit9CisKK3N0YXRpYyBpbnQgdGlt
ZXJFdmVudCh2b2lkKikKK3sKKyAgICBpZiAoZ190aW1lckZ1bmN0aW9uKQorICAgICAgICBnX3Rp
bWVyRnVuY3Rpb24oKTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisK
K3ZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKK3sKKyAgICBpZiAoZ19zaGFyZWRUaW1lcikgeworICAg
ICAgICBlY29yZV90aW1lcl9kZWwoZ19zaGFyZWRUaW1lcik7CisgICAgICAgIGdfc2hhcmVkVGlt
ZXIgPSAwOworICAgIH0KK30KKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBm
aXJlVGltZSkKK3sKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBmaXJlVGltZSAtIGN1cnJlbnRUaW1l
KCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBnX3NoYXJlZFRpbWVyID0gZWNvcmVf
dGltZXJfYWRkKGludGVydmFsLCB0aW1lckV2ZW50LCAwKTsKK30KKworfQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Tb3VuZEVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9Tb3VuZEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI4YWNk
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NvdW5kRWZsLmNwcApA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU291bmQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpZmRlZiBIQVZF
X0VDT1JFX1gKKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc3lzdGVtQmVlcCgpCit7CisjaWZk
ZWYgSEFWRV9FQ09SRV9YCisgICAgRGlzcGxheSogZGlzcGxheSA9IChEaXNwbGF5KikgZWNvcmVf
eF9kaXNwbGF5X2dldCgpOworICAgIFhCZWxsKGRpc3BsYXksIDApOworI2VuZGlmCit9CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1N5c3RlbVRpbWVFZmwuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvU3lzdGVtVGltZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGU4Yzg3YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1N5c3RlbVRpbWVFZmwuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSU5kVC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gZWNvcmVf
dGltZV9nZXQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwYWFhYwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJF
ZGl0b3IuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGVFBEaXJlY3RvcnlE
b2N1bWVudC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBnZXRTdXBw
b3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBr
ZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1
cmwpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitmbG9hdCB1c2VySWRsZVRpbWUoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZMVF9NQVg7Cit9CisKK30KKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1dpZGdldEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTQ5MjA5NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1dp
ZGdldEVmbC5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0
aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lP
TiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgor
I2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIEhBVkVfRUNPUkVfWAorI2luY2x1ZGUgPEVjb3Jl
X1guaD4KKyNpbmNsdWRlIDxFY29yZV9YX0N1cnNvci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZmRlZiBIQVZFX0VDT1JF
X1gKK2NsYXNzIEN1cnNvck1hcCB7Citwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNp
Z25lZCBzaG9ydD4gbV9jdXJzb3JTdHJpbmdNYXA7CisKK3B1YmxpYzoKKyAgICBDdXJzb3JNYXAo
KTsKKyAgICB1bnNpZ25lZCBpbnQgY3Vyc29yKFN0cmluZyk7Cit9OworCit1bnNpZ25lZCBpbnQg
Q3Vyc29yTWFwOjpjdXJzb3IoU3RyaW5nIGN1cnNvckdyb3VwKQoreworICAgIGludCByZXQgPSBt
X2N1cnNvclN0cmluZ01hcC5nZXQoY3Vyc29yR3JvdXApOworCisgICAgaWYgKHJldCA8IEVDT1JF
X1hfQ1VSU09SX1ggfHwgcmV0ID4gRUNPUkVfWF9DVVJTT1JfWFRFUk0pCisgICAgICAgIHJldCA9
IEVDT1JFX1hfQ1VSU09SX0xFRlRfUFRSOworCisgICAgcmV0dXJuIHJldDsKK30KKworQ3Vyc29y
TWFwOjpDdXJzb3JNYXAoKQoreworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3Bv
aW50ZXIiLCBFQ09SRV9YX0NVUlNPUl9MRUZUX1BUUik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAu
c2V0KCJjdXJzb3IvbW92ZSIsIEVDT1JFX1hfQ1VSU09SX0ZMRVVSKTsKKyAgICBtX2N1cnNvclN0
cmluZ01hcC5zZXQoImN1cnNvci9jcm9zcyIsIEVDT1JFX1hfQ1VSU09SX0NST1NTKTsKKyAgICBt
X2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9oYW5kIiwgRUNPUkVfWF9DVVJTT1JfSEFORDIp
OworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2lfYmVhbSIsIEVDT1JFX1hfQ1VS
U09SX1hURVJNKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci93YWl0IiwgRUNP
UkVfWF9DVVJTT1JfV0FUQ0gpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2hl
bHAiLCBFQ09SRV9YX0NVUlNPUl9RVUVTVElPTl9BUlJPVyk7CisgICAgbV9jdXJzb3JTdHJpbmdN
YXAuc2V0KCJjdXJzb3IvZWFzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9SSUdIVF9TSURFKTsK
KyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF9yZXNpemUiLCBFQ09SRV9Y
X0NVUlNPUl9UT1BfU0lERSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9y
dGhfZWFzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9UT1BfUklHSFRfQ09STkVSKTsKKyAgICBt
X2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF93ZXN0X3Jlc2l6ZSIsIEVDT1JFX1hf
Q1VSU09SX1RPUF9MRUZUX0NPUk5FUik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJz
b3Ivc291dGhfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfQk9UVE9NX1NJREUpOworICAgIG1fY3Vy
c29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3NvdXRoX2Vhc3RfcmVzaXplIiwgRUNPUkVfWF9DVVJT
T1JfQk9UVE9NX1JJR0hUX0NPUk5FUik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJz
b3Ivc291dGhfd2VzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9CT1RUT01fTEVGVF9DT1JORVIp
OworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3dlc3RfcmVzaXplIiwgRUNPUkVf
WF9DVVJTT1JfTEVGVF9TSURFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9u
b3J0aF9zb3V0aF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9TQl9IX0RPVUJMRV9BUlJPVyk7Cisg
ICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvZWFzdF93ZXN0X3Jlc2l6ZSIsIEVDT1JF
X1hfQ1VSU09SX1NCX1ZfRE9VQkxFX0FSUk9XKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci9ub3J0aF9lYXN0X3NvdXRoX3dlc3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfU0la
SU5HKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF93ZXN0X3NvdXRo
X2Vhc3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfU0laSU5HKTsKKyAgICBtX2N1cnNvclN0cmlu
Z01hcC5zZXQoImN1cnNvci9jb2x1bW5fcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfU0JfVl9ET1VC
TEVfQVJST1cpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3Jvd19yZXNpemUi
LCBFQ09SRV9YX0NVUlNPUl9TQl9IX0RPVUJMRV9BUlJPVyk7CisgICAgbV9jdXJzb3JTdHJpbmdN
YXAuc2V0KCJjdXJzb3IvbWlkZGxlX3Bhbm5pbmciLCAgRUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVW
RVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvZWFzdF9wYW5uaW5nIiwg
RUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0
KCJjdXJzb3Ivbm9ydGhfcGFubmluZyIsIEVDT1JFX1hfQ1VSU09SX0NST1NTX1JFVkVSU0UpOwor
ICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL25vcnRoX2Vhc3RfcGFubmluZyIsIEVD
T1JFX1hfQ1VSU09SX0NST1NTX1JFVkVSU0UpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgi
Y3Vyc29yL25vcnRoX3dlc3RfcGFubmluZyIsIEVDT1JFX1hfQ1VSU09SX0NST1NTX1JFVkVSU0Up
OworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3NvdXRoX3Bhbm5pbmciLCBFQ09S
RV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1
cnNvci9zb3V0aF9lYXN0X3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsK
KyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9zb3V0aF93ZXN0X3Bhbm5pbmciLCBF
Q09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci93ZXN0X3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAg
ICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci92ZXJ0aWNhbF90ZXh0IiwgRUNPUkVfWF9D
VVJTT1JfU0JfRE9XTl9BUlJPVyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Iv
Y2VsbCIsIEVDT1JFX1hfQ1VSU09SX0lDT04pOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgi
Y3Vyc29yL2NvbnRleHRfbWVudSIsIEVDT1JFX1hfQ1VSU09SX0hBTkQyKTsKKyAgICBtX2N1cnNv
clN0cmluZ01hcC5zZXQoImN1cnNvci9ub19kcm9wIiwgRUNPUkVfWF9DVVJTT1JfRE9UX0JPWF9N
QVNLKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9jb3B5IiwgRUNPUkVfWF9D
VVJTT1JfSUNPTik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvcHJvZ3Jlc3Mi
LCBFQ09SRV9YX0NVUlNPUl9XQVRDSCk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJz
b3IvYWxpYXMiLCBFQ09SRV9YX0NVUlNPUl9NQU4pOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNl
dCgiY3Vyc29yL25vbmUiLCBFQ09SRV9YX0NVUlNPUl9YKTsKKyAgICBtX2N1cnNvclN0cmluZ01h
cC5zZXQoImN1cnNvci9ub3RfYWxsb3dlZCIsIEVDT1JFX1hfQ1VSU09SX1gpOworICAgIG1fY3Vy
c29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3pvb21faW4iLCBFQ09SRV9YX0NVUlNPUl9ESUFNT05E
X0NST1NTKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci96b29tX291dCIsIEVD
T1JFX1hfQ1VSU09SX0RJQU1PTkRfQ1JPU1MpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgi
Y3Vyc29yL2dyYWIiLCBFQ09SRV9YX0NVUlNPUl9IQU5EMik7CisgICAgbV9jdXJzb3JTdHJpbmdN
YXAuc2V0KCJjdXJzb3IvZ3JhYmJpbmciLCBFQ09SRV9YX0NVUlNPUl9IQU5EMik7Cit9CisKK3N0
YXRpYyBDdXJzb3JNYXAgY3Vyc29yU3RyaW5nTWFwID0gQ3Vyc29yTWFwKCk7CisjZW5kaWYKKwor
Y2xhc3MgV2lkZ2V0UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgRXZhcyogbV9ldmFzOworICAgIEV2
YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7CisgICAgU3RyaW5nIG1fdGhlbWU7CisKKyAgICBXaWRn
ZXRQcml2YXRlKCkKKyAgICAgICAgOiBtX2V2YXMoMCkKKyAgICAgICAgLCBtX2V2YXNPYmplY3Qo
MCkKKyAgICAgICAgLCBtX2N1cnNvck9iamVjdCgwKQorI2lmZGVmIEhBVkVfRUNPUkVfWAorICAg
ICAgICAsIG1faXNVc2luZ0Vjb3JlWChmYWxzZSkKKyNlbmRpZgorICAgIHt9CisKKyAgICAvKiBj
dXJzb3IgKi8KKyAgICBTdHJpbmcgbV9jdXJzb3JHcm91cDsKKyAgICBFdmFzX09iamVjdCogbV9j
dXJzb3JPYmplY3Q7CisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICBib29sIG1faXNVc2luZ0Vj
b3JlWDsKKyNlbmRpZgorfTsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0
KQorICAgIDogbV9wYXJlbnQoMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3NlbGZWaXNp
YmxlKGZhbHNlKQorICAgICwgbV9wYXJlbnRWaXNpYmxlKGZhbHNlKQorICAgICwgbV9mcmFtZSgw
LCAwLCAwLCAwKQorICAgICwgbV9kYXRhKG5ldyBXaWRnZXRQcml2YXRlKQoreworICAgIGluaXQo
d2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBBU1NFUlQoIXBhcmVudCgp
KTsKKworICAgIGlmIChtX2RhdGEtPm1fY3Vyc29yT2JqZWN0KQorICAgICAgICBldmFzX29iamVj
dF9kZWwobV9kYXRhLT5tX2N1cnNvck9iamVjdCk7CisKKyAgICBkZWxldGUgbV9kYXRhOworfQor
CitJbnRSZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFt
ZTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIG1fZnJhbWUgPSByZWN0OworICAgIFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQoKTsK
K30KKwordm9pZCBXaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKK3sKKyAgICBFdmFzX09iamVj
dCogbyA9IGV2YXNPYmplY3QoKTsKKyAgICBFdmFzX0Nvb3JkIHgsIHk7CisKKyAgICBpZiAoIXBh
cmVudCgpIHx8ICFvKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFt
ZVJlY3QoKTsKKyAgICBpZiAocGFyZW50KCktPmlzU2Nyb2xsVmlld1Njcm9sbGJhcih0aGlzKSkK
KyAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihwYXJlbnQoKS0+Y29udmVydFRvQ29udGFpbmluZ1dp
bmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHJlY3Quc2V0TG9jYXRp
b24ocGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7CisKKyAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQocm9vdCgpLT5ldmFzT2JqZWN0KCksICZ4LCAmeSwgMCwg
MCk7CisgICAgZXZhc19vYmplY3RfbW92ZShvLCB4ICsgcmVjdC54KCksIHkgKyByZWN0LnkoKSk7
CisgICAgZXZhc19vYmplY3RfcmVzaXplKG8sIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjphcHBs
eUZhbGxiYWNrQ3Vyc29yKCkKK3sKKyNpZiBIQVZFX0VDT1JFX1gKKyAgICBpZiAobV9kYXRhLT5t
X2lzVXNpbmdFY29yZVggJiYgIW1fZGF0YS0+bV9jdXJzb3JHcm91cC5pc051bGwoKSkgeworICAg
ICAgICBpbnQgc2hhcGUgPSBjdXJzb3JTdHJpbmdNYXAuY3Vyc29yKG1fZGF0YS0+bV9jdXJzb3JH
cm91cC51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoc2hhcGUgPCBFQ09SRV9YX0NVUlNP
Ul9YIHx8IHNoYXBlID4gRUNPUkVfWF9DVVJTT1JfWFRFUk0pIHsKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRVJST1I6IGNhbm5vdCBtYXAgYW4gZXF1aXZhbGVudCBYIGN1cnNvciBmb3Ii
CisgICAgICAgICAgICAgICAgICAgICIgY3Vyc29yIGdyb3VwICVzIiwgbV9kYXRhLT5tX2N1cnNv
ckdyb3VwLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgc2hhcGUgPSBFQ09SRV9YX0NVUlNP
Ul9MRUZUX1BUUjsKKyAgICAgICAgfQorCisgICAgICAgIEVjb3JlX1hfV2luZG93IHdpbiA9IGVj
b3JlX2V2YXNfc29mdHdhcmVfeDExX3dpbmRvd19nZXQoZWNvcmVFdmFzKCkpOworICAgICAgICBF
Y29yZV9YX0N1cnNvciBjdXIgPSBlY29yZV94X2N1cnNvcl9zaGFwZV9nZXQoc2hhcGUpOworICAg
ICAgICBlY29yZV94X3dpbmRvd19jdXJzb3Jfc2V0KHdpbiwgY3VyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbHNlCisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogT29vcHMsIG5vIGZh
bGxiYWNrIHRvIHNldCBjdXJzb3IgJXMhXG4iLAorICAgICAgICAgICAgbV9kYXRhLT5tX2N1cnNv
ckdyb3VwLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9CisKK3ZvaWQgV2lkZ2V0OjphcHBseUN1
cnNvcigpCit7CisgICAgY29uc3QgY2hhciAqZmlsZTsKKyAgICBFdmFzX0Nvb3JkIHgsIHk7CisK
KyAgICBTdHJpbmcgdGhlbWUgPSBlZGplVGhlbWVSZWN1cnNpdmUoKTsKKyAgICBpZiAoIXRoZW1l
LmlzTnVsbCgpKQorICAgICAgICBmaWxlID0gZWRqZVRoZW1lUmVjdXJzaXZlKCkudXRmOCgpLmRh
dGEoKTsKKworICAgIG1fZGF0YS0+bV9jdXJzb3JPYmplY3QgPSBlZGplX29iamVjdF9hZGQoZXZh
cygpKTsKKyAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVfc2V0KG1fZGF0YS0+bV9jdXJzb3JPYmpl
Y3QsIGZpbGUsIG1fZGF0YS0+bV9jdXJzb3JHcm91cC51dGY4KCkuZGF0YSgpKSkgeworICAgICAg
ICBldmFzX29iamVjdF9kZWwobV9kYXRhLT5tX2N1cnNvck9iamVjdCk7CisgICAgICAgIG1fZGF0
YS0+bV9jdXJzb3JPYmplY3QgPSAwOworICAgICAgICBlY29yZV9ldmFzX29iamVjdF9jdXJzb3Jf
c2V0KGVjb3JlRXZhcygpLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgYXBwbHlGYWxsYmFja0N1cnNv
cigpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgY29u
c3QgY2hhciAqZDsKKworICAgICAgICBlZGplX29iamVjdF9zaXplX21pbl9nZXQobV9kYXRhLT5t
X2N1cnNvck9iamVjdCwgJncsICZoKTsKKyAgICAgICAgaWYgKCh3IDw9IDApIHx8IChoIDw9IDAp
KQorICAgICAgICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fY2FsYyhtX2RhdGEtPm1fY3Vyc29y
T2JqZWN0LCAmdywgJmgpOworICAgICAgICBpZiAoKHcgPD0gMCkgfHwgKGggPD0gMCkpCisgICAg
ICAgICAgICB3ID0gaCA9IDE2OworICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV9kYXRhLT5t
X2N1cnNvck9iamVjdCwgdywgaCk7CisKKyAgICAgICAgZCA9IGVkamVfb2JqZWN0X2RhdGFfZ2V0
KG1fZGF0YS0+bV9jdXJzb3JPYmplY3QsICJob3QueCIpOworICAgICAgICB4ID0gZCA/IGF0b2ko
ZCkgOiAwOworCisgICAgICAgIGQgPSBlZGplX29iamVjdF9kYXRhX2dldChtX2RhdGEtPm1fY3Vy
c29yT2JqZWN0LCAiaG90LnkiKTsKKyAgICAgICAgeSA9IGQgPyBhdG9pKGQpIDogMDsKKworICAg
ICAgICBlY29yZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcygpLCBtX2RhdGEtPm1f
Y3Vyc29yT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWQVNf
TEFZRVJfTUFYLCB4LCB5KTsKKyAgICB9Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpIHx8ICFldmFz
KCkpCisgICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyICpncm91cCA9IGN1cnNvci5p
bXBsKCk7CisgICAgaWYgKCFncm91cCB8fCBTdHJpbmcoZ3JvdXApID09IG1fZGF0YS0+bV9jdXJz
b3JHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX2N1cnNvckdyb3VwID0g
Z3JvdXA7CisKKyAgICBhcHBseUN1cnNvcigpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7
CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgcmV0dXJuOworCisgICAgZXZh
c19vYmplY3Rfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUo
KQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgIHJldHVybjsKKworICAg
IGV2YXNfb2JqZWN0X2hpZGUocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworY29uc3QgU3RyaW5nIFdpZGdldDo6ZWRqZVRo
ZW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX3RoZW1lOworfQorCit2b2lkIFdp
ZGdldDo6c2V0RWRqZVRoZW1lKGNvbnN0IFN0cmluZyYgdGhlbWVQYXRoKQoreworICAgIGlmICht
X2RhdGEtPm1fdGhlbWUgPT0gdGhlbWVQYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rh
dGEtPm1fdGhlbWUgPSB0aGVtZVBhdGg7Cit9CisKK2NvbnN0IFN0cmluZyBXaWRnZXQ6OmVkamVU
aGVtZVJlY3Vyc2l2ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2RhdGEtPm1fdGhlbWUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBtX2RhdGEtPm1fdGhlbWU7CisgICAgaWYgKG1fcGFyZW50KQor
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmVkamVUaGVtZVJlY3Vyc2l2ZSgpOworCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitFdmFzKiBXaWRnZXQ6OmV2YXMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RhdGEtPm1fZXZhczsKK30KKworRWNvcmVfRXZhcyogV2lkZ2V0OjplY29yZUV2YXMo
KSBjb25zdAoreworICAgIC8vIEZJWE1FIEVGTDogWFhYIGFzc3VtZSBldmFzIHdhcyBjcmVhdGVk
IGJ5IGVjb3JlX2V2YXMKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWNvcmVfRXZhcyo+KGV2YXNf
ZGF0YV9hdHRhY2hfZ2V0KGV2YXMoKSkpOworfQorCit2b2lkIFdpZGdldDo6c2V0RXZhc09iamVj
dChFdmFzX09iamVjdCAqbykKK3sKKyAgICAvLyBGSVhNRTogc3R1ZHkgcGxhdGZvcm1XaWRnZXQo
KSBhbmQgdXNlIGl0CisgICAgLy8gRklYTUU6IHJpZ2h0IG5vdyBwbGF0Zm9ybVdpZGdldCgpIHJl
cXVpcmVzIGltcGxlbWVudGluZyB0b28gbXVjaAorICAgIGlmIChtX2RhdGEtPm1fZXZhc09iamVj
dCA9PSBvKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5tX2V2YXNPYmplY3QgPSBvOwor
ICAgIGlmICghbykgeworICAgICAgICBtX2RhdGEtPm1fZXZhcyA9IDA7CisgICAgICAgIG1fZGF0
YS0+bV9pc1VzaW5nRWNvcmVYID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2RhdGEtPm1fZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pOworCisjaWZkZWYgSEFW
RV9FQ09SRV9YCisgICAgY29uc3QgY2hhciAqZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFt
ZV9nZXQoZWNvcmVFdmFzKCkpOworICAgIG1fZGF0YS0+bV9pc1VzaW5nRWNvcmVYID0gKCFzdHJj
bXAoZW5naW5lLCAic29mdHdhcmVfeDExIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCAhc3RyY21wKGVuZ2luZSwgInNvZnR3YXJlX3hjYiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgIXN0cmNtcChlbmdpbmUsICJzb2Z0d2FyZV8xNl94MTEiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJuY21wKGVuZ2luZSwgInhyZW5kZXIiLCBz
aXplb2YoInhyZW5kZXIiKSAtIDEpKTsKKyNlbmRpZgorCisgICAgV2lkZ2V0OjpmcmFtZVJlY3Rz
Q2hhbmdlZCgpOworfQorCitFdmFzX09iamVjdCogV2lkZ2V0OjpldmFzT2JqZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX2V2YXNPYmplY3Q7Cit9CisKK30K
</data>
<flag name="review"
          id="31746"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48996</attachid>
            <date>2010-02-18 03:39:11 -0800</date>
            <delta_ts>2010-02-22 10:54:57 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/graphics/efl</desc>
            <filename>webkit-efl-port-webcore_platform_graphics_efl.diff</filename>
            <type>text/plain</type>
            <size>77687</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Zsb2F0UmVjdEVmbC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMmYzMjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRl
Y25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBFaW5hX1JlY3RhbmdsZSYgcikK
KyAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludChyLngsIHIueSkpCisgICAgLCBtX3NpemUoci53
LCByLmgpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgRWluYV9SZWN0YW5nbGUoKSBjb25z
dAoreworICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7KGludCkgcm91bmQoeCgpKSwgKGludCkgcm91
bmQoeSgpKSwgKGludCkgcm91bmQod2lkdGgoKSksIChpbnQpIHJvdW5kKGhlaWdodCgpKX07Cisg
ICAgcmV0dXJuIHI7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvRm9udENhY2hlRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0ZvbnRDYWNoZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQx
YWZhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Zv
bnRDYWNoZUVmbC5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0
Zm9ybUluaXQoKQoreworICAgIGlmICghRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBuZXcgU2ltcGxlRm9u
dERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWls
eSgpLmZhbWlseSgpKSk7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgcmV0dXJuIG5ldyBT
aW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZv
bnQuZmFtaWx5KCkuZmFtaWx5KCkpKTsKK30KKworU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikKK3sKKyAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhv
dyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4KKyAgICAvLyBGb3Igbm93IHdlJ2xs
IHBpY2sgdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2lu
ZyBhbnkgcHJlZnMuCisgICAgc3RhdGljIEF0b21pY1N0cmluZyB0aW1lc1N0cigiVGltZXMgTmV3
IFJvbWFuIik7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwg
dGltZXNTdHIpOworfQorCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykK
K3sKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTUyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMCww
ICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5o
IgorCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveSht
X2ZvbnRGYWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250
UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNl
LCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lk
KiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigp
OworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1E
YXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZm
ZXIpOworCisgICAgaW50IGVycm9yOworCisgICAgc3RhdGljIEZUX0xpYnJhcnkgbGlicmFyeSA9
IDA7CisgICAgaWYgKCFsaWJyYXJ5KSB7CisgICAgICAgIGVycm9yID0gRlRfSW5pdF9GcmVlVHlw
ZSgmbGlicmFyeSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgbGlicmFyeSA9
IDA7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUX0Zh
Y2UgZmFjZTsKKyAgICBlcnJvciA9IEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVy
cHJldF9jYXN0PGNvbnN0IEZUX0J5dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgp
LCAwLCAmZmFjZSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJ1
ZmZlci0+cmVmKCk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fZnRf
Zm9udF9mYWNlX2NyZWF0ZV9mb3JfZnRfZmFjZShmYWNlLCAwKTsKKworICAgIHN0YXRpYyBjYWly
b191c2VyX2RhdGFfa2V5X3QgYnVmZmVyS2V5OworICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNl
cl9kYXRhKGZvbnRGYWNlLCAmYnVmZmVyS2V5LCBidWZmZXIsIHJlbGVhc2VEYXRhKTsKKworICAg
IHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmb250RmFjZSk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWE1ZDBiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAorI2Rl
ZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9j
YWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UpCisgICAgOiBtX2ZvbnRGYWNl
KGZvbnRGYWNlKQorICAgIHt9CisKKyAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisg
ICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwor
CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Cit9OworCitGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVm
ZmVyKTsKK30KKworI2VuZGlmIC8vIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jN2Q0MTFhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvRm9udEVmbC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2lu
dCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBp
bnQsIGJvb2wpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiwgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250UGxhdGZvcm1EYXRhLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4OTA1NAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMCwwICsx
LDEzNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGlt
cGxlbWVudGF0aW9uLgorICogSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3Ro
ZXIgdGhhbiBGb250TWFjLmNwcCwKKyAqIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBGb250UGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCisKKyNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisjaW5jbHVkZSA8Y2Fp
cm8tZnQuaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNlbGlmIGRlZmlu
ZWQoVVNFX1BBTkdPKQorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKyNlbHNlCisjZXJy
b3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIEZvbnRQbGF0
Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorI2lmIGRlZmluZWQoVVNF
X0ZSRUVUWVBFKQorICAgICAgICA6IG1fcGF0dGVybihoYXNoVGFibGVEZWxldGVkRm9udFZhbHVl
KCkpCisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAg
ICAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQorI2Vsc2UKKyNlcnJv
ciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCisgICAgICAgICwgbV9zY2Fs
ZWRGb250KDApCisgICAgICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisjaWYgZGVm
aW5lZChVU0VfRlJFRVRZUEUpCisgICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxpZiBkZWZpbmVk
KFVTRV9QQU5HTykKKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkK
KyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorICAg
ICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwor
CisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGlj
KTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworCisgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKKworICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5pKCk7CisK
KyAgICBib29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKyAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5
bnRoZXRpY0JvbGQ7IH0KKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7IHJldHVy
biBtX3N5bnRoZXRpY09ibGlxdWU7IH0KKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxl
ZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KKworICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKKyAgICAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29k
ZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworI2lmIGRlZmluZWQoVVNFX0ZS
RUVUWVBFKQorICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGhhc2hUYWJsZURlbGV0ZWRGb250
VmFsdWUoKTsKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAgICByZXR1cm4gbV9mb250
ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyNlbmRpZgorICAgIH07CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IGRlZmluZWQoVVNFX0ZSRUVUWVBFKQorICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworI2VsaWYg
ZGVmaW5lZChVU0VfUEFOR08pCisgICAgc3RhdGljIFBhbmdvRm9udE1hcCogbV9mb250TWFwOwor
ICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBtX2hhc2hUYWJsZTsKKworICAgIFBhbmdvQ29udGV4dCog
bV9jb250ZXh0OworICAgIFBhbmdvRm9udCogbV9mb250OworI2Vsc2UKKyNlcnJvciAiTXVzdCBk
ZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCisgICAgZmxvYXQgbV9zaXplOworICAgIGJv
b2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOworICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZDsKKworcHJpdmF0ZToKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICBzdGF0aWMg
RmNQYXR0ZXJuICpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxGY1BhdHRlcm4qPigtMSk7IH0KKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAg
IHN0YXRpYyBQYW5nb0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKTsgfQorI2VuZGlmCit9OworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0Zm9y
bURhdGFFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udFBsYXRmb3Jt
RGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExOTQ1MAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0
Zm9ybURhdGFFZmwuY3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUg
PGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2Zj
ZnJlZXR5cGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAs
IG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpCisgICAgLCBtX3N5bnRoZXRp
Y0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgLCBtX3Nj
YWxlZEZvbnQoMCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhOjppbml0KCk7CisKKyAgICBDU3Ry
aW5nIGZhbWlseU5hbWVTdHJpbmcgPSBmYW1pbHlOYW1lLnN0cmluZygpLnV0ZjgoKTsKKyAgICBj
b25zdCBjaGFyKiBmY2ZhbWlseSA9IGZhbWlseU5hbWVTdHJpbmcuZGF0YSgpOworICAgIGludCBm
Y3NsYW50ID0gRkNfU0xBTlRfUk9NQU47CisgICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdo
dCB2YWx1ZXMgdG8gZm9udGNvbmZpZyB3ZWlnaHRzLgorICAgIGludCBmY3dlaWdodCA9IEZDX1dF
SUdIVF9OT1JNQUw7CisgICAgZmxvYXQgZmNzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpOworICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIGZjc2xh
bnQgPSBGQ19TTEFOVF9JVEFMSUM7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA+
PSBGb250V2VpZ2h0NjAwKQorICAgICAgICBmY3dlaWdodCA9IEZDX1dFSUdIVF9CT0xEOworCisg
ICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworCisgICAgRmNQ
YXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7CisgICAgY2Fpcm9fZm9udF9mYWNl
X3QqIGZvbnRGYWNlOworICAgIHN0YXRpYyBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogZGVm
YXVsdE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgY29uc3QgY2Fp
cm9fZm9udF9vcHRpb25zX3QqIG9wdGlvbnMgPSAwOworICAgIGNhaXJvX21hdHJpeF90IGZvbnRN
YXRyaXg7CisKKyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCisgICAgICAgIGdv
dG8gZnJlZVBhdHRlcm47CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZjZmFtaWx5ID0gInNlcmlmIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAg
ICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIGZjZmFtaWx5ID0gIm1v
bm9zcGFjZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7CisgICAgfQorCisgICAgaWYg
KCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0
PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWlseSkpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwor
ICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19TTEFOVCwgZmNzbGFudCkp
CisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2Vy
KHBhdHRlcm4sIEZDX1dFSUdIVCwgZmN3ZWlnaHQpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJu
OworICAgIGlmICghRmNQYXR0ZXJuQWRkRG91YmxlKHBhdHRlcm4sIEZDX1BJWEVMX1NJWkUsIGZj
c2l6ZSkpCisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisKKyAgICBGY0NvbmZpZ1N1YnN0aXR1
dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOworICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUo
cGF0dGVybik7CisKKyAgICBGY1Jlc3VsdCBmY3Jlc3VsdDsKKyAgICBtX3BhdHRlcm4gPSBGY0Zv
bnRNYXRjaCgwLCBwYXR0ZXJuLCAmZmNyZXN1bHQpOworICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ug
c2V0IHNvbWUgZGVmYXVsdCBmb250PworICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAgICBnb3Rv
IGZyZWVQYXR0ZXJuOworICAgIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9m
b3JfcGF0dGVybihtX3BhdHRlcm4pOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWly
b19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgIGNhaXJvX21hdHJp
eF9pbml0X2lkZW50aXR5KCZjdG0pOworCisgICAgaWYgKCFvcHRpb25zKQorICAgICAgICBvcHRp
b25zID0gZGVmYXVsdE9wdGlvbnM7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBj
YWlyb19mb250X2ZhY2VfZGVzdHJveShmb250RmFjZSk7CisKK2ZyZWVQYXR0ZXJuOgorICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fcGF0
dGVybigwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkK
KyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShpdGFsaWMpCisgICAgLCBtX3NjYWxlZEZvbnQoMCkK
K3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDog
bV9wYXR0ZXJuKDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc3ludGhldGljQm9sZChi
b2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKKyAgICAsIG1fc2NhbGVkRm9u
dCgwKQoreworICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisgICAgY2Fpcm9fbWF0cml4
X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOworICAgIGNhaXJvX21hdHJpeF90
IGN0bTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICBjYWlyb19m
b250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKwor
ICAgIC8vIFdlIGZvcmNlIGFudGlhbGlhc2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3Zp
ZGUgY29uc2lzdGVudAorICAgIC8vIHR5cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZv
bnRzIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0
eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7CisgICAgY2Fpcm9fZm9udF9vcHRp
b25zX3NldF9hbnRpYWxpYXMob3B0aW9ucywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOworCisgICAg
bV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1h
dHJpeCwgJmN0bSwgb3B0aW9ucyk7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0
aW9ucyk7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5pdGlhbGl6ZWQgPSBmYWxzZTsK
KworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sKKyAgICBpbml0aWFsaXplZCA9IGZh
bHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KCFGY0luaXQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGluaXQgZm9udCBj
b25maWcgbGlicmFyeVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OmZpbmkoKQoreworICAgIGlmICghaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBvdXQtY29tbWVudCB0aGUg
bGluZSBiZWxvdyBkdWUgdG8gdGhpcyBjcmFzaDoKKyAgICAvLyBGY0NhY2hlRmluaTogQXNzZXJ0
aW9uICdmY0NhY2hlQ2hhaW5zW2ldID09KCh2b2lkKikwKScKKyAgICAvLyBXZSBhcmUgYWxyZWFk
eSBjbGVhbmluZyB0aGUgRm9udENhY2hlIGJ1dCB3ZSBtaWdodCBzdGlsbCBoYXZlCisgICAgLy8g
cmVmZXJlbmNlIGZyb20gdGhlIGZyYW1lJ3Mgbm9kZXMgKENTUykuIFRoZSBDcmFzaCBpcyBlYXNp
bHkKKyAgICAvLyByZXByb2R1Y2FibGUgYnkgZnVsbHkgbG9hZGluZyBodHRwOi8vcG9sLmRrCisg
ICAgLy8gRmNGaW5pKCk7Cit9CisKKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQoreworICAgIC8vIE5PVEU6IHRoZSBkZXN0cm95aW5nIG9mIG1fc2NhbGVkRm9udCBhbmQg
bV9wYXR0ZXJuIGlzCisgICAgLy8gYmVpbmcgaGFuZGxlZCBieSBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2go
KQoreworICAgIC8vIFRPRE86IFN1cHBvcnQgaXNGaXhlZFBpdGNoKCkgZm9yIGN1c3RvbSBmb250
cy4KKyAgICBpZiAoIW1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50
IHNwYWNpbmc7CisgICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIobV9wYXR0ZXJuLCBGQ19TUEFD
SU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgcmV0dXJuIHNwYWNp
bmcgPT0gRkNfTU9OTzsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAobV9wYXR0ZXJuID09IG90aGVyLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKCFtX3BhdHRlcm4gfHwgbV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8
RmNQYXR0ZXJuKj4oLTEpCisgICAgICAgIHx8ICFvdGhlci5tX3BhdHRlcm4gfHwgb3RoZXIubV9w
YXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIEZjUGF0dGVybkVxdWFsKG1fcGF0dGVybiwgb3RoZXIubV9w
YXR0ZXJuKTsKK30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpk
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dseXBoUGFnZVRy
ZWVOb2RlRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dseXBoUGFnZVRy
ZWVOb2RlRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBkZmU1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR2x5cGhQ
YWdlVHJlZU5vZGVFZmwuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8gVGhl
IGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlm
IHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8v
IFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBH
bHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZUX0ZhY2UgZmFj
ZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkubV9zY2FsZWRGb250KTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IEZjRnJlZVR5cGVDaGFy
SW5kZXgoZmFjZSwgYnVmZmVyW2ldKTsKKyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAg
IHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250
RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5tX3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25FZmwuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzZGUwNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25FZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJY29uOjpJY29uKCkKKyAgICA6IG1faWNvbigw
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ljb246On5JY29uKCkKK3sKK30KKwor
UGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbWFnZUVmbC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbWFnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjFkMDNjYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0ltYWdlRWZsLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisK
KyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRhKCkKK3sK
K30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCit7Cit9CisK
K3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVy
RmFsbGJhY2soKQoreworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOyAvLyBUT0RP
OiBmYWxsYmFjayBpbWFnZT8KK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBs
b2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09m
RmlsZShTdHJpbmc6OmZvcm1hdChEQVRBX0RJUiAiL3dlYmtpdC0xLjAvaW1hZ2VzLyVzLnBuZyIs
IG5hbWUpKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVyRmFsbGJhY2soKTsKK30KKwor
UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbG9hZFJlc291cmNlU2hh
cmVkQnVmZmVyKG5hbWUpOworICAgIGltZy0+c2V0RGF0YShidWZmZXIucmVsZWFzZSgpLCB0cnVl
KTsKKyAgICByZXR1cm4gaW1nLnJlbGVhc2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmMwMzYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9JbnRQb2ludEVmbC5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkludFBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6Oklu
dFBvaW50KGNvbnN0IEV2YXNfUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAu
eSkKK3sKK30KKworSW50UG9pbnQ6Om9wZXJhdG9yIEV2YXNfUG9pbnQoKSBjb25zdAoreworICAg
IEV2YXNfUG9pbnQgcCA9IHsgeCgpLCB5KCkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRSZWN0RWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWNmM2FhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bnRSZWN0OjpJbnRSZWN0KGNvbnN0IEVpbmFfUmVjdGFuZ2xlJiByKQorICAgIDogbV9sb2NhdGlv
bihJbnRQb2ludChyLngsIHIueSkpCisgICAgLCBtX3NpemUoci53LCByLmgpCit7Cit9CisKK0lu
dFJlY3Q6Om9wZXJhdG9yIEVpbmFfUmVjdGFuZ2xlKCkgY29uc3QKK3sKKyAgICBFaW5hX1JlY3Rh
bmdsZSByID0geyB4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkgfTsKKyAgICByZXR1cm4gcjsK
K30KKworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42NDYzZDhkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsx
LDY0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykKKworI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0
LmgiCisKKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL21peGVyLmg+CisjaW5jbHVkZSA8Z3N0L2lu
dGVyZmFjZXMveG92ZXJsYXkuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9HT3duUHRyLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZ2Jvb2xl
YW4gbWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2Fn
ZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSht
ZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FUlJPUikgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyOworICAgICAgICBHT3duUHRyPGdjaGFyPiBkZWJ1ZzsKKworICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOwor
ICAgICAgICBpZiAoZXJyLT5jb2RlID09IDMpIHsKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1l
ZGlhLCAiRmlsZSBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZSog
bXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOworICAgICAg
ICAgICAgaWYgKG1wKQorICAgICAgICAgICAgICAgIG1wLT5sb2FkaW5nRmFpbGVkKCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJFcnJvcjogJWQsICVz
IiwgZXJyLT5jb2RlLCAgZXJyLT5tZXNzYWdlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKEdzdEJ1cyogYnVzLCBH
c3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChHU1RfTUVTU0FH
RV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VPUykgeworICAgICAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIkVuZCBvZiBTdHJlYW0iKTsKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBt
cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgICAg
IG1wLT5kaWRFbmQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2dib29sZWFuIG1l
ZGlhUGxheWVyUHJpdmF0ZVN0YXRlQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1l
c3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2Fn
ZSkgPT0gR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCkgeworICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsK
KyAgICAgICAgbXAtPnVwZGF0ZVN0YXRlcygpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlQnVmZmVyaW5nQ2FsbGJhY2soR3N0QnVzKiBi
dXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKEdTVF9N
RVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfQlVGRkVSSU5HKSB7CisgICAgICAg
IGdpbnQgcGVyY2VudCA9IDA7CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyht
ZXNzYWdlLCAmcGVyY2VudCk7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQnVmZmVyaW5n
ICVkIiwgcGVyY2VudCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgTWVk
aWFQbGF5ZXJQcml2YXRlKiBwbGF5ZXJQcml2YXRlKQoreworICAgIHBsYXllclByaXZhdGUtPnJl
cGFpbnQoKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclBy
aXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBuZXcgTWVk
aWFQbGF5ZXJQcml2YXRlKHBsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAg
ICBpZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9y
dGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIp
CisgICAgLCBtX3BsYXlCaW4oMCkKKyAgICAsIG1fdmlkZW9TaW5rKDApCisgICAgLCBtX3NvdXJj
ZSgwKQorICAgICwgbV9yYXRlKDEuMGYpCisgICAgLCBtX2VuZFRpbWUobnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICwgbV9pc0VuZFJlYWNoZWQoZmFsc2UpCisgICAgLCBt
X3ZvbHVtZSgwLjVmKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQor
ICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1fc3Rh
cnRlZFBsYXlpbmcoZmFsc2UpCisgICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQorICAgICwgbV9z
aXplKEludFNpemUoKSkKKyAgICAsIG1fdmlzaWJsZSh0cnVlKQoreworCisgICAgc3RhdGljIGJv
b2wgZ3N0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3Mg
dGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICBpZiAoIWdzdEluaXRpYWxp
emVkKSB7CisgICAgICAgIGdzdF9pbml0KDAsIDApOworICAgICAgICBnc3RJbml0aWFsaXplZCA9
IHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoZSBzaXplIHNob3VsZG4ndCBiZSBmaXhl
ZCBoZXJlLCB0aGlzIGlzIGp1c3QgYSBxdWljayBoYWNrLgorICAgIG1fc3VyZmFjZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIDY0MCwgNDgwKTsKK30K
KworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICBpZiAo
bV9zdXJmYWNlKQorICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKwor
ICAgIGlmIChtX3BsYXlCaW4pIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxh
eUJpbiwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpF
Q1QobV9wbGF5QmluKSk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkxvYWQgJXMi
LCB1cmwudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Okxv
YWRpbmc7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQor
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9w
bGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgY3JlYXRlR1NUUGxheUJp
bih1cmwpOworICAgIHBhdXNlKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5
KCkKK3sKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBsYXkiKTsKKyAgICAvLyBXaGVuIGVuZCBy
ZWFjaGVkLCByZXdpbmQgZm9yIFRlc3QgdmlkZW8tc2Vlay1wYXN0LWVuZC1wbGF5aW5nCisgICAg
aWYgKG1faXNFbmRSZWFjaGVkKQorICAgICAgICBzZWVrKDApOworICAgIG1faXNFbmRSZWFjaGVk
ID0gZmFsc2U7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RB
VEVfUExBWUlORyk7CisgICAgbV9zdGFydGVkUGxheWluZyA9IHRydWU7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCit7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQYXVz
ZSIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9QQVVT
RUQpOworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKK30KKworZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAg
ICAgIHJldHVybiAwLjA7CisKKyAgICBHc3RGb3JtYXQgdGltZUZvcm1hdCA9IEdTVF9GT1JNQVRf
VElNRTsKKyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CisKKyAgICAvLyBGSVhNRTogV2UgdHJ5
IHRvIGdldCB0aGUgZHVyYXRpb24sIGJ1dCB3ZSBkbyBub3QgdHJ1c3QgdGhlCisgICAgLy8gcmV0
dXJuIHZhbHVlIG9mIHRoZSBxdWVyeSBmdW5jdGlvbiBvbmx5OyB0aGUgcHJvYmxlbSB3ZSBhcmUK
KyAgICAvLyB0cnlpbmcgdG8gd29yay1hcm91bmQgaGVyZSBpcyB0aGF0IHBpcGVsaW5lcyBpbiBz
dHJlYW0gbW9kZSBtYXkKKyAgICAvLyBub3QgYmUgYWJsZSB0byBmaWd1cmUgb3V0IHRoZSBkdXJh
dGlvbiwgYnV0IHN0aWxsIHJldHVybiB0cnVlIQorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ2MzkuCisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVy
eV9kdXJhdGlvbihtX3BsYXlCaW4sICZ0aW1lRm9ybWF0LCAmdGltZUxlbmd0aCkgfHwgdGltZUxl
bmd0aCA8PSAwKSB7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiVGltZSBkdXJhdGlvbiBx
dWVyeSBmYWlsZWQuIik7CisgICAgICAgIG1faXNTdHJlYW1pbmcgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworICAgIH0KKworICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiRHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVf
QVJHUyh0aW1lTGVuZ3RoKSk7CisKKyAgICByZXR1cm4gKGZsb2F0KSAodGltZUxlbmd0aCAvIDEw
MDAwMDAwMDAuMCk7CisgICAgLy8gRklYTUU6IGhhbmRsZSAzLjE0LjkuNSBwcm9wZXJseQorfQor
CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gTmVjZXNzYXJ5IGFzIHNv
bWV0aW1lcywgZ3N0cmVhbWVyIHJldHVybiAwOjAwIGF0IHRoZSBFT1MKKyAgICBpZiAobV9pc0Vu
ZFJlYWNoZWQpCisgICAgICAgIHJldHVybiBtX2VuZFRpbWU7CisKKyAgICBmbG9hdCByZXQ7CisK
KyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRf
VElNRSk7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGxheUJpbiwgcXVlcnkpKSB7Cisg
ICAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9u
KHF1ZXJ5LCAwLCAmcG9zaXRpb24pOworICAgICAgICByZXQgPSAoZmxvYXQpIChwb3NpdGlvbiAv
IDEwMDAwMDAwMDAuMCk7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUG9zaXRpb24gJSIg
R1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQb3NpdGlvbiBxdWVyeSBmYWlsZWQuLi4iKTsK
KyAgICAgICAgcmV0ID0gMC4wOworICAgIH0KKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwor
CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxv
YXQgdGltZSkKK3sKKyAgICBHc3RDbG9ja1RpbWUgc2VjID0gKEdzdENsb2NrVGltZSkodGltZSAq
IEdTVF9TRUNPTkQpOworCisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2lzU3RyZWFtaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIlNlZWs6ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhzZWMpKTsK
KyAgICAvLyBGSVhNRTogV2hhdCBoYXBwZW5zIHdoZW4gdGhlIHNlZWtlZCBwb3NpdGlvbiBpcyBu
b3QgYXZhaWxhYmxlPworICAgIGlmICghZ3N0X2VsZW1lbnRfc2VlayggbV9wbGF5QmluLCBtX3Jh
dGUsCisgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgICAgICAoR3N0U2Vla0Zs
YWdzKShHU1RfU0VFS19GTEFHX0ZMVVNIKSwKKyAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VU
LCBzZWMsCisgICAgICAgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIEdTVF9DTE9DS19USU1FX05P
TkUpKQorICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlNlZWsgdG8gJWYgZmFpbGVkIiwgdGlt
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUp
Cit7CisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9pc1N0
cmVhbWluZykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2VuZFRpbWUgIT0gdGltZSkgewor
ICAgICAgICBtX2VuZFRpbWUgPSB0aW1lOworICAgICAgICBHc3RDbG9ja1RpbWUgc3RhcnQgPSAo
R3N0Q2xvY2tUaW1lKShjdXJyZW50VGltZSgpICogR1NUX1NFQ09ORCk7CisgICAgICAgIEdzdENs
b2NrVGltZSBlbmQgICA9IChHc3RDbG9ja1RpbWUpKHRpbWUgKiBHU1RfU0VDT05EKTsKKyAgICAg
ICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJzZXRFbmRUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdT
VF9USU1FX0FSR1MoZW5kKSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGhhcHBlbnMgd2hlbiB0
aGUgc2Vla2VkIHBvc2l0aW9uIGlzIG5vdCBhdmFpbGFibGU/CisgICAgICAgIGlmICghZ3N0X2Vs
ZW1lbnRfc2VlayhtX3BsYXlCaW4sIG1fcmF0ZSwKKyAgICAgICAgICAgICAgICBHU1RfRk9STUFU
X1RJTUUsCisgICAgICAgICAgICAgICAgKEdzdFNlZWtGbGFncykoR1NUX1NFRUtfRkxBR19GTFVT
SCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpLAorICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZ
UEVfU0VULCBzdGFydCwKKyAgICAgICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgZW5kKSkK
KyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiU2VlayB0byAlZiBmYWlsZWQiLCB0aW1l
KTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGFydEVuZFBvaW50VGlt
ZXJJZk5lZWRlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmNhbmNlbFNlZWsoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjplbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQ
bGF5ZXJQcml2YXRlPiopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3N0YXJ0ZWRQ
bGF5aW5nOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRl
bworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWhhc1ZpZGVvKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBpbnQg
eCA9IDAsIHkgPSAwOworICAgIGlmIChHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKG1fdmlkZW9TaW5rLCAic2luayIpKSB7CisgICAgICAgIGdzdF92aWRlb19nZXRfc2l6
ZShHU1RfUEFEKHBhZCksICZ4LCAmeSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09C
SkVDVChwYWQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gSW50U2l6ZSh4LCB5KTsKK30KKworYm9v
bCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICBnaW50IGN1cnJl
bnRWaWRlbyA9IC0xOworICAgIGlmIChtX3BsYXlCaW4pCisgICAgICAgIGdfb2JqZWN0X2dldChH
X09CSkVDVChtX3BsYXlCaW4pLCAiY3VycmVudC12aWRlbyIsICZjdXJyZW50VmlkZW8sIDApOwor
ICAgIHJldHVybiBjdXJyZW50VmlkZW8gPiAtMTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV92b2x1bWUgPSB2b2x1bWU7Cisg
ICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJWb2x1bWUgdG8gJWYiLCB2b2x1bWUpOworICAgIHNldE11
dGVkKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE11dGVkKGJvb2wg
YikKK3sKKyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGIp
IHsKKyAgICAgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKG1fcGxheUJpbiksICJ2b2x1bWUiLCAm
bV92b2x1bWUsIDApOworICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QobV9wbGF5QmluKSwg
InZvbHVtZSIsIChkb3VibGUpMC4wLCAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ19vYmplY3Rf
c2V0KEdfT0JKRUNUKG1fcGxheUJpbiksICJ2b2x1bWUiLCBtX3ZvbHVtZSwgMCk7CisKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3sKKyAgICBpZiAo
IXJhdGUpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NU
QVRFX1BBVVNFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1faXNTdHJlYW1p
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmF0ZSA9IHJhdGU7CisgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJTZXQgUmF0ZSB0byAlZiIsIHJhdGUpOworICAgIGlmICghZ3N0X2VsZW1lbnRf
c2VlayhtX3BsYXlCaW4sIHJhdGUsCisgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsCisgICAg
ICAgICAgICAoR3N0U2Vla0ZsYWdzKShHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxB
R19BQ0NVUkFURSksCisgICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgKEdzdENsb2NrVGlt
ZSkgKGN1cnJlbnRUaW1lKCkgKiBHU1RfU0VDT05EKSwKKyAgICAgICAgICAgIEdTVF9TRUVLX1RZ
UEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAobV9lbmRUaW1lICogR1NUX1NFQ09ORCkpKQorICAgICAg
ICBMT0dfVkVSQk9TRShNZWRpYSwgIlNldCBSYXRlIHRvICVmIGZhaWxlZCIsIHJhdGUpOworfQor
CitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMTsKK30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBNZWRpYVBsYXllclByaXZhdGU6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbmV0d29ya1N0YXRlOworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXll
clByaXZhdGU6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7
Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGlt
ZUJ1ZmZlcmVkIik7CisgICAgLy8gcnRzcCBzdHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKKyAgICBy
ZXR1cm4gbV9pc1N0cmVhbWluZyA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICAvLyBUT0RP
CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lU2Vla2FibGUiKTsKKyAgICBpZiAobV9p
c1N0cmVhbWluZykKKyAgICAgICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5p
dHkoKTsKKyAgICAvLyBpbmZpbml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbQorICAgIHJl
dHVybiBtYXhUaW1lTG9hZGVkKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4
VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAgLy8gVE9ETworICAgIExPR19WRVJCT1NFKE1lZGlh
LCAibWF4VGltZUxvYWRlZCIpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGR1
cmF0aW9uKCk7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQo
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEs
ICJieXRlc0xvYWRlZCIpOworICAgIC8qaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybiAw
OworICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7CisgICAgZmxvYXQgbWF4VGltZSA9IG1heFRp
bWVMb2FkZWQoKTsKKyAgICBpZiAoIWR1cikKKyAgICAgICAgcmV0dXJuIDA7Ki8KKyAgICByZXR1
cm4gMTsgLy8gdG90YWxCeXRlcygpICogbWF4VGltZSAvIGR1cjsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgInRvdGFsQnl0ZXNLbm93biIpOworICAgIHJl
dHVybiB0b3RhbEJ5dGVzKCkgPiAwOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OnRvdGFsQnl0ZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBEbyBzb21ldGhpbmcgd2l0aCBtX3NvdXJjZSB0byBnZXQgdGhlIHRvdGFsIGJ5dGVzIG9m
IHRoZSBtZWRpYQorCisgICAgcmV0dXJuIDEwMDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmNhbmNlbExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAgIC8vIFRoZXJlIGlzIG5vIChr
bm93bikgd2F5IHRvIGdldCBzdWNoIGxldmVsIG9mIGluZm9ybWF0aW9uIGFib3V0CisgICAgLy8g
dGhlIHN0YXRlIG9mIEdTdHJlYW1lciwgdGhlcmVmb3JlLCB3aGVuIGluIFBBVVNFRCBzdGF0ZSwK
KyAgICAvLyB3ZSBhcmUgc3VyZSB3ZSBjYW4gZGlzcGxheSB0aGUgZmlyc3QgZnJhbWUgYW5kIGdv
IHRvIHBsYXkKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRl
ID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlT
dGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBHc3RTdGF0ZSBw
ZW5kaW5nOworCisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybjsKKworICAgIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4s
CisgICAgICAgICZzdGF0ZSwgJnBlbmRpbmcsIDI1MCAqIEdTVF9OU0VDT05EKTsKKworICAgIHN3
aXRjaCAocmV0KSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6CisgICAgICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCisgICAgICAgICAg
ICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksCisgICAgICAgICAgICBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgaWYgKHN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVFbm91Z2hEYXRhOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFURV9Q
QVVTRUQpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3Vn
aERhdGE7CisKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwor
CisgICAgICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4sICJzb3VyY2UiLCAmbV9zb3VyY2UsIDAp
OworICAgICAgICBpZiAoIW1fc291cmNlKQorICAgICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEs
ICJtX3NvdXJjZSBpcyAwIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NI
QU5HRV9BU1lOQzoKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJBc3luYzogU3RhdGU6ICVz
LCBwZW5kaW5nOiAlcyIsCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShz
dGF0ZSksCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7
CisgICAgICAgIC8vIENoYW5nZSBpbiBwcm9ncmVzcworICAgICAgICByZXR1cm47CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgorICAgICAgICBM
T0dfVkVSQk9TRShNZWRpYSwgIk5vIHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLAor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLAorICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAgICAgICBpZiAoc3Rh
dGUgPT0gR1NUX1NUQVRFX1JFQURZKSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NU
X1NUQVRFX1BBVVNFRCkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlQ3VycmVudERhdGE7CisKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJFbHNlIDogJWQiLCByZXQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoc2Vla2luZygpKQorICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKSB7
CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiTmV0d29yayBTdGF0ZSBDaGFuZ2VkIGZyb20g
JXUgdG8gJXUiLAorICAgICAgICAgICAgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdvcmtTdGF0ZSk7
CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsCisgICAgICAgICAgICBv
bGRSZWFkeVN0YXRlLCBtX3JlYWR5U3RhdGUpOworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkU3Rh
dGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnJhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNpemVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGltZUNoYW5nZWQoKQoreworICAg
IHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6dm9sdW1lQ2hhbmdlZCgpCit7CisgICAgbV9wbGF5ZXItPnZv
bHVtZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCit7
CisgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgIHBhdXNlKCk7CisgICAgdGltZUNoYW5n
ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWRpbmdGYWlsZWQoKQorewor
ICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yKSB7Cisg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICAg
ICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBtX3BsYXllci0+cmVhZHlT
dGF0ZUNoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gc2l6ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1f
dmlzaWJsZSA9IHZpc2libGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50
KCkKK3sKKyAgICBtX3BsYXllci0+cmVwYWludCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RP
OiBtX3NpemUgdnMgcmVjdD8KKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgcmVjdC54
KCksIHJlY3QueSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBtX3N1
cmZhY2UsIDAsIDApOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNl
dDxTdHJpbmc+JiB0eXBlcykKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGVuZ2luZSB0byBz
ZWUgd2hhdCB0eXBlcyBhcmUgc3VwcG9ydGVkCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB0
eXBlcy5hZGQoU3RyaW5nKCJ2aWRlby94LXRoZW9yYStvZ2ciKSk7Cit9CisKK01lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkg
dGhlIGVuZ2luZSB0byBzZWUgd2hhdCB0eXBlcyBhcmUgc3VwcG9ydGVkCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHlwZSA9PSAidmlkZW8veC10aGVvcmErb2dnIiA/IChjb2Rl
Y3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6
OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkKK3sKKyAgICBB
U1NFUlQoIW1fcGxheUJpbik7CisgICAgbV9wbGF5QmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJwbGF5YmluIiwgInBsYXkiKTsKKworICAgIEdzdEJ1cyogYnVzID0gZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGxheUJpbikpOworICAgIGdzdF9idXNfYWRkX3NpZ25h
bF93YXRjaChidXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLCAibWVzc2FnZTo6ZXJyb3Ii
LCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3NhZ2U6OmVvcyIsIEdfQ0FMTEJBQ0sobWVkaWFQ
bGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1
cywgIm1lc3NhZ2U6OnN0YXRlLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0
ZVN0YXRlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3Nh
Z2U6OmJ1ZmZlcmluZyIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQnVmZmVyaW5nQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKGJ1cyk7CisKKyAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1QobV9wbGF5QmluKSwgInVyaSIsIHVybC51dGY4KCkuZGF0YSgpLCAwKTsK
KworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
Z2NvbmZhdWRpb3NpbmsiLCAwKTsKKyAgICBtX3ZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5r
X25ldyhtX3N1cmZhY2UpOworCisgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgImF1ZGlvLXNp
bmsiLCBhdWRpb1NpbmssIDApOworICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1z
aW5rIiwgbV92aWRlb1NpbmssIDApOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3ZpZGVvU2lu
aywgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBh
aW50Q2FsbGJhY2spLCB0aGlzKTsKKworICAgIHNldFZvbHVtZShtX3ZvbHVtZSk7Cit9CisKK30K
KworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzY1Y2RiOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsMTQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5
c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOwordHlwZWRlZiBzdHJ1
Y3QgX0dzdEJ1cyBHc3RCdXM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBTdHJpbmc7
CisKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworZ2Jvb2xlYW4gbWVkaWFQbGF5
ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdw
b2ludGVyIGRhdGEpOworZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhH
c3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CisKK2NsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2Ug
eworICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFcnJvckNhbGxiYWNrKEdz
dEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKKyAgICBmcmll
bmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdz
dE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworICAgIGZyaWVuZCBnYm9vbGVhbiBt
ZWRpYVBsYXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBt
ZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZv
aWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisgICAgICAgIH5N
ZWRpYVBsYXllclByaXZhdGUoKTsKKworICAgICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKworICAgICAgICB2b2lkIGxvYWQo
Y29uc3QgU3RyaW5nICZ1cmwpOworICAgICAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgICAg
ICB2b2lkIHBsYXkoKTsKKyAgICAgICAgdm9pZCBwYXVzZSgpOworCisgICAgICAgIGJvb2wgcGF1
c2VkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OworCisgICAgICAgIGZs
b2F0IGR1cmF0aW9uKCkgY29uc3Q7CisgICAgICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2VlayhmbG9hdCk7CisgICAgICAgIHZvaWQgc2V0RW5kVGltZShmbG9h
dCk7CisKKyAgICAgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAgICAgICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpOworICAgICAgICB2b2lkIHNldE11dGVkKGJvb2wpOworCisgICAgICAgIGludCBk
YXRhUmF0ZSgpIGNvbnN0OworCisgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0
d29ya1N0YXRlKCkgY29uc3Q7CisgICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUoKSBjb25zdDsKKworICAgICAgICBmbG9hdCBtYXhUaW1lQnVmZmVyZWQoKSBjb25zdDsK
KyAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgdG90YWxCeXRlc0tub3duKCkgY29u
c3Q7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgICAgICB2b2lk
IHNldFZpc2libGUoYm9vbCk7CisgICAgICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7
CisKKyAgICAgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgcmF0ZUNo
YW5nZWQoKTsKKyAgICAgICAgdm9pZCBzaXplQ2hhbmdlZCgpOworICAgICAgICB2b2lkIHRpbWVD
aGFuZ2VkKCk7CisgICAgICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgpOworICAgICAgICB2b2lkIGRp
ZEVuZCgpOworICAgICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoKTsKKworICAgICAgICB2b2lkIHJl
cGFpbnQoKTsKKyAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQ
bGF5ZXIqKTsKKyAgICAgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3Jl
YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBv
cnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGNvZGVjcyk7CisgICAgICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCkgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CisgICAgICAgIHZvaWQgY2Fu
Y2VsU2VlaygpOworICAgICAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGU+Kik7CisgICAgICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOworCisgICAgICAgIHZvaWQg
Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIE1l
ZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICAgICAgR3N0RWxlbWVudCogbV9wbGF5QmluOworICAg
ICAgICBHc3RFbGVtZW50KiBtX3ZpZGVvU2luazsKKyAgICAgICAgR3N0RWxlbWVudCogbV9zb3Vy
Y2U7CisgICAgICAgIGZsb2F0IG1fcmF0ZTsKKyAgICAgICAgZmxvYXQgbV9lbmRUaW1lOworICAg
ICAgICBib29sIG1faXNFbmRSZWFjaGVkOworICAgICAgICBkb3VibGUgbV92b2x1bWU7CisgICAg
ICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CisgICAgICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICAgICAgYm9vbCBtX3N0YXJ0
ZWRQbGF5aW5nOworICAgICAgICBtdXRhYmxlIGJvb2wgbV9pc1N0cmVhbWluZzsKKyAgICAgICAg
SW50U2l6ZSBtX3NpemU7CisgICAgICAgIGJvb2wgbV92aXNpYmxlOworICAgICAgICBjYWlyb19z
dXJmYWNlX3QqIG1fc3VyZmFjZTsKK307Cit9CisKKyNlbmRpZgorI2VuZGlmIC8vIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9TaW1wbGVGb250RGF0YUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9TaW1wbGVGb250RGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzdlMTdjYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL1NpbXBsZUZvbnREYXRhRWZsLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIu
aD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUluaXQoKQoreworICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRFeHRlbnRzOworICAgIGNh
aXJvX3RleHRfZXh0ZW50c190IHRleHRFeHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2V4
dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAmZm9udEV4dGVudHMpOworICAgIG1f
YXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250RXh0ZW50cy5hc2NlbnQpOworICAgIG1fZGVz
Y2VudCA9IHN0YXRpY19jYXN0PGludD4oZm9udEV4dGVudHMuZGVzY2VudCk7CisgICAgbV9saW5l
U3BhY2luZyA9IHN0YXRpY19jYXN0PGludD4oZm9udEV4dGVudHMuaGVpZ2h0KTsKKyAgICAvLyBU
aGVyZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cg
d2UKKyAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBN
b25vLCB3aGljaCBtYWtlcworICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRo
YW4gYXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKKyAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMg
V2ViQ29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcworICAgIC8vIHdoaWxlIHdl
IGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9h
c2NlbnQgKyBtX2Rlc2NlbnQpCisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1f
ZGVzY2VudDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURh
dGEubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0RXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4
dEV4dGVudHMuaGVpZ2h0OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3Bs
YXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICIgIiwgJnRleHRFeHRlbnRzKTsKKyAgICBtX3NwYWNl
V2lkdGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0RXh0ZW50cy54X2FkdmFuY2UpOworICAgIG1f
bGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKKyAgICBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBm
IDogMC5mOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQorewor
ICAgIGlmICghaXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1f
cGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9wbGF0Zm9ybURhdGEubV9wYXR0ZXJuKSkg
eworICAgICAgICAgICAgRmNQYXR0ZXJuRGVzdHJveShtX3BsYXRmb3JtRGF0YS5tX3BhdHRlcm4p
OworICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEubV9wYXR0ZXJuID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpIHsKKyAgICAgICAgICAg
IGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsK
KyAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCA9IDA7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKK30KKworU2ltcGxlRm9u
dERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9u
dERhdGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmKmZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqIHBkYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5m
YW1pbHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERh
dGEoKnBkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisK
K2Jvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19m
dF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKwor
ICAgIGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIUZjRnJlZVR5cGVDaGFySW5kZXgo
ZmFjZSwgY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250
X3VubG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19mdF9zY2FsZWRfZm9u
dF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAg
ICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7Cit9
CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisK
KyAgICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190
ZXh0X2V4dGVudHNfdCBleHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVu
dHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisK
KyAgICBmbG9hdCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVk
X2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UpCisgICAgICAgIHcgPSAoZmxvYXQpZXh0ZW50
cy54X2FkdmFuY2U7CisgICAgcmV0dXJuIHc7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAg
bV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNDMyNQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1l
ci5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5l
ZEhhbmQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qKgorICogU0VDVElPTjp3ZWJraXQtdmlkZW8tc2lu
aworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHU3RyZWFtZXIgdmlkZW8gc2luaworICoKKyAqICNX
ZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3RyZWFtZXIgc2luayBlbGVtZW50IHRoYXQgc2VuZHMKKyAq
IGRhdGEgdG8gYSAjY2Fpcm9fc3VyZmFjZV90LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNp
bmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK3N0YXRp
YyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1Q
TEFURSgic2luayIsCisgICAgICAgIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCisgICAg
ICAgIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQU19SR0J4ICI7IiBHU1RfVklERU9fQ0FQ
U19CR1J4KSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3ZpZGVvX3Npbmtf
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVvX3NpbmtfZGVidWcK
Kworc3RhdGljIEdzdEVsZW1lbnREZXRhaWxzIHdlYmtpdFZpZGVvU2lua0RldGFpbHMgPQorICAg
IEdTVF9FTEVNRU5UX0RFVEFJTFMoKGdjaGFyKikgIldlYktpdCB2aWRlbyBzaW5rIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIChnY2hhciopICJTaW5rL1ZpZGVvIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIChnY2hhciopICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlw
ZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnY2hh
ciopICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPiIpOworCitlbnVtIHsKKyAgICBSRVBBSU5U
X1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfU1VSRkFDRQorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdFZpZGVvU2lua1NpZ25h
bHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZh
dGUgeworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZTsKKyAgICBHQXN5bmNRdWV1ZSogYXN5
bmNRdWV1ZTsKKyAgICBnYm9vbGVhbiByZ2JPcmRlcmluZzsKKyAgICBpbnQgd2lkdGg7CisgICAg
aW50IGhlaWdodDsKKyAgICBpbnQgZnBzTjsKKyAgICBpbnQgZnBzRDsKKyAgICBpbnQgcGFyTjsK
KyAgICBpbnQgcGFyRDsKK307CisKKyNkZWZpbmUgX2RvX2luaXQoYmxhKSBcCisgICAgR1NUX0RF
QlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdCB2aWRlbyBzaW5r
IikKKworR1NUX0JPSUxFUlBMQVRFX0ZVTEwoV2ViS2l0VmlkZW9TaW5rLAorICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X3ZpZGVvX3NpbmssCisgICAgICAgICAgICAgICAgICAgICBHc3RCYXNl
U2luaywKKyAgICAgICAgICAgICAgICAgICAgIEdTVF9UWVBFX0JBU0VfU0lOSywKKyAgICAgICAg
ICAgICAgICAgICAgIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5r
X2Jhc2VfaW5pdChncG9pbnRlciBnX2NsYXNzKQoreworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxl
bWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MoZ19jbGFzcyk7CisKKyAgICBnc3RfZWxlbWVu
dF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVt
cGxhdGVfZ2V0KCZzaW5rdGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0
YWlscyhlbGVtZW50Q2xhc3MsICZ3ZWJraXRWaWRlb1NpbmtEZXRhaWxzKTsKK30KKworc3RhdGlj
IHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rLCBXZWJL
aXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSog
cHJpdjsKKworICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1ByaXZhdGUp
OworICAgIHByaXYtPmFzeW5jUXVldWUgPSBnX2FzeW5jX3F1ZXVlX25ldygpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5rX2lkbGVfZnVuYyhncG9pbnRlciBkYXRhKQor
eworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGRhdGEpOwor
ICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworICAgIEdzdEJ1
ZmZlciogYnVmZmVyOworCisgICAgaWYgKCFwcml2LT5hc3luY1F1ZXVlKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBidWZmZXIgPSAoR3N0QnVmZmVyKilnX2FzeW5jX3F1ZXVlX3RyeV9w
b3AocHJpdi0+YXN5bmNRdWV1ZSk7CisgICAgaWYgKCFidWZmZXIgfHwgR19VTkxJS0VMWSghR1NU
X0lTX0JVRkZFUihidWZmZXIpKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gVE9E
TzogY29uc2lkZXIgcHJpdi0+cmdiT3JkZXJpbmc/CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzcmMg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKSwgQ0FJUk9fRk9STUFUX1JHQjI0LCBwcml2LT53aWR0aCwgcHJpdi0+aGVpZ2h0LCAoNCAq
IHByaXYtPndpZHRoICsgMykgJiB+Myk7CisKKyAgICAvLyBUT0RPOiBXZSBjb3B5IHRoZSBkYXRh
IHR3aWNlIHJpZ2h0IG5vdy4gVGhpcyBjb3VsZCBiZSBlYXNpbHkgaW1wcm92ZWQuCisgICAgY2Fp
cm9fdCogY3IgPSBjYWlyb19jcmVhdGUocHJpdi0+c3VyZmFjZSk7CisgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjciwgc3JjLCAwLCAwKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3JjKTsK
KyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHByaXYtPndpZHRoLCBwcml2LT5oZWlnaHQp
OworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAgZ3N0
X2J1ZmZlcl91bnJlZihidWZmZXIpOworCisgICAgZ19zaWduYWxfZW1pdChzaW5rLCB3ZWJraXRW
aWRlb1NpbmtTaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSwgMCk7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCit3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIo
R3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBXZWJLaXRWaWRl
b1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhic2luayk7CisgICAgV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBnX2FzeW5jX3F1ZXVlX3B1c2go
cHJpdi0+YXN5bmNRdWV1ZSwgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CisgICAgZ19pZGxlX2Fk
ZF9mdWxsKEdfUFJJT1JJVFlfSElHSF9JRExFLCB3ZWJraXRfdmlkZW9fc2lua19pZGxlX2Z1bmMs
IHNpbmssIDApOworCisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4KK3dlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzKEdzdEJhc2VTaW5rKiBic2luaywgR3N0Q2Fw
cyogY2FwcykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lO
Syhic2luayk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7
CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgZ2Jvb2xlYW4gcmV0OworICAgIGNv
bnN0IEdWYWx1ZSogZnBzOworICAgIGNvbnN0IEdWYWx1ZSogcGFyOworICAgIGdpbnQgd2lkdGgs
IGhlaWdodDsKKyAgICBpbnQgcmVkTWFzazsKKworICAgIEdzdENhcHMqIGludGVyc2VjdGlvbiA9
IGdzdF9jYXBzX2ludGVyc2VjdChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2Fwcygmc2lu
a3RlbXBsYXRlKSwgY2Fwcyk7CisKKyAgICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkoaW50ZXJzZWN0
aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZ3N0X2NhcHNfdW5yZWYoaW50ZXJz
ZWN0aW9uKTsKKworICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcywg
MCk7CisKKyAgICByZXQgPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAid2lkdGgi
LCAmd2lkdGgpOworICAgIHJldCAmPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAi
aGVpZ2h0IiwgJmhlaWdodCk7CisgICAgZnBzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3Ry
dWN0dXJlLCAiZnJhbWVyYXRlIik7CisgICAgcmV0ICY9ICEhZnBzOworCisgICAgcGFyID0gZ3N0
X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIik7CisK
KyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcHJpdi0+d2lkdGgg
PSB3aWR0aDsKKyAgICBwcml2LT5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAvKiBXZSBkb250IHll
dCB1c2UgZnBzIG9yIHBpeGVsIGFzcGVjdCBpbnRvIGJ1dCBoYW5keSB0byBoYXZlICovCisgICAg
cHJpdi0+ZnBzTiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yKGZwcyk7CisgICAg
cHJpdi0+ZnBzRCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IoZnBzKTsKKwor
ICAgIGlmIChwYXIpIHsKKyAgICAgICAgcHJpdi0+cGFyTiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rp
b25fbnVtZXJhdG9yKHBhcik7CisgICAgICAgIHByaXYtPnBhckQgPSBnc3RfdmFsdWVfZ2V0X2Zy
YWN0aW9uX2Rlbm9taW5hdG9yKHBhcik7CisgICAgfSBlbHNlCisgICAgICAgIHByaXYtPnBhck4g
PSBwcml2LT5wYXJEID0gMTsKKworICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUs
ICJyZWRfbWFzayIsICZyZWRNYXNrKTsKKyAgICBwcml2LT5yZ2JPcmRlcmluZyA9IChyZWRNYXNr
ID09IHN0YXRpY19jYXN0PGludD4oMHhmZjAwMDAwMCkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmpl
Y3QpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisg
ICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHBy
aXYtPnN1cmZhY2UpOworICAgICAgICBwcml2LT5zdXJmYWNlID0gMDsKKyAgICB9CisKKyAgICBp
ZiAocHJpdi0+YXN5bmNRdWV1ZSkgeworICAgICAgICBnX2FzeW5jX3F1ZXVlX3VucmVmKHByaXYt
PmFzeW5jUXVldWUpOworICAgICAgICBwcml2LT5hc3luY1F1ZXVlID0gMDsKKyAgICB9CisKKyAg
ICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9i
amVjdCk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisK
KyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU1VSRkFDRToKKyAgICAgICAg
aWYgKHByaXYtPnN1cmZhY2UpCisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHJp
di0+c3VyZmFjZSk7CisgICAgICAgIHByaXYtPnN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVy
ZW5jZSgoY2Fpcm9fc3VyZmFjZV90KilnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TVVJGQUNFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCBzaW5rLT5wcml2LT5zdXJmYWNlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RC
YXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYg
PSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2OworCisgICAgZ19hc3luY19xdWV1
ZV9sb2NrKHByaXYtPmFzeW5jUXVldWUpOworCisgICAgLyogUmVtb3ZlIGFsbCByZW1haW5pbmcg
b2JqZWN0cyBmcm9tIHRoZSBxdWV1ZSAqLworICAgIHdoaWxlIChHc3RCdWZmZXIqIGJ1ZmZlciA9
IChHc3RCdWZmZXIqKWdfYXN5bmNfcXVldWVfdHJ5X3BvcF91bmxvY2tlZChwcml2LT5hc3luY1F1
ZXVlKSkKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworCisgICAgZ19hc3luY19x
dWV1ZV91bmxvY2socHJpdi0+YXN5bmNRdWV1ZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5r
Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1Moa2xhc3MpOworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJhc2VTaW5rQ2xhc3Mg
PSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsKKworICAgIGdvYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZGVvX3Npbmtfc2V0X3Byb3BlcnR5Owor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3By
b3BlcnR5OworCisgICAgZ29iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0X3ZpZGVvX3Npbmtf
ZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3ZpZGVvX3Npbmtf
ZmluYWxpemU7CisKKyAgICBnc3RiYXNlU2lua0NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9f
c2lua19yZW5kZXI7CisgICAgZ3N0YmFzZVNpbmtDbGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRl
b19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlU2lua0NsYXNzLT5zdG9wID0gd2Via2l0X3ZpZGVv
X3Npbmtfc3RvcDsKKyAgICBnc3RiYXNlU2lua0NsYXNzLT5zZXRfY2FwcyA9IHdlYmtpdF92aWRl
b19zaW5rX3NldF9jYXBzOworCisgICAgd2Via2l0VmlkZW9TaW5rU2lnbmFsc1tSRVBBSU5UX1JF
UVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLCBQUk9QX1NV
UkZBQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJzdXJmYWNlIiwgInN1cmZhY2Ui
LCAiVGFyZ2V0IGNhaXJvX3N1cmZhY2VfdCoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFKSkpOworfQorCisvKioKKyAqIHdlYmtp
dF92aWRlb19zaW5rX25ldzoKKyAqIEBzdXJmYWNlOiBhICNjYWlyb19zdXJmYWNlX3QKKyAqCisg
KiBDcmVhdGVzIGEgbmV3IEdTdHJlYW1lciB2aWRlbyBzaW5rIHdoaWNoIHVzZXMgQHN1cmZhY2Ug
YXMgdGhlIHRhcmdldAorICogZm9yIHNpbmtpbmcgYSB2aWRlbyBzdHJlYW0gZnJvbSBHU3RyZWFt
ZXIuCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHc3RFbGVtZW50IGZvciB0aGUgbmV3bHkgY3Jl
YXRlZCB2aWRlbyBzaW5rCisgKi8KK0dzdEVsZW1lbnQqCit3ZWJraXRfdmlkZW9fc2lua19uZXco
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIHJldHVybiAoR3N0RWxlbWVudCopZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJREVPX1NJTkssICJzdXJmYWNlIiwgc3VyZmFjZSwgMCk7
Cit9CisKK3ZvaWQKK3dlYmtpdF92aWRlb19zaW5rX3NldF9zdXJmYWNlKFdlYktpdFZpZGVvU2lu
ayogc2luaywgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIFdlYktpdFZpZGVvU2lu
a1ByaXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1Np
bmtQcml2YXRlKTsKKyAgICBpZiAocHJpdi0+c3VyZmFjZSkKKyAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOworICAgIHByaXYtPnN1cmZhY2UgPSBjYWlyb19zdXJm
YWNlX3JlZmVyZW5jZShzdXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvVmlkZW9TaW5rR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTM2NTZjNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYg
VmlkZW9TaW5rR1N0cmVhbWVyX2gKKyNkZWZpbmUgVmlkZW9TaW5rR1N0cmVhbWVyX2gKKworI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3Qv
YmFzZS9nc3RiYXNlc2luay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfVklERU9fU0lOSyB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSgpCisKKyNkZWZpbmUgV0VC
S0lUX1ZJREVPX1NJTksob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBcCisgICAgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rKSkKKwor
I2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19DTEFTUyhrbGFzcykgXAorICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBcCisgICAgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2Vi
S2l0VmlkZW9TaW5rQ2xhc3MpKQorCisjZGVmaW5lIFdFQktJVF9JU19WSURFT19TSU5LKG9iaikg
XAorICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgXAorICAgIFdFQktJVF9U
WVBFX1ZJREVPX1NJTkspKQorCisjZGVmaW5lIFdFQktJVF9JU19WSURFT19TSU5LX0NMQVNTKGts
YXNzKSBcCisgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFwKKyAgICBXRUJL
SVRfVFlQRV9WSURFT19TSU5LKSkKKworI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19HRVRfQ0xB
U1Mob2JqKSBcCisgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFwKKyAgICBX
RUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtDbGFzcykpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgICAgICAgIFdlYktpdFZpZGVvU2luazsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyAgIFdlYktpdFZpZGVvU2lua0NsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgV2ViS2l0VmlkZW9TaW5rUHJpdmF0
ZTsKKworc3RydWN0IF9XZWJLaXRWaWRlb1NpbmsgeworICAgIC8qPCBwcml2YXRlID4qLworICAg
IEdzdEJhc2VTaW5rIHBhcmVudDsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CisgICAgLyo8IHByaXZhdGUgPiov
CisgICAgR3N0QmFzZVNpbmtDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBGdXR1cmUgcGFk
ZGluZyAqLworICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZlZDEpKHZvaWQpOworICAgIHZvaWQg
KCogX3dlYmtpdF9yZXNlcnZlZDIpKHZvaWQpOworICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZl
ZDMpKHZvaWQpOworICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZlZDQpKHZvaWQpOworICAgIHZv
aWQgKCogX3dlYmtpdF9yZXNlcnZlZDUpKHZvaWQpOworICAgIHZvaWQgKCogX3dlYmtpdF9yZXNl
cnZlZDYpKHZvaWQpOworfTsKKworR1R5cGUgICAgICAgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5
cGUodm9pZCkgR19HTlVDX0NPTlNUOworR3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3
KGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSk7CisKK3ZvaWQgd2Via2l0X3ZpZGVvX3Npbmtfc2V0
X3N1cmZhY2UoV2ViS2l0VmlkZW9TaW5rICpzaW5rLCBjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2Up
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gVmlkZW9TaW5rR1N0cmVhbWVyX2gKKwo=
</data>
<flag name="review"
          id="31748"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48997</attachid>
            <date>2010-02-18 03:40:15 -0800</date>
            <delta_ts>2010-02-22 03:58:04 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/text/efl</desc>
            <filename>webkit-efl-port-webcore_platform_text_efl_.diff</filename>
            <type>text/plain</type>
            <size>1499</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAwNTY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZs
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVybiAiIjsKK30K
KworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4g
ImVuX3VzIjsKK30KKworfQo=
</data>
<flag name="review"
          id="31742"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49200</attachid>
            <date>2010-02-22 03:58:04 -0800</date>
            <delta_ts>2010-02-22 03:59:21 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/text/efl</desc>
            <filename>webkit-efl-webcore_platform_text_efl.diff</filename>
            <type>text/plain</type>
            <size>1964</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAwNTY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZs
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVybiAiIjsKK30K
KworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4g
ImVuX3VzIjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBkN2ZjMjJiLi45ZWIwZjczIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDEwLTAy
LTIyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBFRkwgZmlsZXMg
Zm9yIEVGTCBwb3J0IChwbGF0Zm9ybS90ZXh0L2VmbCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNwcDogQWRkZWQuCisKIDIw
MTAtMDItMTEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49201</attachid>
            <date>2010-02-22 03:59:21 -0800</date>
            <delta_ts>2010-02-22 11:39:54 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/graphics/efl</desc>
            <filename>webkit-efl-webcore_platform_text_efl.diff</filename>
            <type>text/plain</type>
            <size>2036</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAwNTY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZs
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVybiAiIjsKK30K
KworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4g
ImVuX3VzIjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBkN2ZjMjJiLi45ZWIwZjczIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDEwLTAy
LTIyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBFRkwgZmlsZXMg
Zm9yIEVGTCBwb3J0IChwbGF0Zm9ybS90ZXh0L2VmbCkuCisgICAgICAgIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwODcgZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNw
cDogQWRkZWQuCisKIDIwMTAtMDItMTEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49202</attachid>
            <date>2010-02-22 04:07:53 -0800</date>
            <delta_ts>2010-02-22 06:10:02 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/text/efl</desc>
            <filename>webkit-efl-webcore_platform_text_efl.diff</filename>
            <type>text/plain</type>
            <size>2036</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAwNTY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZWZs
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVybiAiIjsKK30K
KworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4g
ImVuX3VzIjsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBkN2ZjMjJiLi45ZWIwZjczIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDEwLTAy
LTIyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBFRkwgZmlsZXMg
Zm9yIEVGTCBwb3J0IChwbGF0Zm9ybS90ZXh0L2VmbCkuCisgICAgICAgIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwODcgZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNw
cDogQWRkZWQuCisKIDIwMTAtMDItMTEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgo=
</data>
<flag name="review"
          id="31989"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="31990"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49226</attachid>
            <date>2010-02-22 10:54:57 -0800</date>
            <delta_ts>2010-02-26 13:07:10 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/graphics/efl</desc>
            <filename>webcore_platform_graphics_efl.diff</filename>
            <type>text/plain</type>
            <size>79143</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Zsb2F0UmVjdEVmbC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjhkMDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRl
Y25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBFaW5hX1JlY3RhbmdsZSYgcikK
KyAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2ludChyLngsIHIueSkpCisgICAgLCBtX3NpemUoci53
LCByLmgpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgRWluYV9SZWN0YW5nbGUoKSBjb25z
dCAvLyBOT0xJTlQKK3sKKyAgICBFaW5hX1JlY3RhbmdsZSByID0geyhpbnQpIHJvdW5kKHgoKSks
IChpbnQpIHJvdW5kKHkoKSksIChpbnQpIHJvdW5kKHdpZHRoKCkpLCAoaW50KSByb3VuZChoZWln
aHQoKSl9OworICAgIHJldHVybiByOworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRDYWNoZUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9Gb250Q2FjaGVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjg0MWFmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9Gb250Q2FjaGVFZmwuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgor
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRD
YWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBpZiAoIUZvbnRQbGF0Zm9ybURhdGE6OmluaXQo
KSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3
IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwg
Zm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIHJl
dHVybiBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlw
dGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKSk7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVy
IHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9y
IG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhv
dXQgY2hhbmdpbmcgYW55IHByZWZzLgorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIo
IlRpbWVzIE5ldyBSb21hbiIpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHRpbWVzU3RyKTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJh
aXRzTWFza3MpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1E
YXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU1MmUyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVt
YmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCit7CisgICAgY2Fpcm9fZm9udF9mYWNl
X2Rlc3Ryb3kobV9mb250RmFjZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0
YWxpYywgRm9udFJlbmRlcmluZ01vZGUpCit7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEo
bV9mb250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFz
ZURhdGEodm9pZCogZGF0YSkKK3sKKyAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRh
KS0+ZGVyZWYoKTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlRfQVJHKGJ1
ZmZlciwgYnVmZmVyKTsKKworICAgIGludCBlcnJvcjsKKworICAgIHN0YXRpYyBGVF9MaWJyYXJ5
IGxpYnJhcnkgPSAwOworICAgIGlmICghbGlicmFyeSkgeworICAgICAgICBlcnJvciA9IEZUX0lu
aXRfRnJlZVR5cGUoJmxpYnJhcnkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAg
IGxpYnJhcnkgPSAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBGVF9GYWNlIGZhY2U7CisgICAgZXJyb3IgPSBGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFy
eSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZm
ZXItPnNpemUoKSwgMCwgJmZhY2UpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBidWZmZXItPnJlZigpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9
IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZmFjZSwgMCk7CisKKyAgICBz
dGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKKyAgICBjYWlyb19mb250X2Zh
Y2Vfc2V0X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCByZWxlYXNlRGF0
YSk7CisKKyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udEZhY2UpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4
MTVlYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisKKyNpbmNsdWRlICJGb250
UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit0eXBlZGVm
IHN0cnVjdCBfY2Fpcm9fZm9udF9mYWNlIGNhaXJvX2ZvbnRfZmFjZV90OyAvLyBOT0xJTlQKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgU2hh
cmVkQnVmZmVyOworCitzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSA6IE5vbmNvcHlhYmxl
IHsKKyAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSkKKyAgICA6IG1fZm9udEZhY2UoZm9udEZhY2UpCisgICAge30KKworICAgIH5Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEo
aW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9y
bWFsUmVuZGVyaW5nTW9kZSk7CisKKyAgICBjYWlyb19mb250X2ZhY2VfdCogbV9mb250RmFjZTsK
K307CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpOworfQorCisjZW5kaWYgLy8gRm9udEN1c3RvbVBsYXRm
b3JtRGF0YV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250
RWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZDQxMWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9u
dHNGb3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBGb250
OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMC4wZjsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBp
bnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0Zv
bnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0
Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTg5MDU0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udFBsYXRm
b3JtRGF0YS5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCisgKiBJdCBzaG91bGQgbm90IGJlIGlu
Y2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuIEZvbnRNYWMuY3BwLAorICogRm9udFdpbi5jcHAg
YW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfaAorI2RlZmluZSBGb250
UGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUg
IkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpZiBkZWZpbmVkKFVTRV9GUkVF
VFlQRSkKKyNpbmNsdWRlIDxjYWlyby1mdC5oPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVl
dHlwZS5oPgorI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisjaW5jbHVkZSA8cGFuZ28vcGFuZ29j
YWlyby5oPgorI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Citw
dWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisgICAgICAgIDogbV9wYXR0ZXJuKGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAg
ICA6IG1fY29udGV4dCgwKQorICAgICAgICAsIG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkpCisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5k
aWYKKyAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxh
dGZvcm1EYXRhKCkKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICAgICAgOiBtX3BhdHRl
cm4oMCkKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAgICA6IG1fY29udGV4dCgwKQor
ICAgICAgICAsIG1fZm9udCgwKQorI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBi
YWNrZW5kIgorI2VuZGlmCisgICAgICAgICwgbV9zY2FsZWRGb250KDApCisgICAgICAgIHsgfQor
CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9m
YWNlX3QqIGZvbnRGYWNlLCBpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisKKyAg
ICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgc3RhdGljIGJvb2wgaW5pdCgpOworICAgIHN0
YXRpYyB2b2lkIGZpbmkoKTsKKworICAgIGJvb2wgaXNGaXhlZFBpdGNoKCk7CisgICAgZmxvYXQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGJvb2wgc3ludGhldGljQm9sZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQorICAgIGJvb2wgc3ludGhldGljT2Js
aXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljT2JsaXF1ZTsgfQorCisgICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsg
fQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50cHRyX3Qg
aGFzaENvZGVzWzFdID0geyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zY2FsZWRGb250
KSB9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRf
Y2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFy
KSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
KSBjb25zdDsKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0g
aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisg
ICAgICAgIHJldHVybiBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworI2Vu
ZGlmCisgICAgfTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisgICAgRmNQYXR0ZXJu
KiBtX3BhdHRlcm47CisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICBzdGF0aWMgUGFuZ29G
b250TWFwKiBtX2ZvbnRNYXA7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIG1faGFzaFRhYmxlOwor
CisgICAgUGFuZ29Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgUGFuZ29Gb250KiBtX2ZvbnQ7Cisj
ZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKKyAgICBm
bG9hdCBtX3NpemU7CisgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CisgICAgYm9vbCBtX3N5bnRo
ZXRpY09ibGlxdWU7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OworICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkOworCitwcml2YXRlOgorI2lmIGRlZmluZWQoVVNFX0ZS
RUVUWVBFKQorICAgIHN0YXRpYyBGY1BhdHRlcm4gKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEZjUGF0dGVybio+KC0xKTsgfQorI2VsaWYgZGVm
aW5lZChVU0VfUEFOR08pCisgICAgc3RhdGljIFBhbmdvRm9udCAqaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpOyB9Cisj
ZW5kaWYKK307Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvRm9udFBsYXRmb3JtRGF0YUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9Gb250UGxhdGZvcm1EYXRhRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wYTE5NDUwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvRm9udFBsYXRmb3JtRGF0YUVmbC5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6
IG1fcGF0dGVybigwKQorICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUo
KSkKKyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6
OmluaXQoKTsKKworICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZhbWlseU5hbWUuc3Ry
aW5nKCkudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFtZVN0cmlu
Zy5kYXRhKCk7CisgICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKKyAgICAvLyBGSVhN
RTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBmb250Y29uZmlnIHdlaWdodHMuCisgICAg
aW50IGZjd2VpZ2h0ID0gRkNfV0VJR0hUX05PUk1BTDsKKyAgICBmbG9hdCBmY3NpemUgPSBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFs
aWMoKSkKKyAgICAgICAgZmNzbGFudCA9IEZDX1NMQU5UX0lUQUxJQzsKKyAgICBpZiAoZm9udERl
c2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAgIGZjd2VpZ2h0ID0g
RkNfV0VJR0hUX0JPTEQ7CisKKyAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmlj
RmFtaWx5KCk7CisKKyAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsK
KyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7CisgICAgc3RhdGljIGNvbnN0IGNhaXJv
X2ZvbnRfb3B0aW9uc190KiBkZWZhdWx0T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVh
dGUoKTsKKyAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IDA7CisgICAg
Y2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKworICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5n
KHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNm
YW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKKyAgICAgICAgZmNmYW1p
bHkgPSAic2VyaWYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAg
ICAgICAgZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlm
IjsKKyAgICB9CisKKyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1J
TFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCisgICAgICAg
IGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4s
IEZDX1NMQU5ULCBmY3NsYW50KSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKyAgICBpZiAo
IUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJR0hULCBmY3dlaWdodCkpCisgICAg
ICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGREb3VibGUocGF0dGVy
biwgRkNfUElYRUxfU0laRSwgZmNzaXplKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKwor
ICAgIEZjQ29uZmlnU3Vic3RpdHV0ZSgwLCBwYXR0ZXJuLCBGY01hdGNoUGF0dGVybik7CisgICAg
RmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJuKTsKKworICAgIEZjUmVzdWx0IGZjcmVzdWx0Owor
ICAgIG1fcGF0dGVybiA9IEZjRm9udE1hdGNoKDAsIHBhdHRlcm4sICZmY3Jlc3VsdCk7CisgICAg
Ly8gRklYTUU6IHNob3VsZCB3ZSBzZXQgc29tZSBkZWZhdWx0IGZvbnQ/CisgICAgaWYgKCFtX3Bh
dHRlcm4pCisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgZm9udEZhY2UgPSBjYWlyb19m
dF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybik7CisgICAgY2Fpcm9fbWF0
cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4LCBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUo
KSk7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisKKyAgICBpZiAoIW9w
dGlvbnMpCisgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9uczsKKworICAgIG1fc2NhbGVk
Rm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZj
dG0sIG9wdGlvbnMpOworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNlKTsKKwor
ZnJlZVBhdHRlcm46CisgICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKK30KKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKQorICAgIDogbV9wYXR0ZXJuKDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1f
c3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxpYykKKyAg
ICAsIG1fc2NhbGVkRm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBpdGFsaWMpCisgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAg
ICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoaXRhbGlj
KQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJp
eDsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7
CisgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5
KCZjdG0pOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9v
cHRpb25zX2NyZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNh
YmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBoaWMgcXVh
bGl0aWVzIGZvciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWlyb19mb250
X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsK
KyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJ
QUxJQVNfR1JBWSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVh
dGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWlyb19mb250
X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpp
bml0aWFsaXplZCA9IGZhbHNlOworCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKQorewor
ICAgIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIUZjSW5pdCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2FuJ3QgaW5pdCBmb250IGNvbmZpZyBsaWJyYXJ5XG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6ZmluaSgpCit7CisgICAgaWYgKCFpbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgLy8gRklY
TUU6IG91dC1jb21tZW50IHRoZSBsaW5lIGJlbG93IGR1ZSB0byB0aGlzIGNyYXNoOgorICAgIC8v
IEZjQ2FjaGVGaW5pOiBBc3NlcnRpb24gJ2ZjQ2FjaGVDaGFpbnNbaV0gPT0oKHZvaWQqKTApJwor
ICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNsZWFuaW5nIHRoZSBGb250Q2FjaGUgYnV0IHdlIG1pZ2h0
IHN0aWxsIGhhdmUKKyAgICAvLyByZWZlcmVuY2UgZnJvbSB0aGUgZnJhbWUncyBub2RlcyAoQ1NT
KS4gVGhlIENyYXNoIGlzIGVhc2lseQorICAgIC8vIHJlcHJvZHVjYWJsZSBieSBmdWxseSBsb2Fk
aW5nIGh0dHA6Ly9wb2wuZGsKKyAgICAvLyBGY0ZpbmkoKTsKK30KKworCitGb250UGxhdGZvcm1E
YXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgLy8gTk9URTogdGhlIGRlc3Ryb3lpbmcg
b2YgbV9zY2FsZWRGb250IGFuZCBtX3BhdHRlcm4gaXMKKyAgICAvLyBiZWluZyBoYW5kbGVkIGJ5
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQorfQorCitib29sIEZvbnRQbGF0Zm9y
bURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgLy8gVE9ETzogU3VwcG9ydCBpc0ZpeGVkUGl0
Y2goKSBmb3IgY3VzdG9tIGZvbnRzLgorICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpbnQgc3BhY2luZzsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdl
cihtX3BhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1hdGNoKQor
ICAgICAgICByZXR1cm4gc3BhY2luZyA9PSBGQ19NT05POworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9wYXR0ZXJu
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fcGF0dGVybiB8fCBtX3BhdHRlcm4g
PT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKKyAgICAgICAgfHwgIW90aGVyLm1f
cGF0dGVybiB8fCBvdGhlci5tX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4q
PigtMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmNQYXR0ZXJuRXF1YWwo
bV9wYXR0ZXJuLCBvdGhlci5tX3BhdHRlcm4pOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5n
IEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR2x5cGhQYWdlVHJlZU5vZGVFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR2x5cGhQYWdlVHJlZU5vZGVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFiMGRmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HbHlwaFBhZ2VUcmVlTm9kZUVmbC5jcHAKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxh
Ym9yYS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciog
YnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRo
ZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5
IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAg
aWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZvbnQpOworICAgIGlmICghZmFjZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEdseXBoIGds
eXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOworICAgICAgICBpZiAo
IWdseXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwg
MCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zm
c2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2Zh
Y2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2NhbGVkRm9udCk7CisKKyAgICByZXR1cm4g
aGF2ZUdseXBoczsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvSWNvbkVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JY29uRWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjNkZTA0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkljb24uaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ljb246Oklj
b24oKQorICAgIDogbV9pY29uKDApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNv
bjo6fkljb24oKQoreworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0lt
YWdlRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ltYWdlRWZsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQwM2NhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW1hZ2VFZmwuY3BwCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQml0bWFwSW1hZ2U6Omlu
aXRQbGF0Zm9ybURhdGEoKQoreworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxh
dGZvcm1EYXRhKCkKK3sKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2Fk
UmVzb3VyY2VTaGFyZWRCdWZmZXJGYWxsYmFjaygpCit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCk7IC8vIFRPRE86IGZhbGxiYWNrIGltYWdlPworfQorCitzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBu
YW1lKQoreworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKFN0cmluZzo6Zm9ybWF0KERBVEFfRElSICIvd2Via2l0
LTEuMC9pbWFnZXMvJXMucG5nIiwgbmFtZSkpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJl
dHVybiBidWZmZXIucmVsZWFzZSgpOworICAgIHJldHVybiBsb2FkUmVzb3VyY2VTaGFyZWRCdWZm
ZXJGYWxsYmFjaygpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGlt
ZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIobmFtZSk7CisgICAgaW1nLT5zZXREYXRhKGJ1
ZmZlci5yZWxlYXNlKCksIHRydWUpOworICAgIHJldHVybiBpbWcucmVsZWFzZSgpOworfQorCit9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRQb2ludEVmbC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRQb2ludEVmbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0MDlkNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ludFBvaW50RWZsLmNwcApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNu
b2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxFdmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEV2YXNf
UG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30KKworSW50UG9p
bnQ6Om9wZXJhdG9yIEV2YXNfUG9pbnQoKSBjb25zdCAvLyBOT0xJTlQKK3sKKyAgICBFdmFzX1Bv
aW50IHAgPSB7IHgoKSwgeSgpIH07CisgICAgcmV0dXJuIHA7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ludFJlY3RFZmwuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNWZmODYyNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0ludFJlY3RFZmwuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdDo6
SW50UmVjdChjb25zdCBFaW5hX1JlY3RhbmdsZSYgcikKKyAgICA6IG1fbG9jYXRpb24oSW50UG9p
bnQoci54LCByLnkpKQorICAgICwgbV9zaXplKHIudywgci5oKQoreworfQorCitJbnRSZWN0Ojpv
cGVyYXRvciBFaW5hX1JlY3RhbmdsZSgpIGNvbnN0IC8vIE5PTElOVAoreworICAgIEVpbmFfUmVj
dGFuZ2xlIHIgPSB7IHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9OworICAgIHJldHVybiBy
OworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFmN2M0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0wLDAg
KzEsNjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9s
bFZpZXcuaCIKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXaWRn
ZXQuaCIKKworI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KKyNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvbWl4ZXIuaD4KKyNpbmNsdWRlIDxnc3Qv
aW50ZXJmYWNlcy94b3ZlcmxheS5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMs
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKEdTVF9NRVNT
QUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKKyAgICAgICAgR093blB0
cjxHRXJyb3I+IGVycjsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZGVidWc7CisKKyAgICAgICAg
Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwgJmRlYnVnLm91
dFB0cigpKTsKKyAgICAgICAgaWYgKGVyci0+Y29kZSA9PSAzKSB7CisgICAgICAgICAgICBMT0df
VkVSQk9TRShNZWRpYSwgIkZpbGUgbm90IGZvdW5kIik7CisgICAgICAgICAgICBNZWRpYVBsYXll
clByaXZhdGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRh
KTsKKyAgICAgICAgICAgIGlmIChtcCkKKyAgICAgICAgICAgICAgICBtcC0+bG9hZGluZ0ZhaWxl
ZCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiRXJy
b3I6ICVkLCAlcyIsIGVyci0+Y29kZSwgIGVyci0+bWVzc2FnZSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1NDYWxsYmFjayhHc3RC
dXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAo
R1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FT1MpIHsKKyAgICAgICAg
TE9HX1ZFUkJPU0UoTWVkaWEsICJFbmQgb2YgU3RyZWFtIik7CisgICAgICAgIE1lZGlhUGxheWVy
UHJpdmF0ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEp
OworICAgICAgICBtcC0+ZGlkRW5kKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitn
Ym9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RN
ZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChHU1RfTUVTU0FHRV9U
WVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQpIHsKKyAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlKiBtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRl
Kj4oZGF0YSk7CisgICAgICAgIG1wLT51cGRhdGVTdGF0ZXMoKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUJ1ZmZlcmluZ0NhbGxiYWNr
KEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICAg
IGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0JVRkZFUklORykg
eworICAgICAgICBnaW50IHBlcmNlbnQgPSAwOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9i
dWZmZXJpbmcobWVzc2FnZSwgJnBlcmNlbnQpOworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwg
IkJ1ZmZlcmluZyAlZCIsIHBlcmNlbnQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKFdlYktpdFZpZGVv
U2luayosIE1lZGlhUGxheWVyUHJpdmF0ZSogcGxheWVyUHJpdmF0ZSkKK3sKKyAgICBwbGF5ZXJQ
cml2YXRlLT5yZXBhaW50KCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVk
aWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAgICByZXR1
cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUs
IGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCitNZWRpYVBsYXllclByaXZh
dGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5
ZXIocGxheWVyKQorICAgICwgbV9wbGF5QmluKDApCisgICAgLCBtX3ZpZGVvU2luaygwKQorICAg
ICwgbV9zb3VyY2UoMCkKKyAgICAsIG1fcmF0ZSgxLjBmKQorICAgICwgbV9lbmRUaW1lKG51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAgICAsIG1faXNFbmRSZWFjaGVkKGZhbHNl
KQorICAgICwgbV92b2x1bWUoMC41ZikKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisg
ICAgLCBtX3N0YXJ0ZWRQbGF5aW5nKGZhbHNlKQorICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkK
KyAgICAsIG1fc2l6ZShJbnRTaXplKCkpCisgICAgLCBtX3Zpc2libGUodHJ1ZSkKK3sKKworICAg
IHN0YXRpYyBib29sIGdzdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBwYXNzIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgaWYgKCFn
c3RJbml0aWFsaXplZCkgeworICAgICAgICBnc3RfaW5pdCgwLCAwKTsKKyAgICAgICAgZ3N0SW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGUgc2l6ZSBzaG91bGRu
J3QgYmUgZml4ZWQgaGVyZSwgdGhpcyBpcyBqdXN0IGEgcXVpY2sgaGFjay4KKyAgICBtX3N1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCA2NDAs
IDQ4MCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCit7
CisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3Vy
ZmFjZSk7CisKKyAgICBpZiAobV9wbGF5QmluKSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihHU1RfT0JKRUNUKG1fcGxheUJpbikpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEs
ICJMb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAh
PSBNZWRpYVBsYXllcjo6TG9hZGluZykgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGlu
ZykgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Cisg
ICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGNyZWF0
ZUdTVFBsYXlCaW4odXJsKTsKKyAgICBwYXVzZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cGxheSgpCit7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQbGF5Iik7CisgICAgLy8g
V2hlbiBlbmQgcmVhY2hlZCwgcmV3aW5kIGZvciBUZXN0IHZpZGVvLXNlZWstcGFzdC1lbmQtcGxh
eWluZworICAgIGlmIChtX2lzRW5kUmVhY2hlZCkKKyAgICAgICAgc2VlaygwKTsKKyAgICBtX2lz
RW5kUmVhY2hlZCA9IGZhbHNlOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJp
biwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgIG1fc3RhcnRlZFBsYXlpbmcgPSB0cnVlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQoreworICAgIExPR19WRVJCT1NFKE1l
ZGlhLCAiUGF1c2UiKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1Rf
U1RBVEVfUEFVU0VEKTsKKyAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7Cit9CisKK2Zsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlmICghbV9wbGF5
QmluKQorICAgICAgICByZXR1cm4gMC4wOworCisgICAgR3N0Rm9ybWF0IHRpbWVGb3JtYXQgPSBH
U1RfRk9STUFUX1RJTUU7CisgICAgZ2ludDY0IHRpbWVMZW5ndGggPSAwOworCisgICAgLy8gRklY
TUU6IFdlIHRyeSB0byBnZXQgdGhlIGR1cmF0aW9uLCBidXQgd2UgZG8gbm90IHRydXN0IHRoZQor
ICAgIC8vIHJldHVybiB2YWx1ZSBvZiB0aGUgcXVlcnkgZnVuY3Rpb24gb25seTsgdGhlIHByb2Js
ZW0gd2UgYXJlCisgICAgLy8gdHJ5aW5nIHRvIHdvcmstYXJvdW5kIGhlcmUgaXMgdGhhdCBwaXBl
bGluZXMgaW4gc3RyZWFtIG1vZGUgbWF5CisgICAgLy8gbm90IGJlIGFibGUgdG8gZmlndXJlIG91
dCB0aGUgZHVyYXRpb24sIGJ1dCBzdGlsbCByZXR1cm4gdHJ1ZSEKKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NjM5LgorICAgIGlmICghZ3N0X2Vs
ZW1lbnRfcXVlcnlfZHVyYXRpb24obV9wbGF5QmluLCAmdGltZUZvcm1hdCwgJnRpbWVMZW5ndGgp
IHx8IHRpbWVMZW5ndGggPD0gMCkgeworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlRpbWUg
ZHVyYXRpb24gcXVlcnkgZmFpbGVkLiIpOworICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKKyAgICB9
CisKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQs
IEdTVF9USU1FX0FSR1ModGltZUxlbmd0aCkpOworCisgICAgcmV0dXJuIChmbG9hdCkgKHRpbWVM
ZW5ndGggLyAxMDAwMDAwMDAwLjApOworICAgIC8vIEZJWE1FOiBoYW5kbGUgMy4xNC45LjUgcHJv
cGVybHkKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybiAwOworICAgIC8vIE5lY2Vz
c2FyeSBhcyBzb21ldGltZXMsIGdzdHJlYW1lciByZXR1cm4gMDowMCBhdCB0aGUgRU9TCisgICAg
aWYgKG1faXNFbmRSZWFjaGVkKQorICAgICAgICByZXR1cm4gbV9lbmRUaW1lOworCisgICAgZmxv
YXQgcmV0OworCisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihH
U1RfRk9STUFUX1RJTUUpOworICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4sIHF1
ZXJ5KSkgeworICAgICAgICBnaW50NjQgcG9zaXRpb247CisgICAgICAgIGdzdF9xdWVyeV9wYXJz
ZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKyAgICAgICAgcmV0ID0gKGZsb2F0KSAo
cG9zaXRpb24gLyAxMDAwMDAwMDAwLjApOworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBv
c2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbikpOworICAg
IH0gZWxzZSB7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUG9zaXRpb24gcXVlcnkgZmFp
bGVkLi4uIik7CisgICAgICAgIHJldCA9IDAuMDsKKyAgICB9CisgICAgZ3N0X3F1ZXJ5X3VucmVm
KHF1ZXJ5KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZWVrKGZsb2F0IHRpbWUpCit7CisgICAgR3N0Q2xvY2tUaW1lIHNlYyA9IChHc3RDbG9ja1Rp
bWUpKHRpbWUgKiBHU1RfU0VDT05EKTsKKworICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9pc1N0cmVhbWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
TE9HX1ZFUkJPU0UoTWVkaWEsICJTZWVrOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FS
R1Moc2VjKSk7CisgICAgLy8gRklYTUU6IFdoYXQgaGFwcGVucyB3aGVuIHRoZSBzZWVrZWQgcG9z
aXRpb24gaXMgbm90IGF2YWlsYWJsZT8KKyAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsoIG1fcGxh
eUJpbiwgbV9yYXRlLAorICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAg
KEdzdFNlZWtGbGFncykoR1NUX1NFRUtfRkxBR19GTFVTSCksCisgICAgICAgICAgICBHU1RfU0VF
S19UWVBFX1NFVCwgc2VjLAorICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHU1RfQ0xP
Q0tfVElNRV9OT05FKSkKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJTZWVrIHRvICVmIGZh
aWxlZCIsIHRpbWUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0RW5kVGltZShm
bG9hdCB0aW1lKQoreworICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1faXNTdHJlYW1pbmcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9lbmRUaW1lICE9
IHRpbWUpIHsKKyAgICAgICAgbV9lbmRUaW1lID0gdGltZTsKKyAgICAgICAgR3N0Q2xvY2tUaW1l
IHN0YXJ0ID0gKEdzdENsb2NrVGltZSkoY3VycmVudFRpbWUoKSAqIEdTVF9TRUNPTkQpOworICAg
ICAgICBHc3RDbG9ja1RpbWUgZW5kICAgPSAoR3N0Q2xvY2tUaW1lKSh0aW1lICogR1NUX1NFQ09O
RCk7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAic2V0RW5kVGltZTogJSIgR1NUX1RJTUVf
Rk9STUFULCBHU1RfVElNRV9BUkdTKGVuZCkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBoYXBw
ZW5zIHdoZW4gdGhlIHNlZWtlZCBwb3NpdGlvbiBpcyBub3QgYXZhaWxhYmxlPworICAgICAgICBp
ZiAoIWdzdF9lbGVtZW50X3NlZWsobV9wbGF5QmluLCBtX3JhdGUsCisgICAgICAgICAgICAgICAg
R1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAgICAgIChHc3RTZWVrRmxhZ3MpKEdTVF9TRUVL
X0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSwKKyAgICAgICAgICAgICAgICBH
U1RfU0VFS19UWVBFX1NFVCwgc3RhcnQsCisgICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9T
RVQsIGVuZCkpCisgICAgICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlNlZWsgdG8gJWYgZmFp
bGVkIiwgdGltZSk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhcnRF
bmRQb2ludFRpbWVySWZOZWVkZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxTZWVrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZW5kUG9pbnRUaW1lckZpcmVkKFRp
bWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiAh
bV9zdGFydGVkUGxheWluZzsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmco
KSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gUmV0dXJucyB0aGUgc2l6ZSBv
ZiB0aGUgdmlkZW8KK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwor
CisgICAgaW50IHggPSAwLCB5ID0gMDsKKyAgICBpZiAoR3N0UGFkKiBwYWQgPSBnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luaywgInNpbmsiKSkgeworICAgICAgICBnc3Rfdmlk
ZW9fZ2V0X3NpemUoR1NUX1BBRChwYWQpLCAmeCwgJnkpOworICAgICAgICBnc3Rfb2JqZWN0X3Vu
cmVmKEdTVF9PQkpFQ1QocGFkKSk7CisgICAgfQorCisgICAgcmV0dXJuIEludFNpemUoeCwgeSk7
Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAg
Z2ludCBjdXJyZW50VmlkZW8gPSAtMTsKKyAgICBpZiAobV9wbGF5QmluKQorICAgICAgICBnX29i
amVjdF9nZXQoR19PQkpFQ1QobV9wbGF5QmluKSwgImN1cnJlbnQtdmlkZW8iLCAmY3VycmVudFZp
ZGVvLCAwKTsKKyAgICByZXR1cm4gY3VycmVudFZpZGVvID4gLTE7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIG1fdm9sdW1lID0g
dm9sdW1lOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiVm9sdW1lIHRvICVmIiwgdm9sdW1lKTsK
KyAgICBzZXRNdXRlZChmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRN
dXRlZChib29sIGIpCit7CisgICAgaWYgKCFtX3BsYXlCaW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChiKSB7CisgICAgICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChtX3BsYXlCaW4pLCAi
dm9sdW1lIiwgJm1fdm9sdW1lLCAwKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1f
cGxheUJpbiksICJ2b2x1bWUiLCAoZG91YmxlKTAuMCwgMCk7CisgICAgfSBlbHNlCisgICAgICAg
IGdfb2JqZWN0X3NldChHX09CSkVDVChtX3BsYXlCaW4pLCAidm9sdW1lIiwgbV92b2x1bWUsIDAp
OworCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7
CisgICAgaWYgKCFyYXRlKSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlC
aW4sIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
X2lzU3RyZWFtaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JhdGUgPSByYXRlOworICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiU2V0IFJhdGUgdG8gJWYiLCByYXRlKTsKKyAgICBpZiAoIWdz
dF9lbGVtZW50X3NlZWsobV9wbGF5QmluLCByYXRlLAorICAgICAgICAgICAgR1NUX0ZPUk1BVF9U
SU1FLAorICAgICAgICAgICAgKEdzdFNlZWtGbGFncykoR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdT
VF9TRUVLX0ZMQUdfQUNDVVJBVEUpLAorICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIChH
c3RDbG9ja1RpbWUpIChjdXJyZW50VGltZSgpICogR1NUX1NFQ09ORCksCisgICAgICAgICAgICBH
U1RfU0VFS19UWVBFX1NFVCwgKEdzdENsb2NrVGltZSkgKG1fZW5kVGltZSAqIEdTVF9TRUNPTkQp
KSkKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJTZXQgUmF0ZSB0byAlZiBmYWlsZWQiLCBy
YXRlKTsKK30KKworaW50IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGF0YVJhdGUoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDE7Cit9CisKK01lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9y
ZWFkeVN0YXRlOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVCdWZmZXJl
ZCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRp
YSwgIm1heFRpbWVCdWZmZXJlZCIpOworICAgIC8vIHJ0c3Agc3RyZWFtcyBhcmUgbm90IGJ1ZmZl
cmVkCisgICAgcmV0dXJuIG1faXNTdHJlYW1pbmcgPyAwIDogbWF4VGltZUxvYWRlZCgpOworfQor
CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7Cisg
ICAgLy8gVE9ETworICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZVNlZWthYmxlIik7Cisg
ICAgaWYgKG1faXNTdHJlYW1pbmcpCisgICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCk7CisgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJl
YW0KKyAgICByZXR1cm4gbWF4VGltZUxvYWRlZCgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGU6Om1heFRpbWVMb2FkZWQoKSBjb25zdAoreworICAgIC8vIFRPRE8KKyAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIm1heFRpbWVMb2FkZWQiKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBkdXJhdGlvbigpOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5
dGVzTG9hZGVkKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIExPR19WRVJC
T1NFKE1lZGlhLCAiYnl0ZXNMb2FkZWQiKTsKKyAgICAvKmlmICghbV9wbGF5QmluKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOworICAgIGZsb2F0IG1heFRp
bWUgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgaWYgKCFkdXIpCisgICAgICAgIHJldHVybiAwOyov
CisgICAgcmV0dXJuIDE7IC8vIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzS25vd24i
KTsKKyAgICByZXR1cm4gdG90YWxCeXRlcygpID4gMDsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlcyIpOworICAgIGlmICghbV9wbGF5Qmlu
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggbV9zb3VyY2UgdG8gZ2V0IHRoZSB0b3Rh
bCBieXRlcyBvZiB0aGUgbWVkaWEKKworICAgIHJldHVybiAxMDA7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICAvLyBUaGVy
ZSBpcyBubyAoa25vd24pIHdheSB0byBnZXQgc3VjaCBsZXZlbCBvZiBpbmZvcm1hdGlvbiBhYm91
dAorICAgIC8vIHRoZSBzdGF0ZSBvZiBHU3RyZWFtZXIsIHRoZXJlZm9yZSwgd2hlbiBpbiBQQVVT
RUQgc3RhdGUsCisgICAgLy8gd2UgYXJlIHN1cmUgd2UgY2FuIGRpc3BsYXkgdGhlIGZpcnN0IGZy
YW1lIGFuZCBnbyB0byBwbGF5CisKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5l
dHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAg
R3N0U3RhdGUgcGVuZGluZzsKKworICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICByZXR1cm47
CisKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUo
bV9wbGF5QmluLAorICAgICAgICAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7
CisKKyAgICBzd2l0Y2ggKHJldCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNT
OgorICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlN0YXRlOiAlcywgcGVuZGluZzogJXMiLAor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLAorICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAgICAgIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBH
U1RfU1RBVEVfUEFVU0VEKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVFbm91Z2hEYXRhOworCisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6
OkxvYWRlZDsKKworICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLCAic291cmNlIiwgJm1f
c291cmNlLCAwKTsKKyAgICAgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgICAgIExPR19WRVJC
T1NFKE1lZGlhLCAibV9zb3VyY2UgaXMgMCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdT
VF9TVEFURV9DSEFOR0VfQVNZTkM6CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQXN5bmM6
IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoc3RhdGUpLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
cGVuZGluZykpOworICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MKKyAgICAgICAgcmV0dXJu
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoK
KyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKyAgICAg
ICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgICAgICB9IGVsc2UgaWYgKHN0
YXRlID09IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworCisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiRWxzZSA6ICVkIiwgcmV0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKHNlZWtpbmcoKSkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVOb3RoaW5nOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdv
cmtTdGF0ZSkgeworICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIk5ldHdvcmsgU3RhdGUgQ2hh
bmdlZCBmcm9tICV1IHRvICV1IiwKKyAgICAgICAgICAgIG9sZE5ldHdvcmtTdGF0ZSwgbV9uZXR3
b3JrU3RhdGUpOworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAg
IH0KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpIHsKKyAgICAgICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJSZWFkeSBTdGF0ZSBDaGFuZ2VkIGZyb20gJXUgdG8gJXUiLAorICAg
ICAgICAgICAgb2xkUmVhZHlTdGF0ZSwgbV9yZWFkeVN0YXRlKTsKKyAgICAgICAgbV9wbGF5ZXIt
PnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bG9hZFN0YXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpyYXRlQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzaXplQ2hhbmdlZCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRpbWVDaGFuZ2Vk
KCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnZvbHVtZUNoYW5nZWQoKQoreworICAgIG1f
cGxheWVyLT52b2x1bWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpk
aWRFbmQoKQoreworICAgIG1faXNFbmRSZWFjaGVkID0gdHJ1ZTsKKyAgICBwYXVzZSgpOworICAg
IHRpbWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkaW5nRmFp
bGVkKCkKK3sKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtF
cnJvcikgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3JrRXJy
b3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAg
IGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgbV9wbGF5
ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
K3sKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cmVwYWludCgpCit7CisgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVE9ETzogbV9zaXplIHZzIHJlY3Q/CisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGNhaXJvX3NldF9v
cGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgbV9zdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgLy8gRklYTUU6IHF1ZXJ5IHRoZSBl
bmdpbmUgdG8gc2VlIHdoYXQgdHlwZXMgYXJlIHN1cHBvcnRlZAorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgdHlwZXMuYWRkKFN0cmluZygidmlkZW8veC10aGVvcmErb2dnIikpOworfQorCitN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gRklY
TUU6IHF1ZXJ5IHRoZSBlbmdpbmUgdG8gc2VlIHdoYXQgdHlwZXMgYXJlIHN1cHBvcnRlZAorICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHR5cGUgPT0gInZpZGVvL3gtdGhlb3JhK29n
ZyIgPyAoY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1l
ZGlhUGxheWVyOjpJc1N1cHBvcnRlZCkgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVHU1RQbGF5QmluKFN0cmluZyB1cmwp
Cit7CisgICAgQVNTRVJUKCFtX3BsYXlCaW4pOworICAgIG1fcGxheUJpbiA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgicGxheWJpbiIsICJwbGF5Iik7CisKKyAgICBHc3RCdXMqIGJ1cyA9IGdz
dF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BsYXlCaW4pKTsKKyAgICBnc3RfYnVz
X2FkZF9zaWduYWxfd2F0Y2goYnVzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cywgIm1lc3Nh
Z2U6OmVycm9yIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVFcnJvckNhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChidXMsICJtZXNzYWdlOjplb3MiLCBHX0NBTExC
QUNLKG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChidXMsICJtZXNzYWdlOjpzdGF0ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBs
YXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChi
dXMsICJtZXNzYWdlOjpidWZmZXJpbmciLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUJ1
ZmZlcmluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAgZ3N0X29iamVjdF91bnJlZihidXMpOworCisg
ICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fcGxheUJpbiksICJ1cmkiLCB1cmwudXRmOCgpLmRh
dGEoKSwgMCk7CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImdjb25mYXVkaW9zaW5rIiwgMCk7CisgICAgbV92aWRlb1NpbmsgPSB3ZWJraXRf
dmlkZW9fc2lua19uZXcobV9zdXJmYWNlKTsKKworICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4s
ICJhdWRpby1zaW5rIiwgYXVkaW9TaW5rLCAwKTsKKyAgICBnX29iamVjdF9zZXQobV9wbGF5Qmlu
LCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLCAwKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV92aWRlb1NpbmssICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQ
cml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhpcyk7CisKKyAgICBzZXRWb2x1bWUobV92b2x1bWUp
OworfQorCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJfaAorI2RlZmluZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJfaAorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUg
PGNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVu
dCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKK3R5
cGVkZWYgc3RydWN0IF9Hc3RCdXMgR3N0QnVzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBJbnRSZWN0OworY2xh
c3MgU3RyaW5nOworCitnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFcnJvckNhbGxiYWNrKEdz
dEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKK2dib29sZWFu
IG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBt
ZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVN0YXRl
Q2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEp
OworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlIHsKKyAgICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JD
YWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7
CisgICAgZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKEdzdEJ1
cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKKyAgICBmcmllbmQg
Z2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0
TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CisKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwor
ICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CisKKyAgICAgICAgSW50U2l6ZSBuYXR1cmFs
U2l6ZSgpIGNvbnN0OworICAgICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAgICAgICAg
dm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsKKyAgICAgICAgdm9pZCBjYW5jZWxMb2FkKCk7
CisKKyAgICAgICAgdm9pZCBwbGF5KCk7CisgICAgICAgIHZvaWQgcGF1c2UoKTsKKworICAgICAg
ICBib29sIHBhdXNlZCgpIGNvbnN0OworICAgICAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKKwor
ICAgICAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgICAgICBmbG9hdCBjdXJyZW50VGlt
ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNlZWsoZmxvYXQpOworICAgICAgICB2b2lkIHNldEVu
ZFRpbWUoZmxvYXQpOworCisgICAgICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7CisgICAgICAgIHZv
aWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAgICAgICAgdm9pZCBzZXRNdXRlZChib29sKTsKKworICAg
ICAgICBpbnQgZGF0YVJhdGUoKSBjb25zdDsKKworICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlT
dGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisKKyAgICAgICAgZmxvYXQgbWF4VGltZUJ1ZmZlcmVk
KCkgY29uc3Q7CisgICAgICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OworICAgICAg
ICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0OworICAgICAgICBib29sIHRvdGFsQnl0ZXNL
bm93bigpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisKKyAg
ICAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgICAgICB2b2lkIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYpOworCisgICAgICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOworICAgICAgICB2
b2lkIHJhdGVDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgc2l6ZUNoYW5nZWQoKTsKKyAgICAgICAg
dm9pZCB0aW1lQ2hhbmdlZCgpOworICAgICAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICAg
ICAgdm9pZCBkaWRFbmQoKTsKKyAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKCk7CisKKyAgICAg
ICAgdm9pZCByZXBhaW50KCk7CisgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlKE1lZGlhUGxheWVyKik7CisgICAgICAgIHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKTsKKworICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICAgICAgc3RhdGljIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworICAgICAg
ICB2b2lkIGNhbmNlbFNlZWsoKTsKKyAgICAgICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOworICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKTsKKworICAg
ICAgICB2b2lkIGNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgICAgIEdzdEVsZW1lbnQqIG1fcGxh
eUJpbjsKKyAgICAgICAgR3N0RWxlbWVudCogbV92aWRlb1Npbms7CisgICAgICAgIEdzdEVsZW1l
bnQqIG1fc291cmNlOworICAgICAgICBmbG9hdCBtX3JhdGU7CisgICAgICAgIGZsb2F0IG1fZW5k
VGltZTsKKyAgICAgICAgYm9vbCBtX2lzRW5kUmVhY2hlZDsKKyAgICAgICAgZG91YmxlIG1fdm9s
dW1lOworICAgICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwor
ICAgICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgICAgIGJv
b2wgbV9zdGFydGVkUGxheWluZzsKKyAgICAgICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1pbmc7
CisgICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBib29sIG1fdmlzaWJsZTsKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2U7Cit9OworfQorCisjZW5kaWYKKyNlbmRpZiAv
LyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvU2ltcGxlRm9udERhdGFFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvU2ltcGxlRm9udERhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM3ZTE3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9TaW1wbGVGb250RGF0YUVmbC5jcHAKQEAgLTAsMCArMSwxNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx1bmlj
b2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250RXh0ZW50
czsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0RXh0ZW50czsKKyAgICBjYWlyb19zY2Fs
ZWRfZm9udF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmZvbnRFeHRlbnRz
KTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4oZm9udEV4dGVudHMuYXNjZW50KTsK
KyAgICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRFeHRlbnRzLmRlc2NlbnQpOwor
ICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRFeHRlbnRzLmhlaWdodCk7
CisgICAgLy8gVGhlcmUgc2VlbXMgdG8gYmUgc29tZSByb3VuZGluZyBlcnJvciBpbiBjYWlybyAo
b3IgaW4gaG93IHdlCisgICAgLy8gdXNlIGNhaXJvKSB3aXRoIHNvbWUgZm9udHMsIGxpa2UgRGVq
YVZ1IFNhbnMgTW9ubywgd2hpY2ggbWFrZXMKKyAgICAvLyBjYWlybyByZXBvcnQgYSBoZWlnaHQg
c21hbGxlciB0aGFuIGFzY2VudCArIGRlc2NlbnQsIHdoaWNoIGlzCisgICAgLy8gd3JvbmcgYW5k
IGNvbmZ1c2VzIFdlYkNvcmUncyBsYXlvdXQgc3lzdGVtLiBXb3JrYXJvdW5kIHRoaXMKKyAgICAv
LyB3aGlsZSB3ZSBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4KKyAgICBpZiAobV9saW5lU3Bh
Y2luZyA8IG1fYXNjZW50ICsgbV9kZXNjZW50KQorICAgICAgICBtX2xpbmVTcGFjaW5nID0gbV9h
c2NlbnQgKyBtX2Rlc2NlbnQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1f
cGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgIngiLCAmdGV4dEV4dGVudHMpOworICAgIG1feEhl
aWdodCA9IHRleHRFeHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4
dGVudHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0RXh0ZW50cyk7Cisg
ICAgbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dEV4dGVudHMueF9hZHZhbmNl
KTsKKyAgICBtX2xpbmVHYXAgPSBtX2xpbmVTcGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7
CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpID8gMS4wZiA6IDAuZjsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKKyAgICBpZiAoIWlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIGlmIChtX3BsYXRm
b3JtRGF0YS5tX3BhdHRlcm4gJiYgKChGY1BhdHRlcm4qKS0xICE9IG1fcGxhdGZvcm1EYXRhLm1f
cGF0dGVybikpIHsKKyAgICAgICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobV9wbGF0Zm9ybURhdGEu
bV9wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLm1fcGF0dGVybiA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KSB7Cisg
ICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fcGxhdGZvcm1EYXRhLm1fc2Nh
bGVkRm9udCk7CisgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQgPSAwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisK
K1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3Nt
YWxsQ2Fwc0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6
ZSgwLjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2Mu
ZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNp
bXBsZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnRE
YXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgRlRfRmFjZSBmYWNl
ID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVk
Rm9udCk7CisKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFGY0ZyZWVUeXBl
Q2hhckluZGV4KGZhY2UsIGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICBjYWlyb19mdF9z
Y2FsZWRfZm9udF91bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQ
aXRjaCgpOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxl
ZEZvbnQpOworCisgICAgY2Fpcm9fZ2x5cGhfdCBjZ2x5cGggPSB7IGdseXBoLCAwLCAwIH07Cisg
ICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50czsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9n
bHlwaF9leHRlbnRzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4
dGVudHMpOworCisgICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAgaWYgKGNh
aXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpID09IENB
SVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlKQorICAgICAgICB3ID0gKGZs
b2F0KWV4dGVudHMueF9hZHZhbmNlOworICAgIHJldHVybiB3OworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0g
MC5mOworICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDQzMjUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1Np
bmtHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAwNyBPcGVuZWRIYW5kCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKioKKyAqIFNFQ1RJT046d2Via2l0
LXZpZGVvLXNpbmsKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR1N0cmVhbWVyIHZpZGVvIHNpbmsK
KyAqCisgKiAjV2ViS2l0VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0
IHNlbmRzCisgKiBkYXRhIHRvIGEgI2NhaXJvX3N1cmZhY2VfdC4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5o
PgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJ
Q19QQURfVEVNUExBVEUoInNpbmsiLAorICAgICAgICBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxX
QVlTLAorICAgICAgICBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfUkdCeCAiOyIgR1NU
X1ZJREVPX0NBUFNfQkdSeCkpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF92
aWRlb19zaW5rX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF92aWRlb19z
aW5rX2RlYnVnCisKK3N0YXRpYyBHc3RFbGVtZW50RGV0YWlscyB3ZWJraXRWaWRlb1NpbmtEZXRh
aWxzID0KKyAgICBHU1RfRUxFTUVOVF9ERVRBSUxTKChnY2hhciopICJXZWJLaXQgdmlkZW8gc2lu
ayIsCisgICAgICAgICAgICAgICAgICAgICAgICAoZ2NoYXIqKSAiU2luay9WaWRlbyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAoZ2NoYXIqKSAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEgR1N0
cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAoZ2NoYXIqKSAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworZW51bSB7Cisg
ICAgUkVQQUlOVF9SRVFVRVNURUQsCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX1NVUkZBQ0UKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRWaWRl
b1NpbmtTaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworc3RydWN0IF9XZWJLaXRWaWRl
b1NpbmtQcml2YXRlIHsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2U7CisgICAgR0FzeW5j
UXVldWUqIGFzeW5jUXVldWU7CisgICAgZ2Jvb2xlYW4gcmdiT3JkZXJpbmc7CisgICAgaW50IHdp
ZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgaW50IGZwc047CisgICAgaW50IGZwc0Q7CisgICAg
aW50IHBhck47CisgICAgaW50IHBhckQ7Cit9OworCisjZGVmaW5lIF9kb19pbml0KGJsYSkgXAor
ICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnLCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHNpbmsiLCBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQg
dmlkZW8gc2luayIpCisKK0dTVF9CT0lMRVJQTEFURV9GVUxMKFdlYktpdFZpZGVvU2luaywKKyAg
ICAgICAgICAgICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rLAorICAgICAgICAgICAgICAgICAg
ICAgR3N0QmFzZVNpbmssCisgICAgICAgICAgICAgICAgICAgICBHU1RfVFlQRV9CQVNFX1NJTkss
CisgICAgICAgICAgICAgICAgICAgICBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
dmlkZW9fc2lua19iYXNlX2luaXQoZ3BvaW50ZXIgZ19jbGFzcykKK3sKKyAgICBHc3RFbGVtZW50
Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGdfY2xhc3MpOworCisgICAg
Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0
aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua3RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xh
c3Nfc2V0X2RldGFpbHMoZWxlbWVudENsYXNzLCAmd2Via2l0VmlkZW9TaW5rRGV0YWlscyk7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayog
c2luaywgV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIFdlYktpdFZpZGVvU2lu
a1ByaXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1Np
bmtQcml2YXRlKTsKKyAgICBwcml2LT5hc3luY1F1ZXVlID0gZ19hc3luY19xdWV1ZV9uZXcoKTsK
K30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfdmlkZW9fc2lua19pZGxlX2Z1bmMoZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lO
SyhkYXRhKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsK
KyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKKworICAgIGlmICghcHJpdi0+YXN5bmNRdWV1ZSkKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgYnVmZmVyID0gKEdzdEJ1ZmZlciopZ19hc3luY19x
dWV1ZV90cnlfcG9wKHByaXYtPmFzeW5jUXVldWUpOworICAgIGlmICghYnVmZmVyIHx8IEdfVU5M
SUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIC8vIFRPRE86IGNvbnNpZGVyIHByaXYtPnJnYk9yZGVyaW5nPworICAgIGNhaXJvX3N1cmZh
Y2VfdCogc3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlciksIENBSVJPX0ZPUk1BVF9SR0IyNCwgcHJpdi0+d2lkdGgsIHByaXYtPmhl
aWdodCwgKDQgKiBwcml2LT53aWR0aCArIDMpICYgfjMpOworCisgICAgLy8gVE9ETzogV2UgY29w
eSB0aGUgZGF0YSB0d2ljZSByaWdodCBub3cuIFRoaXMgY291bGQgYmUgZWFzaWx5IGltcHJvdmVk
LgorICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHByaXYtPnN1cmZhY2UpOworICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyYywgMCwgMCk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KHNyYyk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBwcml2LT53aWR0aCwgcHJp
di0+aGVpZ2h0KTsKKyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBjYWlyb19kZXN0cm95KGNyKTsK
KworICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKworICAgIGdfc2lnbmFsX2VtaXQoc2lu
aywgd2Via2l0VmlkZW9TaW5rU2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDApOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgord2Via2l0X3ZpZGVvX3Np
bmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBic2luaywgR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAg
V2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYnNpbmspOworICAgIFdl
YktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgZ19hc3luY19x
dWV1ZV9wdXNoKHByaXYtPmFzeW5jUXVldWUsIGdzdF9idWZmZXJfcmVmKGJ1ZmZlcikpOworICAg
IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0hJR0hfSURMRSwgd2Via2l0X3ZpZGVvX3Npbmtf
aWRsZV9mdW5jLCBzaW5rLCAwKTsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3Rh
dGljIGdib29sZWFuCit3ZWJraXRfdmlkZW9fc2lua19zZXRfY2FwcyhHc3RCYXNlU2luayogYnNp
bmssIEdzdENhcHMqIGNhcHMpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lU
X1ZJREVPX1NJTksoYnNpbmspOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBz
aW5rLT5wcml2OworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgIGdib29sZWFuIHJl
dDsKKyAgICBjb25zdCBHVmFsdWUqIGZwczsKKyAgICBjb25zdCBHVmFsdWUqIHBhcjsKKyAgICBn
aW50IHdpZHRoLCBoZWlnaHQ7CisgICAgaW50IHJlZE1hc2s7CisKKyAgICBHc3RDYXBzKiBpbnRl
cnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0
X2NhcHMoJnNpbmt0ZW1wbGF0ZSksIGNhcHMpOworCisgICAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5
KGludGVyc2VjdGlvbikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGdzdF9jYXBzX3Vu
cmVmKGludGVyc2VjdGlvbik7CisKKyAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0
dXJlKGNhcHMsIDApOworCisgICAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVy
ZSwgIndpZHRoIiwgJndpZHRoKTsKKyAgICByZXQgJj0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0
cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpOworICAgIGZwcyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0
X3ZhbHVlKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIpOworICAgIHJldCAmPSAhIWZwczsKKworICAg
IHBhciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHN0cnVjdHVyZSwgInBpeGVsLWFzcGVjdC1y
YXRpbyIpOworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHBy
aXYtPndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+aGVpZ2h0ID0gaGVpZ2h0OworCisgICAgLyog
V2UgZG9udCB5ZXQgdXNlIGZwcyBvciBwaXhlbCBhc3BlY3QgaW50byBidXQgaGFuZHkgdG8gaGF2
ZSAqLworICAgIHByaXYtPmZwc04gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcihm
cHMpOworICAgIHByaXYtPmZwc0QgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9y
KGZwcyk7CisKKyAgICBpZiAocGFyKSB7CisgICAgICAgIHByaXYtPnBhck4gPSBnc3RfdmFsdWVf
Z2V0X2ZyYWN0aW9uX251bWVyYXRvcihwYXIpOworICAgICAgICBwcml2LT5wYXJEID0gZ3N0X3Zh
bHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcihwYXIpOworICAgIH0gZWxzZQorICAgICAgICBw
cml2LT5wYXJOID0gcHJpdi0+cGFyRCA9IDE7CisKKyAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQo
c3RydWN0dXJlLCAicmVkX21hc2siLCAmcmVkTWFzayk7CisgICAgcHJpdi0+cmdiT3JkZXJpbmcg
PSAocmVkTWFzayA9PSBzdGF0aWNfY2FzdDxpbnQ+KDB4ZmYwMDAwMDApKTsKKworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVP
X1NJTksob2JqZWN0KTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+
cHJpdjsKKworICAgIGlmIChwcml2LT5zdXJmYWNlKSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShwcml2LT5zdXJmYWNlKTsKKyAgICAgICAgcHJpdi0+c3VyZmFjZSA9IDA7CisgICAg
fQorCisgICAgaWYgKHByaXYtPmFzeW5jUXVldWUpIHsKKyAgICAgICAgZ19hc3luY19xdWV1ZV91
bnJlZihwcml2LT5hc3luY1F1ZXVlKTsKKyAgICAgICAgcHJpdi0+YXN5bmNRdWV1ZSA9IDA7Cisg
ICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVvX3NpbmtfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklE
RU9fU0lOSyhvYmplY3QpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5r
LT5wcml2OworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NVUkZBQ0U6
CisgICAgICAgIGlmIChwcml2LT5zdXJmYWNlKQorICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KHByaXYtPnN1cmZhY2UpOworICAgICAgICBwcml2LT5zdXJmYWNlID0gY2Fpcm9fc3Vy
ZmFjZV9yZWZlcmVuY2UoKGNhaXJvX3N1cmZhY2VfdCopZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURF
T19TSU5LKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1Bf
U1VSRkFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgc2luay0+cHJpdi0+
c3VyZmFjZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5r
X3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsKKworICAgIGdf
YXN5bmNfcXVldWVfbG9jayhwcml2LT5hc3luY1F1ZXVlKTsKKworICAgIC8qIFJlbW92ZSBhbGwg
cmVtYWluaW5nIG9iamVjdHMgZnJvbSB0aGUgcXVldWUgKi8KKyAgICB3aGlsZSAoR3N0QnVmZmVy
KiBidWZmZXIgPSAoR3N0QnVmZmVyKilnX2FzeW5jX3F1ZXVlX3RyeV9wb3BfdW5sb2NrZWQocHJp
di0+YXN5bmNRdWV1ZSkpCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKworICAg
IGdfYXN5bmNfcXVldWVfdW5sb2NrKHByaXYtPmFzeW5jUXVldWUpOworCisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktp
dFZpZGVvU2lua0NsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBnc3RiYXNl
U2lua0NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyhrbGFzcyk7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRWaWRlb1NpbmtQcml2YXRlKSk7CisK
KyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWRlb19zaW5rX3NldF9w
cm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWRlb19z
aW5rX2dldF9wcm9wZXJ0eTsKKworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF92
aWRlb19zaW5rX2Rpc3Bvc2U7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF92
aWRlb19zaW5rX2ZpbmFsaXplOworCisgICAgZ3N0YmFzZVNpbmtDbGFzcy0+cmVuZGVyID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJhc2VTaW5rQ2xhc3MtPnByZXJvbGwgPSB3
ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0YmFzZVNpbmtDbGFzcy0+c3RvcCA9IHdl
YmtpdF92aWRlb19zaW5rX3N0b3A7CisgICAgZ3N0YmFzZVNpbmtDbGFzcy0+c2V0X2NhcHMgPSB3
ZWJraXRfdmlkZW9fc2lua19zZXRfY2FwczsKKworICAgIHdlYmtpdFZpZGVvU2lua1NpZ25hbHNb
UkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCisg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywgUFJPUF9TVVJGQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigic3VyZmFjZSIs
ICJzdXJmYWNlIiwgIlRhcmdldCBjYWlyb19zdXJmYWNlX3QqIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKEdQYXJhbUZsYWdzKShHX1BBUkFNX1JFQURXUklURSkpKTsKK30KKworLyoq
CisgKiB3ZWJraXRfdmlkZW9fc2lua19uZXc6CisgKiBAc3VyZmFjZTogYSAjY2Fpcm9fc3VyZmFj
ZV90CisgKgorICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luayB3aGljaCB1c2Vz
IEBzdXJmYWNlIGFzIHRoZSB0YXJnZXQKKyAqIGZvciBzaW5raW5nIGEgdmlkZW8gc3RyZWFtIGZy
b20gR1N0cmVhbWVyLgorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjR3N0RWxlbWVudCBmb3IgdGhl
IG5ld2x5IGNyZWF0ZWQgdmlkZW8gc2luaworICovCitHc3RFbGVtZW50Kgord2Via2l0X3ZpZGVv
X3NpbmtfbmV3KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICByZXR1cm4gKEdzdEVs
ZW1lbnQqKWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAic3VyZmFjZSIsIHN1
cmZhY2UsIDApOworfQorCit2b2lkCit3ZWJraXRfdmlkZW9fc2lua19zZXRfc3VyZmFjZShXZWJL
aXRWaWRlb1NpbmsqIHNpbmssIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmtQcml2YXRlKiBwcml2OworCisgICAgc2luay0+cHJpdiA9IHByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2luaywgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2Vi
S2l0VmlkZW9TaW5rUHJpdmF0ZSk7CisgICAgaWYgKHByaXYtPnN1cmZhY2UpCisgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShwcml2LT5zdXJmYWNlKTsKKyAgICBwcml2LT5zdXJmYWNlID0g
Y2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI2YmQwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMCwwICsxLDg0IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaWZuZGVmIFZpZGVvU2lua0dTdHJlYW1lcl9oCisjZGVmaW5lIFZpZGVvU2lua0dTdHJlYW1l
cl9oCisKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX1ZJREVPX1NJTksgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5cGUoKQorCisj
ZGVmaW5lIFdFQktJVF9WSURFT19TSU5LKG9iaikgXAorICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgXAorICAgIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVv
U2luaykpCisKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktfQ0xBU1Moa2xhc3MpIFwKKyAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgXAorICAgIFdFQktJVF9UWVBFX1ZJREVP
X1NJTkssIFdlYktpdFZpZGVvU2lua0NsYXNzKSkKKworI2RlZmluZSBXRUJLSVRfSVNfVklERU9f
U0lOSyhvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFwKKyAg
ICBXRUJLSVRfVFlQRV9WSURFT19TSU5LKSkKKworI2RlZmluZSBXRUJLSVRfSVNfVklERU9fU0lO
S19DTEFTUyhrbGFzcykgXAorICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBc
CisgICAgV0VCS0lUX1RZUEVfVklERU9fU0lOSykpCisKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJ
TktfR0VUX0NMQVNTKG9iaikgXAorICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCBcCisgICAgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rQ2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rICAgICAgICBXZWJLaXRWaWRlb1Npbms7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgICBXZWJLaXRWaWRlb1NpbmtD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIFdlYktpdFZpZGVv
U2lua1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0VmlkZW9TaW5rIHsKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBHc3RCYXNlU2luayBwYXJlbnQ7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgeworICAgIC8qPCBw
cml2YXRlID4qLworICAgIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOyAvLyBOT0xJTlQK
KworICAgIC8qIEZ1dHVyZSBwYWRkaW5nICovCisgICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVk
MSkodm9pZCk7CisgICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkMikodm9pZCk7CisgICAgdm9p
ZCAoKiBfd2Via2l0X3Jlc2VydmVkMykodm9pZCk7CisgICAgdm9pZCAoKiBfd2Via2l0X3Jlc2Vy
dmVkNCkodm9pZCk7CisgICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkNSkodm9pZCk7CisgICAg
dm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkNikodm9pZCk7Cit9OworCitHVHlwZSAgICAgICB3ZWJr
aXRfdmlkZW9fc2lua19nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7IC8vIE5PTElOVAorR3N0
RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSk7
IC8vIE5PTElOVAorCit2b2lkIHdlYmtpdF92aWRlb19zaW5rX3NldF9zdXJmYWNlKFdlYktpdFZp
ZGVvU2luayAqc2luaywgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlKTsgLy8gTk9MSU5UCisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBWaWRlb1NpbmtHU3RyZWFtZXJfaAorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQ3ZmMyMmIuLmEz
OWU3Y2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDItMjIgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5k
cm9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIEVGTCBwb3J0IGZpbGVzIHRvIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC4K
KyAgICAgICAgaHR0cDovL3dlYmtpdC5vcmcvYi8zNTA4NworCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0Zsb2F0UmVjdEVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0ZvbnRDYWNoZUVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0ZvbnRFZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250
UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0
Zm9ybURhdGFFZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HbHlwaFBh
Z2VUcmVlTm9kZUVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25F
ZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbWFnZUVmbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ludFBvaW50RWZsLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9TaW1wbGVGb250RGF0YUVmbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5oOgorCiAy
MDEwLTAyLTExICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOYXRlIENoYXBpbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49227</attachid>
            <date>2010-02-22 11:03:24 -0800</date>
            <delta_ts>2010-02-25 12:34:30 -0800</delta_ts>
            <desc>Add EFL port files in WebCore/platform/efl</desc>
            <filename>webcore_platform_efl.diff</filename>
            <type>text/plain</type>
            <size>163326</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjZlZjUxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DbGlwYm9hcmRFZmwuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRF
ZmwuaCIKKworI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxD
bGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkKK3sKKyAgICByZXR1cm4gbmV3
IENsaXBib2FyZEVmbChwb2xpY3ksIGZhbHNlKTsKK30KKworQ2xpcGJvYXJkRWZsOjpDbGlwYm9h
cmRFZmwoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZykKKyAg
ICA6IENsaXBib2FyZChwb2xpY3ksIGZvckRyYWdnaW5nKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0NsaXBib2FyZEVmbDo6fkNsaXBib2FyZEVmbCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDbGlwYm9hcmRFZmw6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjp3cml0
ZVBsYWluVGV4dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjpjbGVhckFsbERhdGEoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBDbGlwYm9hcmRFZmw6OmdldERhdGEoY29uc3QgU3Ry
aW5nJiwgYm9vbCAmc3VjY2VzcykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2xpcGJv
YXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBD
bGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKK30KKworUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xp
cGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkRWZsOjpkcmFnTG9jYXRpb24oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOwor
fQorCitDYWNoZWRJbWFnZSogQ2xpcGJvYXJkRWZsOjpkcmFnSW1hZ2UoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZs
OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworTm9kZSogQ2xpcGJvYXJkRWZsOjpkcmFnSW1hZ2VFbGVtZW50
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENs
aXBib2FyZEVmbDo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRFZmw6
OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDbGlwYm9hcmRFZmw6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEVmbDo6d3JpdGVV
UkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEVmbDo6d3JpdGVSYW5nZShSYW5nZSosIEZyYW1l
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEVmbDo6aGFz
RGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjY3YjQzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRFZmxfaAorI2RlZmluZSBDbGlwYm9hcmRFZmxf
aAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENhY2hlZEltYWdlOworCitjbGFzcyBDbGlwYm9hcmRFZmwgOiBwdWJsaWMgQ2xpcGJvYXJkIHsK
K3B1YmxpYzoKKyAgICBDbGlwYm9hcmRFZmwoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBib29sKTsK
KyAgICB+Q2xpcGJvYXJkRWZsKCk7CisKKworICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nJiwgYm9vbCYpIGNvbnN0OworICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKworICAgIEludFBv
aW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OworICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBj
b25zdDsKKyAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50
Jik7CisgICAgTm9kZSogZHJhZ0ltYWdlRWxlbWVudCgpOworICAgIHZvaWQgc2V0RHJhZ0ltYWdl
RWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgIHZpcnR1YWwgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBk
ZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmLCBGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSos
IEZyYW1lKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKK307Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGYxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVmbC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
dGV4dE1lbnUuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCkKKyAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCisgICAgLCBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24oMCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVu
dTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENv
bnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlv
biA9IG1lbnU7Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpwbGF0
Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0
aW9uOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cmVsZWFzZVBs
YXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51
SXRlbUVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjkxMzAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNl
cyBJbmMuIDxpbmZvQHN0YWlrb3MubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJ
bnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGV4dE1lbnVJ
dGVtOjpDb250ZXh0TWVudUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVt
KENvbnRleHRNZW51KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVu
dUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlLCBDb250ZXh0TWVudUFj
dGlvbiwgY29uc3QgU3RyaW5nJiwgQ29udGV4dE1lbnUqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRN
ZW51SXRlbTo6cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQ29udGV4dE1l
bnVJdGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIEFjdGlvblR5cGU7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJ
dGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRN
ZW51QWN0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBDb250ZXh0
TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0
IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJ
dGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ29va2llSmFyRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0Nvb2tp
ZUphckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkY2RkYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0Nvb2tpZUphckVmbC5jcHAK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDb29raWVKYXIuaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGNvb2tpZUphcjsKKwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBwb2xpY3lVUkwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKK30KKworU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7Cisg
ICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmM4ODgzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DdXJzb3JFZmwuY3BwCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBwKQoreworICAgIG1faW1wbCA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHApOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJz
b3ImIG90aGVyKQoreworICAgIG1faW1wbCA9IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1f
aW1wbCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7CisgICAgaWYgKG1faW1wbCkgeworICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChtX2ltcGwpOworICAgICAgICBtX2ltcGwgPSAwOwor
ICAgIH0KK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
aG90c3BvdCkKKyAgICA6IG1faW1wbCgwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlZihvdGhlci5tX2ltcGwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKG1faW1wbCk7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiAqdGhp
czsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ3Vyc29ycyB7Citwcm90ZWN0ZWQ6CisgICAg
Q3Vyc29ycygpCisgICAgICAgIDogUG9pbnRlckN1cnNvcigiY3Vyc29yL3BvaW50ZXIiKQorICAg
ICAgICAsIE1vdmVDdXJzb3IoImN1cnNvci9tb3ZlIikKKyAgICAgICAgLCBDcm9zc0N1cnNvcigi
Y3Vyc29yL2Nyb3NzIikKKyAgICAgICAgLCBIYW5kQ3Vyc29yKCJjdXJzb3IvaGFuZCIpCisgICAg
ICAgICwgSUJlYW1DdXJzb3IoImN1cnNvci9pX2JlYW0iKQorICAgICAgICAsIFdhaXRDdXJzb3Io
ImN1cnNvci93YWl0IikKKyAgICAgICAgLCBIZWxwQ3Vyc29yKCJjdXJzb3IvaGVscCIpCisgICAg
ICAgICwgRWFzdFJlc2l6ZUN1cnNvcigiY3Vyc29yL2Vhc3RfcmVzaXplIikKKyAgICAgICAgLCBO
b3J0aFJlc2l6ZUN1cnNvcigiY3Vyc29yL25vcnRoX3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhF
YXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfZWFzdF9yZXNpemUiKQorICAgICAgICAsIE5v
cnRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vyc29yL25vcnRoX3dlc3RfcmVzaXplIikKKyAgICAgICAg
LCBTb3V0aFJlc2l6ZUN1cnNvcigiY3Vyc29yL3NvdXRoX3Jlc2l6ZSIpCisgICAgICAgICwgU291
dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivc291dGhfZWFzdF9yZXNpemUiKQorICAgICAgICAs
IFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vyc29yL3NvdXRoX3dlc3RfcmVzaXplIikKKyAgICAg
ICAgLCBXZXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivd2VzdF9yZXNpemUiKQorICAgICAgICAsIE5v
cnRoU291dGhSZXNpemVDdXJzb3IoImN1cnNvci9ub3J0aF9zb3V0aF9yZXNpemUiKQorICAgICAg
ICAsIEVhc3RXZXN0UmVzaXplQ3Vyc29yKCJjdXJzb3IvZWFzdF93ZXN0X3Jlc2l6ZSIpCisgICAg
ICAgICwgTm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfZWFzdF9z
b3V0aF93ZXN0X3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vy
c29yKCJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0aF9lYXN0X3Jlc2l6ZSIpCisgICAgICAgICwgQ29s
dW1uUmVzaXplQ3Vyc29yKCJjdXJzb3IvY29sdW1uX3Jlc2l6ZSIpCisgICAgICAgICwgUm93UmVz
aXplQ3Vyc29yKCJjdXJzb3Ivcm93X3Jlc2l6ZSIpCisgICAgICAgICwgTWlkZGxlUGFubmluZ0N1
cnNvcigiY3Vyc29yL21pZGRsZV9wYW5uaW5nIikKKyAgICAgICAgLCBFYXN0UGFubmluZ0N1cnNv
cigiY3Vyc29yL2Vhc3RfcGFubmluZyIpCisgICAgICAgICwgTm9ydGhQYW5uaW5nQ3Vyc29yKCJj
dXJzb3Ivbm9ydGhfcGFubmluZyIpCisgICAgICAgICwgTm9ydGhFYXN0UGFubmluZ0N1cnNvcigi
Y3Vyc29yL25vcnRoX2Vhc3RfcGFubmluZyIpCisgICAgICAgICwgTm9ydGhXZXN0UGFubmluZ0N1
cnNvcigiY3Vyc29yL25vcnRoX3dlc3RfcGFubmluZyIpCisgICAgICAgICwgU291dGhQYW5uaW5n
Q3Vyc29yKCJjdXJzb3Ivc291dGhfcGFubmluZyIpCisgICAgICAgICwgU291dGhFYXN0UGFubmlu
Z0N1cnNvcigiY3Vyc29yL3NvdXRoX2Vhc3RfcGFubmluZyIpCisgICAgICAgICwgU291dGhXZXN0
UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRoX3dlc3RfcGFubmluZyIpCisgICAgICAgICwgV2Vz
dFBhbm5pbmdDdXJzb3IoImN1cnNvci93ZXN0X3Bhbm5pbmciKQorICAgICAgICAsIFZlcnRpY2Fs
VGV4dEN1cnNvcigiY3Vyc29yL3ZlcnRpY2FsX3RleHQiKQorICAgICAgICAsIENlbGxDdXJzb3Io
ImN1cnNvci9jZWxsIikKKyAgICAgICAgLCBDb250ZXh0TWVudUN1cnNvcigiY3Vyc29yL2NvbnRl
eHRfbWVudSIpCisgICAgICAgICwgTm9Ecm9wQ3Vyc29yKCJjdXJzb3Ivbm9fZHJvcCIpCisgICAg
ICAgICwgQ29weUN1cnNvcigiY3Vyc29yL2NvcHkiKQorICAgICAgICAsIFByb2dyZXNzQ3Vyc29y
KCJjdXJzb3IvcHJvZ3Jlc3MiKQorICAgICAgICAsIEFsaWFzQ3Vyc29yKCJjdXJzb3IvYWxpYXMi
KQorICAgICAgICAsIE5vbmVDdXJzb3IoImN1cnNvci9ub25lIikKKyAgICAgICAgLCBOb3RBbGxv
d2VkQ3Vyc29yKCJjdXJzb3Ivbm90X2FsbG93ZWQiKQorICAgICAgICAsIFpvb21JbkN1cnNvcigi
Y3Vyc29yL3pvb21faW4iKQorICAgICAgICAsIFpvb21PdXRDdXJzb3IoImN1cnNvci96b29tX291
dCIpCisgICAgICAgICwgR3JhYkN1cnNvcigiY3Vyc29yL2dyYWIiKQorICAgICAgICAsIEdyYWJi
aW5nQ3Vyc29yKCJjdXJzb3IvZ3JhYmJpbmciKQorICAgIHsKKyAgICB9CisKKyAgICB+Q3Vyc29y
cygpCisgICAgeworICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyBDdXJzb3JzKiBzZWxmKCk7
CisgICAgc3RhdGljIEN1cnNvcnMqIHNfc2VsZjsKKworICAgIEN1cnNvciBQb2ludGVyQ3Vyc29y
OworICAgIEN1cnNvciBNb3ZlQ3Vyc29yOworICAgIEN1cnNvciBDcm9zc0N1cnNvcjsKKyAgICBD
dXJzb3IgSGFuZEN1cnNvcjsKKyAgICBDdXJzb3IgSUJlYW1DdXJzb3I7CisgICAgQ3Vyc29yIFdh
aXRDdXJzb3I7CisgICAgQ3Vyc29yIEhlbHBDdXJzb3I7CisgICAgQ3Vyc29yIEVhc3RSZXNpemVD
dXJzb3I7CisgICAgQ3Vyc29yIE5vcnRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVh
c3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIE5vcnRoV2VzdFJlc2l6ZUN1cnNvcjsKKyAgICBD
dXJzb3IgU291dGhSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFJlc2l6ZUN1cnNv
cjsKKyAgICBDdXJzb3IgU291dGhXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBXZXN0UmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aFNvdXRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNv
ciBFYXN0V2VzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgTm9ydGhFYXN0U291dGhXZXN0UmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3I7Cisg
ICAgQ3Vyc29yIENvbHVtblJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgUm93UmVzaXplQ3Vyc29y
OworICAgIEN1cnNvciBNaWRkbGVQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBFYXN0UGFubmlu
Z0N1cnNvcjsKKyAgICBDdXJzb3IgTm9ydGhQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBOb3J0
aEVhc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aFdlc3RQYW5uaW5nQ3Vyc29yOwor
ICAgIEN1cnNvciBTb3V0aFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFBhbm5p
bmdDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRoV2VzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29y
IFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBWZXJ0aWNhbFRleHRDdXJzb3I7CisgICAg
Q3Vyc29yIENlbGxDdXJzb3I7CisgICAgQ3Vyc29yIENvbnRleHRNZW51Q3Vyc29yOworICAgIEN1
cnNvciBOb0Ryb3BDdXJzb3I7CisgICAgQ3Vyc29yIENvcHlDdXJzb3I7CisgICAgQ3Vyc29yIFBy
b2dyZXNzQ3Vyc29yOworICAgIEN1cnNvciBBbGlhc0N1cnNvcjsKKyAgICBDdXJzb3IgTm9uZUN1
cnNvcjsKKyAgICBDdXJzb3IgTm90QWxsb3dlZEN1cnNvcjsKKyAgICBDdXJzb3IgWm9vbUluQ3Vy
c29yOworICAgIEN1cnNvciBab29tT3V0Q3Vyc29yOworICAgIEN1cnNvciBHcmFiQ3Vyc29yOwor
ICAgIEN1cnNvciBHcmFiYmluZ0N1cnNvcjsKK307CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNfc2Vs
ZiA9IDA7CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNlbGYoKQoreworICAgIGlmICghc19zZWxmKQor
ICAgICAgICBzX3NlbGYgPSBuZXcgQ3Vyc29ycygpOworCisgICAgcmV0dXJuIHNfc2VsZjsKK30K
KworfQorCitjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPlBvaW50ZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbW92ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+TW92ZUN1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+
Q3Jvc3NDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+SGFuZEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVh
bUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNl
bGYoKS0+V2FpdEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5IZWxwQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IGVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RS
ZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoUmVzaXplQ3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+Tm9ydGhFYXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhX
ZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Tb3V0aFJlc2l6ZUN1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPlNvdXRoRWFzdFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBz
b3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNv
dXRoV2VzdFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5XZXN0UmVzaXplQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBD
dXJzb3JzOjpzZWxmKCktPk5vcnRoU291dGhSZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
PkVhc3RXZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRo
V2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhF
YXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNv
dXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9y
dGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJl
c2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Q29sdW1uUmVzaXpl
Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+Um93UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IG1pZGRsZVBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk1p
ZGRsZVBhbm5pbmdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3Io
KQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RQYW5uaW5nQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoUGFubmluZ0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNv
cnM6OnNlbGYoKS0+Tm9ydGhQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
RWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRo
RWFzdFBhbm5pbmdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0UGFubmluZ0N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoUGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5Tb3V0aEVhc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2Vz
dFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2Vz
dFBhbm5pbmdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPldlc3RQYW5uaW5nQ3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+VmVydGljYWxUZXh0Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNlbGxDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNlbGxDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpz
ZWxmKCktPkNvbnRleHRNZW51Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9Ecm9wQ3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
PkNvcHlDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlByb2dyZXNzQ3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5BbGlhc0N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vy
c29yczo6c2VsZigpLT5Ob25lQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRD
dXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vdEFsbG93ZWRDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29y
czo6c2VsZigpLT5ab29tSW5DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Wm9vbU91dEN1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigp
LT5HcmFiQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5HcmFiYmluZ0N1cnNvcjsKK30KKworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0RhdGFFZmwuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvRHJhZ0RhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNmOWVjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EcmFn
RGF0YUVmbC5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgg
SU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1
ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0RhdGE6OmNh
blNtYXJ0UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERy
YWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCkgY29uc3QKK3sKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitDb2xvciBEcmFnRGF0YTo6
YXNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKCk7Cit9CisKK1Bhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnND
b21wYXRpYmxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IERyYWdEYXRhOjpjb250YWluc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRh
Ojphc0ZyYWdtZW50KERvY3VtZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0ltYWdlRWZsLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWQyYTM3MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0RyYWdJbWFnZUVmbC5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgi
CisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZikKK3sK
KyAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJh
Z0ltYWdlUmVmKQoreworfQorCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdl
UmVmIGltYWdlLCBGbG9hdFNpemUpCit7CisgICAgcmV0dXJuIGltYWdlOworfQorCitEcmFnSW1h
Z2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxv
YXQpCit7CisgICAgcmV0dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRnJvbUltYWdlKEltYWdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0V2ZW50
TG9vcEVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2ZmZTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCkBAIC0wLDAgKzEsMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJFdmVudExvb3AuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3Bf
aXRlcmF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9GaWxlQ2hvb3NlckVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9GaWxlQ2hvb3NlckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODY2Y2FhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0ZpbGVDaG9v
c2VyRWZsLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9y
V2lkdGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKSBjb25zdAoreworICAgIGlmICh3aWR0
aCA8PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAobV9maWxlbmFtZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwo
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVm
bC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzY4Y2MyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKQEAgLTAsMCArMSwxODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNp
bmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRmls
ZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZu
bWF0Y2guaD4KKyNpbmNsdWRlIDxnbGliLmg+IC8vIFRPRE86IHJlbW92ZSBtZSBhZnRlciBmb2xs
b3dpbmcgVE9ETyBpcyBzb2x2ZWQuCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cit9CisKK2NoYXIqIGZp
bGVuYW1lRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKy8vIFdBUk5JTkc6IHRo
aXMgaXMganVzdCB1c2VkIGJ5IHBsYXRmb3JtL25ldHdvcmsvc291cCwgdGh1cyBtdXN0IGJlIEdM
SUIhISEKKy8vIFRPRE86IG1vdmUgdGhpcyB0byBDU3RyaW5nIGFuZCB1c2UgaXQgaW5zdGVhZCBp
biBib3RoLCBiZWluZyBtb3JlIHN0YW5kYXJkCisjaWYgUExBVEZPUk0oV0lOX09TKQorICAgIHJl
dHVybiBnX3N0cmR1cChzdHJpbmcudXRmOCgpLmRhdGEoKSk7CisjZWxzZQorICAgIHJldHVybiBn
X3VyaV91bmVzY2FwZV9zdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCksIDApOworI2VuZGlmCit9
CisKK0NTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBjaGFyIGJ1ZmZlcltQQVRIX01BWF07CisgICAg
Y29uc3QgY2hhciogdG1wRGlyID0gZ2V0ZW52KCJUTVBESVIiKTsKKworICAgIGlmICghdG1wRGly
KQorICAgICAgICB0bXBEaXIgPSAiL3RtcCI7CisKKyAgICBpZiAoc25wcmludGYoYnVmZmVyLCBQ
QVRIX01BWCwgIiVzLyVzWFhYWFhYIiwgdG1wRGlyLCBwcmVmaXgpID49IFBBVEhfTUFYKQorICAg
ICAgICBnb3RvIGVuZDsKKworICAgIGhhbmRsZSA9IG1rc3RlbXAoYnVmZmVyKTsKKyAgICBpZiAo
aGFuZGxlIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICByZXR1cm4gQ1N0cmluZyhidWZm
ZXIpOworCitlbmQ6CisgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAg
ICByZXR1cm4gQ1N0cmluZygpOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5kbGUpKSB7CisgICAgICAg
IGNsb3NlKGhhbmRsZSk7CisgICAgICAgIGhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGU7CisgICAgfQorfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzaXplX3QgdG90YWxCeXRl
c1dyaXR0ZW4gPSAwOworICAgIHNpemVfdCB0b2RvID0gbGVuZ3RoOworICAgIHdoaWxlICh0b2Rv
ID4gMCkgeworICAgICAgICBzc2l6ZV90IGJ5dGVzV3JpdHRlbiA9IHdyaXRlKGhhbmRsZSwgZGF0
YSwgdG9kbyk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKSB7CisgICAgICAgICAgICBp
ZiAoZXJybm8gIT0gRUlOVFIgJiYgZXJybm8gIT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChieXRlc1dyaXR0ZW4gPiAwKSB7CisgICAgICAg
ICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICBkYXRh
ICs9IGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIHRvZG8gLT0gYnl0ZXNXcml0dGVuOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuOworfQorCitib29s
IHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgLy8gY2F1dGlvbiwg
Y2xvc2luZyBoYW5kbGUgd2lsbCBtYWtlIG1lbW9yeSB2YW5pc2ggYW5kIGFueSByZW1haW5pbmcK
KyAgICAvLyB0aW1lciwgaWRsZXIsIHRocmVhZHMgb3IgYW55IG90aGVyIGxlZnQtb3ZlciB3aWxs
IGNyYXNoLAorICAgIC8vIG1heWJlIGp1c3QgaWdub3JlIHRoaXMgaXMgYSBzYWZlciBzb2x1dGlv
bj8KKyAgICByZXR1cm4gIWRsY2xvc2UobW9kdWxlKTsKK30KKworU3RyaW5nIGhvbWVEaXJlY3Rv
cnlQYXRoKCkKK3sKKyAgICBjb25zdCBjaGFyICpob21lID0gZ2V0ZW52KCJIT01FIik7CisgICAg
aWYgKCFob21lKSB7CisgICAgICAgIGhvbWUgPSBnZXRlbnYoIlRNUERJUiIpOworICAgICAgICBp
ZiAoIWhvbWUpCisgICAgICAgICAgICBob21lID0gIi90bXAiOworICAgIH0KKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChob21lKTsKK30KKworVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9y
eShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IGVudHJpZXM7CisgICAgQ1N0cmluZyBjcGF0aCA9IHBhdGgudXRmOCgpOworICAg
IENTdHJpbmcgY2ZpbHRlciA9IGZpbHRlci51dGY4KCk7CisgICAgY2hhciBmaWxlUGF0aFtQQVRI
X01BWF07CisgICAgY2hhciogZmlsZU5hbWU7CisgICAgc2l6ZV90IGZpbGVOYW1lU3BhY2U7Cisg
ICAgRElSKiBkaXI7CisKKyAgICBpZiAoY3BhdGgubGVuZ3RoKCkgKyBOQU1FX01BWCA+PSBzaXpl
b2YoZmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gZW50cmllczsKKyAgICAvLyBsb29wIGludmFy
aWFudDogZGlyZWN0b3J5IHBhcnQgKyAnLycKKyAgICBtZW1jcHkoZmlsZVBhdGgsIGNwYXRoLmRh
dGEoKSwgY3BhdGgubGVuZ3RoKCkpOworICAgIGZpbGVOYW1lID0gZmlsZVBhdGggKyBjcGF0aC5s
ZW5ndGgoKTsKKyAgICBpZiAoY3BhdGgubGVuZ3RoKCkgPiAwICYmIGZpbGVQYXRoW2NwYXRoLmxl
bmd0aCgpIC0gMV0gIT0gJy8nKSB7CisgICAgICAgIGZpbGVOYW1lWzBdID0gJy8nOworICAgICAg
ICBmaWxlTmFtZSsrOworICAgIH0KKyAgICBmaWxlTmFtZVNwYWNlID0gc2l6ZW9mKGZpbGVQYXRo
KSAtIChmaWxlTmFtZSAtIGZpbGVQYXRoKSAtIDE7CisKKyAgICBkaXIgPSBvcGVuZGlyKGNwYXRo
LmRhdGEoKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybiBlbnRyaWVzOworCisgICAg
c3RydWN0IGRpcmVudCogZGU7CisgICAgd2hpbGUgKGRlID0gcmVhZGRpcihkaXIpKSB7CisgICAg
ICAgIHNpemVfdCBuYW1lTGVuOworICAgICAgICBpZiAoZGUtPmRfbmFtZVswXSA9PSAnLicpIHsK
KyAgICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzFdID09ICdcMCcpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZGUtPmRfbmFtZVsxXSA9PSAnLicgJiYgZGUtPmRf
bmFtZVsyXSA9PSAnXDAnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmbm1hdGNoKGNmaWx0ZXIuZGF0YSgpLCBkZS0+ZF9uYW1lLCAwKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5hbWVMZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7
CisgICAgICAgIGlmIChuYW1lTGVuID49IGZpbGVOYW1lU3BhY2UpCisgICAgICAgICAgICBjb250
aW51ZTsgLy8gbWF5YmUgYXNzZXJ0PyBpdCBzaG91bGQgbmV2ZXIgaGFwcGVuIGFueXdheS4uLgor
CisgICAgICAgIG1lbWNweShmaWxlTmFtZSwgZGUtPmRfbmFtZSwgbmFtZUxlbiArIDEpOworICAg
ICAgICBlbnRyaWVzLmFwcGVuZChmaWxlUGF0aCk7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcik7
CisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL0tVUkxFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvS1VSTEVmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMzZkYQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0tVUkxFZmwuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIGNoYXIqIGZp
bGVuYW1lID0gKGNoYXIqKW1fc3RyaW5nLnV0ZjgoKS5kYXRhKCk7CisgICAgaWYgKCFmaWxlbmFt
ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHBhdGggPSBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKTsKKyAgICBmcmVlKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcGF0
aDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvTGFuZ3VhZ2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTGFuZ3VhZ2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDVjZmQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9MYW5ndWFnZS5jcHAKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYW5n
dWFnZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBkZWZhdWx0TGFuZ3Vh
Z2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZs
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0xvY2FsaXplZFN0cmluZ3NFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTZhMTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZsLmNwcApAQCAtMCwwICsx
LDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0
aWFuQGltZW5kaW8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1N0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTdWJtaXQiKTsKK30KKworU3RyaW5nIGlucHV0RWxl
bWVudEFsdFRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTdWJtaXQiKTsK
K30KKworU3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOCgiUmVzZXQiKTsKK30KKworU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJv
ZHVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9TZWFyY2hhYmxlIElu
ZGV4Iik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ2hvb3NlIEZpbGUiKTsKK30KKworU3RyaW5nIGZpbGVC
dXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiTm8gZmlsZSBzZWxlY3RlZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4g
TGluayBpbiBOZXcgX1dpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiX0Rvd25s
b2FkIExpbmtlZCBGaWxlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlu
a1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29weSBMaW5r
IExvY19hdGlvbiIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5O
ZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJPcGVuIF9JbWFnZSBp
biBOZXcgV2luZG93Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZElt
YWdlVG9EaXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiU2FfdmUgSW1hZ2Ug
QXMiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJk
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29wX3kgSW1hZ2UiKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpCit7CisgICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiQ29weSIpOworICAgIHJldHVybiBzdG9ja0xh
YmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkKK3sKKyAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJEZWxldGUiKTsKKyAgICBy
ZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFs
bCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgi
U2VsZWN0IF9BbGwiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJf
SW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0lucHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
IklucHV0IF9NZXRob2RzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2so
KQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkdv
X0JhY2siKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0dvRm9yd2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOCgiR29fRm9yd2FyZCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU3RvcCgpCit7CisgICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiU3RvcCIpOworICAgIHJldHVybiBzdG9ja0xh
YmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOCgiX1JlbG9hZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ3V0KCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZy
b21VVEY4KCJDdXQiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1Bhc3RlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBT
dHJpbmc6OmZyb21VVEY4KCJQYXN0ZSIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJObyBHdWVzc2VzIEZvdW5kIik7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoIl9JZ25vcmUgU3BlbGxpbmciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfTGVhcm4gU3Bl
bGxpbmciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9TZWFyY2ggdGhlIFdlYiIpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiX0xvb2sgVXAgaW4gRGljdGlvbmFyeSIpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJfT3BlbiBMaW5rIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVH
cmFtbWFyKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiSWdub3JlIF9HcmFtbWFy
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzaG93ID8gIlNob3cgU3BlbGxpbmcgYW5kIEdy
YW1tYXIiIDogIkhpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJfQ2hlY2sgRG9jdW1lbnQgTm93Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJDaGVjayBTcGVsbGluZyBXaGlsZSBfVHlwaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIik7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIl9Gb250Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkKK3sK
KyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJCb2xkIik7
CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJ
dGFsaWMoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVU
RjgoIkl0YWxpYyIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KCJVbmRlcmxpbmUiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJfT3V0bGluZSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJJbnNw
ZWN0IF9FbGVtZW50Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVm
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnTGVmdFRvUmlnaHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
RGVmYXVsdERpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
c2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiTm8gcmVjZW50IHNlYXJjaGVzIik7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51UmVj
ZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiUmVjZW50
IHNlYXJjaGVzIik7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1Rl
eHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfQ2xlYXIgcmVjZW50IHNlYXJj
aGVzIik7Cit9CisKK1N0cmluZyBBWERlZmluaXRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0ZXJtIik7Cit9CisKK1N0cmluZyBBWERlZmluaXRpb25M
aXN0RGVmaW5pdGlvblRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJkZWZp
bml0aW9uIik7Cit9CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KCJwcmVzcyIpOworfQorCitTdHJpbmcgQVhSYWRpb0J1dHRvbkFj
dGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJzZWxlY3QiKTsKK30K
KworU3RyaW5nIEFYVGV4dEZpZWxkQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoImFjdGl2YXRlIik7Cit9CisKK1N0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlv
blZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ1bmNoZWNrIik7Cit9CisK
K1N0cmluZyBBWFVuY2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoImNoZWNrIik7Cit9CisKK1N0cmluZyBBWExpbmtBY3Rpb25WZXJiKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgianVtcCIpOworfQorCitTdHJpbmcgdW5r
bm93bkZpbGVTaXplVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlVua25v
d24iKTsKK30KKworU3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJMb2FkaW5nLi4uIik7Cit9CisKK1N0cmluZyBt
ZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiTGl2ZSBCcm9hZGNhc3QiKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNz
YWdlUGF0dGVybk1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
InBhdHRlcm4gbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VP
dmVyZmxvd1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSBvdmVy
ZmxvdyIpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSB1bmRlcmZsb3ciKTsKK30K
KworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoInN0ZXAgbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlVG9vTG9uZ1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KCJ0b28gbG9uZyIpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidHlwZSBtaXNtYXRjaCIpOwor
fQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidmFsdWUgbWlzc2luZyIpOworfQorCitTdHJpbmcgQVhN
ZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9Mb2dnaW5nRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xODI5YzgwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvTG9nZ2luZ0VmbC5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEluaXRpYWxpemVMb2dn
aW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCit7CisgICAgTG9nTm90WWV0SW1wbGVtZW50ZWQuc3Rh
dGUgPSBXVEZMb2dDaGFubmVsT247Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL01JTUVUeXBlUmVnaXN0cnlFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTUlN
RVR5cGVSZWdpc3RyeUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGQ4YjI4YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL01JTUVUeXBl
UmVnaXN0cnlFZmwuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKKyAgICBjb25zdCBj
aGFyKiBleHRlbnNpb247CisgICAgY29uc3QgY2hhciogbWltZVR5cGU7Cit9OworCitzdGF0aWMg
Y29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcFtdID0geworICAgIHsgImJtcCIsICJpbWFn
ZS9ibXAiIH0sCisgICAgeyAiY3NzIiwgInRleHQvY3NzIiB9LAorICAgIHsgImdpZiIsICJpbWFn
ZS9naWYiIH0sCisgICAgeyAiaHRtbCIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaHRtIiwgInRl
eHQvaHRtbCIgfSwKKyAgICB7ICJpY28iLCAiaW1hZ2UveC1pY29uIiB9LAorICAgIHsgImpwZWci
LCAiaW1hZ2UvanBlZyIgfSwKKyAgICB7ICJqcGciLCAiaW1hZ2UvanBlZyIgfSwKKyAgICB7ICJq
cyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiIH0sCisgICAgeyAibW5nIiwgInZpZGVvL3gt
bW5nIiB9LAorICAgIHsgInBibSIsICJpbWFnZS94LXBvcnRhYmxlLWJpdG1hcCIgfSwKKyAgICB7
ICJwZ20iLCAiaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwIiB9LAorICAgIHsgInBkZiIsICJhcHBs
aWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7ICJwcG0i
LCAiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXAiIH0sCisgICAgeyAicnNzIiwgImFwcGxpY2F0aW9u
L3Jzcyt4bWwiIH0sCisgICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwiIH0sCisgICAgeyAidGV4
dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInRpZiIsICJpbWFnZS90aWZmIiB9LAorICAgIHsg
InRpZmYiLCAiaW1hZ2UvdGlmZiIgfSwKKyAgICB7ICJ0eHQiLCAidGV4dC9wbGFpbiIgfSwKKyAg
ICB7ICJ4Ym0iLCAiaW1hZ2UveC14Yml0bWFwIiB9LAorICAgIHsgInhtbCIsICJ0ZXh0L3htbCIg
fSwKKyAgICB7ICJ4cG0iLCAiaW1hZ2UveC14cG0iIH0sCisgICAgeyAieHNsIiwgInRleHQveHNs
IiB9LAorICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7ICJ3
bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3Zu
ZC53YXAud21sYyIgfSwKKyAgICB7IDAsIDAgfQorfTsKKworU3RyaW5nIE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIFN0
cmluZyBzID0gZXh0Lmxvd2VyKCk7CisgICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5z
aW9uTWFwOworICAgIHdoaWxlIChlLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHMgPT0gZS0+
ZXh0ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOworICAgICAgICArK2U7
CisgICAgfQorCisgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOworfQorCit9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QYXN0ZWJvYXJkRWZsLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1Bhc3RlYm9hcmRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjIxODAzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9QYXN0ZWJvYXJkRWZsLmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAw
OCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQor
eworICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsK
KyAgICByZXR1cm4gcGFzdGVib2FyZDsKK30KKworUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFp
blRleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNh
blNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiwgRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0
UmVwbGFjZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFn
bWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFt
ZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dEVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZmU4ZTkKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwu
Y3BwCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERp
ZWdvIEhpZGFsZ28gQy4gR29uemFsZXoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBLZXlNYXA7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFdpbmRvd3NLZXlNYXA7
CisKK3N0YXRpYyBLZXlNYXAgZ0tleU1hcDsKK3N0YXRpYyBXaW5kb3dzS2V5TWFwIGdXaW5kb3dz
S2V5TWFwOworCitzdGF0aWMgdm9pZCBjcmVhdGVLZXlNYXAoKQoreworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5n
Ojpmb3JtYXQoIkYlZCIsIGkpOworICAgICAgICBnS2V5TWFwLnNldChrZXksIGtleSk7CisgICAg
fQorICAgIGdLZXlNYXAuc2V0KCJBbHRfTCIsICJBbHQiKTsKKyAgICBnS2V5TWFwLnNldCgiSVNP
X0xldmVsM19TaGlmdCIsICJBbHQiKTsKKyAgICBnS2V5TWFwLnNldCgiTWVudSIsICJBbHQiKTsK
KyAgICBnS2V5TWFwLnNldCgiU2hpZnRfTCIsICJTaGlmdCIpOworICAgIGdLZXlNYXAuc2V0KCJT
aGlmdF9SIiwgIlNoaWZ0Iik7CisgICAgZ0tleU1hcC5zZXQoIkRvd24iLCAiRG93biIpOworICAg
IGdLZXlNYXAuc2V0KCJFbmQiLCAiRW5kIik7CisgICAgZ0tleU1hcC5zZXQoIlJldHVybiIsICJF
bnRlciIpOworICAgIGdLZXlNYXAuc2V0KCJLUF9FbnRlciIsICJFbnRlciIpOworICAgIGdLZXlN
YXAuc2V0KCJIb21lIiwgIkhvbWUiKTsKKyAgICBnS2V5TWFwLnNldCgiSW5zZXJ0IiwgIkluc2Vy
dCIpOworICAgIGdLZXlNYXAuc2V0KCJMZWZ0IiwgIkxlZnQiKTsKKyAgICBnS2V5TWFwLnNldCgi
RG93biIsICJEb3duIik7CisgICAgZ0tleU1hcC5zZXQoIk5leHQiLCAiUGFnZURvd24iKTsKKyAg
ICBnS2V5TWFwLnNldCgiUHJpb3IiLCAiUGFnZVVwIik7CisgICAgZ0tleU1hcC5zZXQoIlJpZ2h0
IiwgIlJpZ2h0Iik7CisgICAgZ0tleU1hcC5zZXQoIlVwIiwgIlVwIik7CisgICAgZ0tleU1hcC5z
ZXQoIkRlbGV0ZSIsICJVKzAwN0YiKTsKKyAgICBnS2V5TWFwLnNldCgiVGFiIiwgIlUrMDAwOSIp
OworICAgIGdLZXlNYXAuc2V0KCJJU09fTGVmdF9UYWIiLCAiVSswMDA5Iik7Cit9CisKK3N0YXRp
YyB2b2lkIGNyZWF0ZVdpbmRvd3NLZXlNYXAoKQoreworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
UmV0dXJuIiwgICAgIFZLX1JFVFVSTik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJLUF9SZXR1
cm4iLCAgVktfUkVUVVJOKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkFsdF9MIiwgICAgICBW
S19NRU5VKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIklTT19MZXZlbDNfU2hpZnQiLCBWS19N
RU5VKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIk1lbnUiLCAgICAgICBWS19NRU5VKTsKKyAg
ICBnV2luZG93c0tleU1hcC5zZXQoIlNoaWZ0X0wiLCAgICBWS19TSElGVCk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJTaGlmdF9SIiwgICAgVktfU0hJRlQpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiQ29udHJvbF9MIiwgIFZLX0NPTlRST0wpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
Q29udHJvbF9SIiwgIFZLX0NPTlRST0wpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiUGF1c2Ui
LCAgICAgIFZLX1BBVVNFKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkJyZWFrIiwgICAgICBW
S19QQVVTRSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJDYXBzX0xvY2siLCAgVktfQ0FQSVRB
TCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJTY3JvbGxfTG9jayIsIFZLX1NDUk9MTCk7Cisg
ICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJOdW1fTG9jayIsICAgVktfTlVNTE9DSyk7CisgICAgZ1dp
bmRvd3NLZXlNYXAuc2V0KCJFc2NhcGUiLCAgICAgVktfRVNDQVBFKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoIlRhYiIsICAgICAgICBWS19UQUIpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
SVNPX0xlZnRfVGFiIiwgVktfVEFCKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkJhY2tTcGFj
ZSIsICBWS19CQUNLKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlNwYWNlIiwgICAgICBWS19T
UEFDRSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJOZXh0IiwgICAgICAgVktfTkVYVCk7Cisg
ICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJQcmlvciIsICAgICAgVktfUFJJT1IpOworICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiSG9tZSIsICAgICAgIFZLX0hPTUUpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiRW5kIiwgICAgICAgIFZLX0VORCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJSaWdo
dCIsICAgICAgVktfUklHSFQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTGVmdCIsICAgICAg
IFZLX0xFRlQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiVXAiLCAgICAgICAgIFZLX1VQKTsK
KyAgICBnV2luZG93c0tleU1hcC5zZXQoIkRvd24iLCAgICAgICBWS19ET1dOKTsKKyAgICBnV2lu
ZG93c0tleU1hcC5zZXQoIlByaW50IiwgICAgICBWS19QUklOVCk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJJbnNlcnQiLCAgICAgVktfSU5TRVJUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
IkRlbGV0ZSIsICAgICBWS19ERUxFVEUpOworCisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJjb21t
YSIsICAgICAgICBWS19PRU1fQ09NTUEpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgibGVzcyIs
ICAgICAgICAgVktfT0VNX0NPTU1BKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInBlcmlvZCIs
ICAgICAgIFZLX09FTV9QRVJJT0QpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZ3JlYXRlciIs
ICAgICAgVktfT0VNX1BFUklPRCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJzZW1pY29sb24i
LCAgICBWS19PRU1fMSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJjb2xvbiIsICAgICAgICBW
S19PRU1fMSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJzbGFzaCIsICAgICAgICBWS19PRU1f
Mik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJxdWVzdGlvbiIsICAgICBWS19PRU1fMik7Cisg
ICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJncmF2ZSIsICAgICAgICBWS19PRU1fMyk7CisgICAgZ1dp
bmRvd3NLZXlNYXAuc2V0KCJhc2NpaXRpbGRlIiwgICBWS19PRU1fMyk7CisgICAgZ1dpbmRvd3NL
ZXlNYXAuc2V0KCJicmFja2V0bGVmdCIsICBWS19PRU1fNCk7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJicmFjZWxlZnQiLCAgICBWS19PRU1fNCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJi
YWNrc2xhc2giLCAgICBWS19PRU1fNSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJiYXIiLCAg
ICAgICAgICBWS19PRU1fNSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJicmFja2V0cmlnaHQi
LCBWS19PRU1fNik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJicmFjZXJpZ2h0IiwgICBWS19P
RU1fNik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhcG9zdHJvcGhlIiwgICBWS19PRU1fNyk7
CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJxdW90ZWRibCIsICAgICBWS19PRU1fNyk7CisKKyAg
ICAvLyBBbHBoYWJldAorICAgIFN0cmluZyBhbHBoYWJldCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJz
dHV2d3h5eiI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAyNjsgaSsrKSB7Cisg
ICAgICAgIFN0cmluZyBrZXkgPSBTdHJpbmc6OmZvcm1hdCgiJWMiLCBhbHBoYWJldFtpXSk7Cisg
ICAgICAgIGdXaW5kb3dzS2V5TWFwLnNldChrZXksIFZLX0EgKyBpKTsKKyAgICB9CisKKyAgICAv
LyBEaWdpdHMKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAg
ICAgICAgU3RyaW5nIGtleSA9IFN0cmluZzo6Zm9ybWF0KCIlZCIsIGkpOworICAgICAgICBnV2lu
ZG93c0tleU1hcC5zZXQoa2V5LCBWS18wICsgaSk7CisgICAgfQorCisgICAgLy8gU2hpZnRlZCBk
aWdpdHMKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImV4Y2xhbSIsICAgIFZLXzEpOworICAgIGdX
aW5kb3dzS2V5TWFwLnNldCgiYXQiLCAgICAgICAgVktfMik7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJudW1iZXJzaWduIiwgVktfMyk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJkb2xsYXIi
LCAgICBWS180KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInBlcmNlbnQiLCAgIFZLXzUpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXNjaWljaXJjdW0iLCBWS182KTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoImFtcGVyc2FuZCIsIFZLXzcpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
YXN0ZXJpc2siLCAgVktfOCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJwYXJlbmxlZnQiLCBW
S185KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInBhcmVucmlnaHQiLCBWS18wKTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoIm1pbnVzIiwgICAgIFZLX09FTV9NSU5VUyk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJ1bmRlcnNjb3JlIiwgVktfT0VNX01JTlVTKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoImVxdWFsIiwgICAgIFZLX09FTV9QTFVTKTsKKyAgICBnV2luZG93c0tleU1hcC5z
ZXQoInBsdXMiLCAgICAgIFZLX09FTV9QTFVTKTsKKworICAgIC8vIEZfWFgKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IFN0
cmluZzo6Zm9ybWF0KCJGJWQiLCBpKTsKKyAgICAgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KGtleSwg
VktfRjEgKyBpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckV2
YXNLZXlOYW1lKFN0cmluZyYga2V5TmFtZSkKK3sKKyAgICBpZiAoZ0tleU1hcC5pc0VtcHR5KCkp
CisgICAgICAgIGNyZWF0ZUtleU1hcCgpOworCisgICAgaWYgKGdLZXlNYXAuY29udGFpbnMoa2V5
TmFtZSkpCisgICAgICAgIHJldHVybiBnS2V5TWFwLmdldChrZXlOYW1lKTsKKworICAgIHJldHVy
biBrZXlOYW1lOworfQorCitzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUo
U3RyaW5nJiBrZXlOYW1lKQoreworICAgIGlmIChnV2luZG93c0tleU1hcC5pc0VtcHR5KCkpCisg
ICAgICAgIGNyZWF0ZVdpbmRvd3NLZXlNYXAoKTsKKworICAgIGlmIChnV2luZG93c0tleU1hcC5j
b250YWlucyhrZXlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGdXaW5kb3dzS2V5TWFwLmdldChrZXlO
YW1lKTsKKworICAgIHJldHVybiAwOworfQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudChjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBldikKKyAgICA6IG1f
dHlwZShLZXlEb3duKQorICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChl
di0+bW9kaWZpZXJzLCAiTWV0YSIpKQorICAgICwgbV9zaGlmdEtleShldmFzX2tleV9tb2RpZmll
cl9pc19zZXQoZXYtPm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBtX2N0cmxLZXkoZXZhc19r
ZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9sIikpCisgICAgLCBtX2Fs
dEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkFsdCIpKQorICAg
ICwgbV90ZXh0KFN0cmluZzo6ZnJvbVVURjgoZXYtPnN0cmluZykpCit7CisgICAgU3RyaW5nIGtl
eU5hbWUgPSBTdHJpbmcoZXYtPmtleSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRp
ZmllckZvckV2YXNLZXlOYW1lKGtleU5hbWUpOworICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2Rl
ID0gd2luZG93c0tleUNvZGVGb3JFdmFzS2V5TmFtZShrZXlOYW1lKTsKKworICAgIC8vIEZJWE1F
OgorICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKKyAgICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsKK30K
KworUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgRXZh
c19FdmVudF9LZXlfVXAqIGV2KQorICAgIDogbV90eXBlKEtleVVwKQorICAgICwgbV9tZXRhS2V5
KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiTWV0YSIpKQorICAgICwg
bV9zaGlmdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIlNoaWZ0
IikpCisgICAgLCBtX2N0cmxLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmll
cnMsICJDb250cm9sIikpCisgICAgLCBtX2FsdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQo
ZXYtPm1vZGlmaWVycywgIkFsdCIpKQorICAgICwgbV90ZXh0KFN0cmluZzo6ZnJvbVVURjgoZXYt
PnN0cmluZykpCit7CisgICAgU3RyaW5nIGtleU5hbWUgPSBTdHJpbmcoZXYtPmtleSk7CisgICAg
bV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKGtleU5hbWUpOwor
ICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JFdmFzS2V5TmFt
ZShrZXlOYW1lKTsKKworICAgIC8vIEZJWE1FOgorICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKKyAg
ICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsKK30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OmRpc2FtYmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wpCit7CisgICAgQVNTRVJU
KG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5cGUgPSB0eXBlOworCisgICAgaWYgKHR5cGUg
PT0gUmF3S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91
bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRl
bnRpZmllciA9IFN0cmluZygpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7
CisgICAgfQorfQorCitib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2Nr
U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybU1vdXNlRXZlbnRF
ZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1Nb3VzZUV2ZW50RWZsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTRlMTVhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1Nb3VzZUV2ZW50RWZsLmNwcApAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBJTmRUIC0gSW5zdGl0dXRvIE5v
a2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgPEV2
YXMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFBsYXRmb3JtTW91c2VFdmVudDo6c2V0Q2xpY2tDb3VudChFdmFzX0J1dHRvbl9G
bGFncyBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBFVkFTX0JVVFRPTl9UUklQTEVfQ0xJQ0sp
CisgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisgICAgZWxzZSBpZiAoZmxhZ3MgJiBFVkFTX0JV
VFRPTl9ET1VCTEVfQ0xJQ0spCisgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7CisgICAgZWxzZQor
ICAgICAgICBtX2NsaWNrQ291bnQgPSAxOworfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRm
b3JtTW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2LCBJbnRQb2ludCBw
b3MpCisgICAgOiBtX3RpbWVzdGFtcChjdXJyZW50VGltZSgpKQorICAgICwgbV9zaGlmdEtleShl
dmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBt
X2N0cmxLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9s
IikpCisgICAgLCBtX2FsdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVy
cywgIkFsdCIpKQorICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+
bW9kaWZpZXJzLCAiTWV0YSIpKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihJbnRQb2ludChldi0+
Y2FudmFzLngsIGV2LT5jYW52YXMueSkpCisgICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KGV2LT5j
YW52YXMueCAtIHBvcy54KCksIGV2LT5jYW52YXMueSAtIHBvcy55KCkpKQorICAgICwgbV9idXR0
b24oTW91c2VCdXR0b24oZXYtPmJ1dHRvbiAtIDEpKQorICAgICwgbV9ldmVudFR5cGUoTW91c2VF
dmVudFByZXNzZWQpCit7CisgICAgc2V0Q2xpY2tDb3VudChldi0+ZmxhZ3MpOworfQorCitQbGF0
Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNl
X1VwKiBldiwgSW50UG9pbnQgcG9zKQorICAgIDogbV90aW1lc3RhbXAoY3VycmVudFRpbWUoKSkK
KyAgICAsIG1fc2hpZnRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMs
ICJTaGlmdCIpKQorICAgICwgbV9jdHJsS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+
bW9kaWZpZXJzLCAiQ29udHJvbCIpKQorICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9kaWZpZXJf
aXNfc2V0KGV2LT5tb2RpZmllcnMsICJBbHQiKSkKKyAgICAsIG1fbWV0YUtleShldmFzX2tleV9t
b2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIk1ldGEiKSkKKyAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oSW50UG9pbnQoZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpKQorICAgICwgbV9wb3Np
dGlvbihJbnRQb2ludChldi0+Y2FudmFzLnggLSBwb3MueCgpLCBldi0+Y2FudmFzLnkgLSBwb3Mu
eSgpKSkKKyAgICAsIG1fYnV0dG9uKE1vdXNlQnV0dG9uKGV2LT5idXR0b24gLSAxKSkKKyAgICAs
IG1fZXZlbnRUeXBlKE1vdXNlRXZlbnRSZWxlYXNlZCkKK3sKKyAgICBzZXRDbGlja0NvdW50KGV2
LT5mbGFncyk7Cit9CisKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogZXYsIEludFBvaW50IHBvcykKKyAgICA6IG1fdGlt
ZXN0YW1wKGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVy
X2lzX3NldChldi0+bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tl
eV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0
S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAg
LCBtX21ldGFLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRh
IikpCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKEludFBvaW50KGV2LT5jdXIuY2FudmFzLngsIGV2
LT5jdXIuY2FudmFzLnkpKQorICAgICwgbV9wb3NpdGlvbihJbnRQb2ludChldi0+Y3VyLmNhbnZh
cy54IC0gcG9zLngoKSwgZXYtPmN1ci5jYW52YXMueSAtIHBvcy55KCkpKQorICAgICwgbV9jbGlj
a0NvdW50KDApCisgICAgLCBtX2J1dHRvbihNb3VzZUJ1dHRvbihldi0+YnV0dG9ucyAtIDEpKQor
ICAgICwgbV9ldmVudFR5cGUoTW91c2VFdmVudE1vdmVkKQoreworfQorCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjNlODcwNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1BsYXRmb3JtU2NyZWVuRWZsLmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIldpZGdldC5oIgorCisjaWZkZWYgSEFWRV9FQ09SRV9YCisjaW5jbHVkZSA8
RWNvcmVfWC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gODsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gODsKK30K
KworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgaW50IHggPSAwLCB5ID0gMCwgdyA9IDAsIGggPSAwOworCisjaWZk
ZWYgSEFWRV9FQ09SRV9YCisgICAgRWNvcmVfWF9EaXNwbGF5KiBkaXNwbGF5ID0gZWNvcmVfeF9k
aXNwbGF5X2dldCgpOworICAgIGludCBkZWYgPSBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpOworICAg
IFNjcmVlbiogc2NyZWVuID0gU2NyZWVuT2ZEaXNwbGF5KGRpc3BsYXksIGRlZik7CisgICAgeCA9
IDA7CisgICAgeSA9IDA7CisgICAgdyA9IHNjcmVlbi0+d2lkdGg7CisgICAgaCA9IHNjcmVlbi0+
aGVpZ2h0OworI2VuZGlmCisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHcsIGgpOworfQor
CitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtV2hlZWxFdmVudEVmbC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVdoZWVsRXZlbnRFZmwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjg0NGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVdoZWVsRXZlbnRFZmwuY3BwCkBAIC0wLDAg
KzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgKEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgIChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVj
bm9sb2dpYS4KKyAqICAgICAgICAgICAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgKiAgICAgICAgICAgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSB7CisgICAgVmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSAwLAorICAgIEhvcml6b250YWxTY3Jv
bGxEaXJlY3Rpb24gPSAxCit9OworCitQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxF
dmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiBldikKKyAgICA6IG1fZ3JhbnVsYXJp
dHkoU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQpCisgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCisg
ICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAi
U2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1v
ZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lz
X3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9k
aWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKEludFBvaW50KGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KSkKKyAgICAsIG1fcG9zaXRp
b24oSW50UG9pbnQoZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpKQoreworICAgIC8vIEEgbmVn
YXRpdmUgeiB2YWx1ZSBtZWFucyAoaW4gRUZMKSB0aGF0IHdlIGFyZSBzY3JvbGxpbmcgZG93biwg
c28gd2UgbmVlZAorICAgIC8vIHRvIGludmVydCB0aGUgdmFsdWUuCisgICAgaWYgKGV2LT5kaXJl
Y3Rpb24gPT0gVmVydGljYWxTY3JvbGxEaXJlY3Rpb24pIHsKKyAgICAgICAgbV9kZWx0YVggPSAw
OworICAgICAgICBtX2RlbHRhWSA9IC0gZXYtPno7CisgICAgfSBlbHNlIGlmIChldi0+ZGlyZWN0
aW9uID09IEhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24pIHsKKyAgICAgICAgbV9kZWx0YVggPSAt
IGV2LT56OworICAgICAgICBtX2RlbHRhWSA9IDA7CisgICAgfQorCisgICAgLy8gRklYTUU6IHJl
dHJpZXZlIHRoZSB1c2VyIHNldHRpbmcgZm9yIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xs
IG9uIGVhY2ggd2hlZWwgZXZlbnQKKyAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CisgICAg
bV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOworICAgIG1fZGVsdGFYICo9IHN0YXRpY19jYXN0PGZs
b2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgIG1fZGVsdGFZICo9IHN0
YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworfQorCit9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Qb3B1cE1lbnVFZmwuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvUG9wdXBNZW51RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MDA5NmMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvUG9wdXBNZW51RWZsLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bv
cHVwTWVudTo6UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1
cENsaWVudChjbGllbnQpCit7Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7Cit9CisK
K3ZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmll
dywgaW50IGluZGV4KQoreworICAgIEFTU0VSVChjbGllbnQoKSk7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBQb3B1cE1lbnU6OmhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgY2xp
ZW50KCktPnNldFRleHRGcm9tSXRlbShjbGllbnQoKS0+c2VsZWN0ZWRJbmRleCgpKTsKK30KKwor
Ym9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVu
ZGVyVGhlbWVFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNjE2N2YKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKQEAgLTAsMCAr
MSw5MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWVFZmwuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKworI2luY2x1ZGUgPEVkamUuaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVE9ETzog
Y2hhbmdlIGZyb20gb2JqZWN0IGNvdW50IHRvIGVjb3JlX2V2YXMgc2l6ZSAoYnl0ZXMpCisvLyBU
T0RPOiBhcyBvYmplY3RzIGFyZSB3ZWJwYWdlL3VzZXIgZGVmaW5lZCBhbmQgdGhleSBjYW4gYmUg
dmVyeSBsYXJnZS4KKyNkZWZpbmUgUkVOREVSX1RIRU1FX0VGTF9QQVJUX0NBQ0hFX01BWCAzMgor
Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUq
IHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAoreworICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBh
cnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7CisKKyAgICBpZiAoc3R5
bGUtPm1pbldpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldE1p
bldpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUtPm1pbkhlaWdodCgpLmlz
SW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoZGVzYy0+bWlu
LmhlaWdodCgpKTsKKworICAgIGlmIChkZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBz
dHlsZS0+bWF4V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0
TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRoKCkpOworICAgIGlmIChkZXNjLT5tYXguaGVpZ2h0KCku
dmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1heEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisg
ICAgICAgIHN0eWxlLT5zZXRNYXhIZWlnaHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKKworICAgIHN0
eWxlLT5zZXRQYWRkaW5nVG9wKGRlc2MtPnBhZGRpbmcudG9wKCkpOworICAgIHN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKGRlc2MtPnBhZGRpbmcuYm90dG9tKCkpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChkZXNjLT5wYWRkaW5nLmxlZnQoKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjp0aGVt
ZVBhcnRDYWNoZUVudHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlLCBGb3Jt
VHlwZSB0eXBlKQoreworICAgIGNvbnN0IGNoYXIgKmZpbGUsICpncm91cDsKKworICAgIEFTU0VS
VChjZSk7CisKKyAgICBlZGplX29iamVjdF9maWxlX2dldChtX2VkamUsICZmaWxlLCAwKTsKKyAg
ICBncm91cCA9IGVkamVHcm91cEZyb21Gb3JtVHlwZSh0eXBlKTsKKyAgICBBU1NFUlQoZmlsZSk7
CisgICAgQVNTRVJUKGdyb3VwKTsKKworICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQoY2Ut
Pm8sIGZpbGUsIGdyb3VwKSkgeworICAgICAgICBpbnQgZXJyID0gZWRqZV9vYmplY3RfbG9hZF9l
cnJvcl9nZXQoY2UtPm8pOworICAgICAgICBjb25zdCBjaGFyICplcnJtc2cgPSBlZGplX2xvYWRf
ZXJyb3Jfc3RyKGVycik7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGxvYWQgJyVz
JyBmcm9tIHRoZW1lICVzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBncm91cCwgZmlsZSwg
ZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6dGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVh
dGUoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlKQoreworICAgIGludCB3LCBoOworICAg
IGNhaXJvX3N0YXR1c190IHN0YXR1czsKKworICAgIEFTU0VSVChjZSk7CisgICAgQVNTRVJUKGNl
LT5lZSk7CisKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChjZS0+ZWUsIDAsIDAsICZ3LCAm
aCk7CisgICAgQVNTRVJUKHcgPiAwKTsKKyAgICBBU1NFUlQoaCA+IDApOworCisgICAgY2UtPnN1
cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgodW5zaWduZWQgY2hh
ciAqKWVjb3JlX2V2YXNfYnVmZmVyX3BpeGVsc19nZXQoY2UtPmVlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdC
MzIsIHcsIGgsIHcgKiA0KTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyhjZS0+
c3VyZmFjZSk7CisgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAor
ICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBh
bGxvY2F0ZSBhIG5ldyBlbnRyeSBhbmQgZmlsbCBpdCB3aXRoIGVkamUgZ3JvdXAKK3N0cnVjdCBS
ZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhlbWVFZmw6OmNhY2hl
VGhlbWVQYXJ0TmV3KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
c3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmNlID0gbmV3IHN0cnVjdCBUaGVtZVBhcnRDYWNo
ZUVudHJ5OworCisgICAgaWYgKCFjZSkgeworICAgICAgICBFSU5BX0xPR19FUlIoImNvdWxkIG5v
dCBhbGxvY2F0ZSBUaGVtZVBhcnRDYWNoZUVudHJ5LiIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBjZS0+ZWUgPSBlY29yZV9ldmFzX2J1ZmZlcl9uZXcoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKKyAgICBpZiAoIWNlLT5lZSkgeworICAgICAgICBFSU5BX0xPR19FUlIo
ImVjb3JlX2V2YXNfYnVmZmVyX25ldyglZCwgJWQpIGZhaWxlZC4iLAorICAgICAgICAgICAgICAg
ICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgZGVsZXRlIGNlOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjZS0+byA9IGVkamVfb2JqZWN0X2FkZChl
Y29yZV9ldmFzX2dldChjZS0+ZWUpKTsKKyAgICBBU1NFUlQoY2UtPm8pOworICAgIGlmICghdGhl
bWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KGNlLCB0eXBlKSkgeworICAgICAgICBldmFzX29iamVjdF9k
ZWwoY2UtPm8pOworICAgICAgICBlY29yZV9ldmFzX2ZyZWUoY2UtPmVlKTsKKyAgICAgICAgZGVs
ZXRlIGNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIXRoZW1lUGFydENh
Y2hlRW50cnlTdXJmYWNlQ3JlYXRlKGNlKSkgeworICAgICAgICBldmFzX29iamVjdF9kZWwoY2Ut
Pm8pOworICAgICAgICBlY29yZV9ldmFzX2ZyZWUoY2UtPmVlKTsKKyAgICAgICAgZGVsZXRlIGNl
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBldmFzX29iamVjdF9yZXNpemUoY2Ut
Pm8sIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhj
ZS0+byk7CisKKyAgICBjZS0+dHlwZSA9IHR5cGU7CisgICAgY2UtPnNpemUgPSBzaXplOworCisg
ICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChjZSk7CisgICAgcmV0dXJuIGNlOworfQorCisvLyBqdXN0
IGNoYW5nZSB0aGUgZWRqZSBncm91cCBhbmQgcmV0dXJuIHRoZSBzYW1lIGVudHJ5CitzdHJ1Y3Qg
UmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNo
ZVRoZW1lUGFydFJlc2V0KEZvcm1UeXBlIHR5cGUsIHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhl
bWVQYXJ0Q2FjaGVFbnRyeSogY2UpCit7CisgICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5UmVz
ZXQoY2UsIHR5cGUpKSB7CisgICAgICAgIGNlLT50eXBlID0gRm9ybVR5cGVMYXN0OyAvLyBpbnZh
bGlkYXRlCisgICAgICAgIG1fcGFydENhY2hlLmFwcGVuZChjZSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBjZS0+dHlwZSA9IHR5cGU7CisgICAgbV9wYXJ0Q2FjaGUucHJlcGVuZChj
ZSk7CisgICAgcmV0dXJuIGNlOworfQorCisvLyByZXNpemUgZW50cnkgYW5kIHJlc2V0IGl0Citz
dHJ1Y3QgUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZs
OjpjYWNoZVRoZW1lUGFydFJlc2l6ZUFuZFJlc2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNp
emUmIHNpemUsIHN0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2Up
Cit7CisgICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goY2UtPnN1cmZhY2UpOworICAgIGVjb3JlX2V2
YXNfcmVzaXplKGNlLT5lZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBldmFz
X29iamVjdF9yZXNpemUoY2UtPm8sIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICBpZiAoIXRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNlQ3JlYXRlKGNlKSkgeworICAgICAgICBl
dmFzX29iamVjdF9kZWwoY2UtPm8pOworICAgICAgICBlY29yZV9ldmFzX2ZyZWUoY2UtPmVlKTsK
KyAgICAgICAgZGVsZXRlIGNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gY2FjaGVUaGVtZVBhcnRSZXNldCh0eXBlLCBjZSk7Cit9CisKKy8vIGdlbmVyYWwgcHVycG9z
ZSBnZXQgKHdpbGwgY3JlYXRlLCByZXVzZSBhbmQgYWxsKQorc3RydWN0IFJlbmRlclRoZW1lRWZs
OjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVtZUVmbDo6Y2FjaGVUaGVtZVBhcnRHZXQo
Rm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBWZWN0b3I8c3RydWN0
IFRoZW1lUGFydENhY2hlRW50cnkgKj46Oml0ZXJhdG9yIGl0ciwgZW5kOworICAgIHN0cnVjdCBU
aGVtZVBhcnRDYWNoZUVudHJ5ICpjZV9sYXN0X3NpemUgPSAwOworICAgIGludCBpLCBpZHhMYXN0
U2l6ZSA9IC0xOworCisgICAgaXRyID0gbV9wYXJ0Q2FjaGUuYmVnaW4oKTsKKyAgICBlbmQgPSBt
X3BhcnRDYWNoZS5lbmQoKTsKKyAgICBmb3IgKGkgPSAwOyBpdHIgIT0gZW5kOyBpKyssIGl0cisr
KSB7CisgICAgICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICpjZSA9ICppdHI7CisgICAg
ICAgIGlmIChjZS0+c2l6ZSA9PSBzaXplKSB7CisgICAgICAgICAgICBpZiAoY2UtPnR5cGUgPT0g
dHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2U7CisgICAgICAgICAgICBjZV9sYXN0X3Np
emUgPSBjZTsKKyAgICAgICAgICAgIGlkeExhc3RTaXplID0gaTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChtX3BhcnRDYWNoZS5zaXplKCkgPCBSRU5ERVJfVEhFTUVfRUZMX1BBUlRfQ0FD
SEVfTUFYKQorICAgICAgICByZXR1cm4gY2FjaGVUaGVtZVBhcnROZXcodHlwZSwgc2l6ZSk7CisK
KyAgICBpZiAoY2VfbGFzdF9zaXplICYmIGNlX2xhc3Rfc2l6ZSAhPSBtX3BhcnRDYWNoZS5maXJz
dCgpKSB7CisgICAgICAgIG1fcGFydENhY2hlLnJlbW92ZShpZHhMYXN0U2l6ZSk7CisgICAgICAg
IHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGNlX2xhc3Rfc2l6ZSk7CisgICAgfQor
CisgICAgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2UgPSBtX3BhcnRDYWNoZS5sYXN0KCk7CisgICAg
bV9wYXJ0Q2FjaGUucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2l6
ZUFuZFJlc2V0KHR5cGUsIHNpemUsIGNlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6Y2Fj
aGVUaGVtZVBhcnRGbHVzaCgpCit7CisgICAgVmVjdG9yPHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVu
dHJ5ICo+OjppdGVyYXRvciBpdHIsIGVuZDsKKworICAgIGl0ciA9IG1fcGFydENhY2hlLmJlZ2lu
KCk7CisgICAgZW5kID0gbV9wYXJ0Q2FjaGUuZW5kKCk7CisgICAgZm9yICg7IGl0ciAhPSBlbmQ7
IGl0cisrKSB7CisgICAgICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICpjZSA9ICppdHI7
CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKGNlLT5zdXJmYWNlKTsKKyAgICAgICAgZXZh
c19vYmplY3RfZGVsKGNlLT5vKTsKKyAgICAgICAgZWNvcmVfZXZhc19mcmVlKGNlLT5lZSk7Cisg
ICAgICAgIGRlbGV0ZSBjZTsKKyAgICB9CisgICAgbV9wYXJ0Q2FjaGUuY2xlYXIoKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplU3RhdGVGcm9tRm9ybShFdmFzX09iamVjdCog
bywgQ29udHJvbFN0YXRlcyBzdGF0ZXMpCit7CisgICAgY29uc3QgY2hhciAqc2lnbmFsc1tdID0g
eyAvLyBrZWVwIGluIHN5bmMgd2l0aCBXZWJDb3JlL3BsYXRmb3JtL1RoZW1lVHlwZXMuaAorICAg
ICAgICAiaG92ZXJlZCIsCisgICAgICAgICJwcmVzc2VkIiwKKyAgICAgICAgImZvY3VzZWQiLAor
ICAgICAgICAiZW5hYmxlZCIsCisgICAgICAgICJjaGVja2VkIiwKKyAgICAgICAgInJlYWQtb25s
eSIsCisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgIndpbmRvdy1pbmFjdGl2ZSIsCisgICAg
ICAgICJpbmRldGVybWluYXRlIgorICAgIH07CisgICAgc2l6ZV90IGksIGxhc3QgPSBzaXplb2Yo
c2lnbmFscykgLyBzaXplb2Yoc2lnbmFsc1swXSk7CisKKyAgICBlZGplX29iamVjdF9zaWduYWxf
ZW1pdChvLCAicmVzZXQiLCAiIik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7
CisgICAgICAgIGlmIChzdGF0ZXMgJiAoMSA8PCBpKSkKKyAgICAgICAgICAgIGVkamVfb2JqZWN0
X3NpZ25hbF9lbWl0KG8sIHNpZ25hbHNbaV0sICIiKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KFJlbmRlck9iamVjdCogbywgRm9ybVR5cGUgdHlwZSwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlOworICAgIEVpbmFfTGlzdCogdXBk
YXRlczsKKyAgICBjYWlyb190KiBjYWlybzsKKworICAgIEFTU0VSVChtX2NhbnZhcyk7CisgICAg
QVNTRVJUKG1fZWRqZSk7CisKKyAgICBjZSA9IGNhY2hlVGhlbWVQYXJ0R2V0KHR5cGUsIHJlY3Qu
c2l6ZSgpKTsKKyAgICBBU1NFUlQoY2UpOworICAgIGlmICghY2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGFwcGx5RWRqZVN0YXRlRnJvbUZvcm0oY2UtPm8sIGNvbnRyb2xTdGF0ZXNG
b3JSZW5kZXJlcihvKSk7CisKKyAgICBjYWlybyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisgICAgQVNTRVJUKGNhaXJvKTsKKworICAgIGVkamVfb2JqZWN0X2NhbGNfZm9yY2UoY2Ut
Pm8pOworICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2lnbmFsX3Byb2Nlc3MoY2UtPm8pOworICAg
IHVwZGF0ZXMgPSBldmFzX3JlbmRlcl91cGRhdGVzKGVjb3JlX2V2YXNfZ2V0KGNlLT5lZSkpOwor
ICAgIGV2YXNfcmVuZGVyX3VwZGF0ZXNfZnJlZSh1cGRhdGVzKTsKKworICAgIGNhaXJvX3NhdmUo
Y2Fpcm8pOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjYWlybywgY2UtPnN1cmZhY2Us
IHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjYWlybywg
MS4wKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhaXJvKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVFZmw6OmNyZWF0ZShQYWdlKiBw
YWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVFZmwocGFnZSkpOwor
fQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBh
Z2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZUVm
bDo6Y3JlYXRlKHBhZ2UpOworCisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJl
bmRlclRoZW1lRWZsOjpjcmVhdGUoMCkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBmYWxsYmFj
azsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VsZWN0aW9uQWN0
aXZlKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzaWduYWwsIGNvbnN0
IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqIHRo
YXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwgKj4oZGF0YSk7
CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYTsKKworICAgIGlmICghZWRq
ZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAm
YnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICB0
aGF0LT5zZXRBY3RpdmVTZWxlY3Rpb25Db2xvcihmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwg
YmEpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NTZWxlY3Rpb25J
bmFjdGl2ZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBj
b25zdCBjaGFyKiBzb3VyY2UpCit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZs
KiB0aGF0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsICo+KGRh
dGEpOworICAgIGludCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisKKyAgICBpZiAo
IWVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldChvLCBzb3VyY2UsICZmciwgJmZnLCAmZmIsICZm
YSwgJmJyLCAmYmcsICZiYiwgJmJhLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhhdC0+c2V0SW5hY3RpdmVTZWxlY3Rpb25Db2xvcihmciwgZmcsIGZiLCBmYSwgYnIsIGJn
LCBiYiwgYmEpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NGb2N1
c1Jpbmcodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29u
c3QgY2hhciogc291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCog
dGhhdCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCAqPihkYXRh
KTsKKyAgICBpbnQgZnIsIGZnLCBmYiwgZmE7CisgICAgCisgICAgaWYgKCFlZGplX29iamVjdF9j
b2xvcl9jbGFzc19nZXQobywgc291cmNlLCAmZnIsICZmZywgJmZiLCAmZmEsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGF0LT5zZXRGb2N1c1JpbmdD
b2xvcihmciwgZmcsIGZiLCBmYSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29s
b3JDbGFzc0J1dHRvblRleHQodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHNpZ25hbCwgY29uc3QgY2hhciogc291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5k
ZXJUaGVtZUVmbCogdGhhdCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVt
ZUVmbCAqPihkYXRhKTsKKyAgICBpbnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOwor
ICAgIAorICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZy
LCAmZmcsICZmYiwgJmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAgICAg
ICByZXR1cm47CisKKyAgICB0aGF0LT5zZXRCdXR0b25UZXh0Q29sb3IoZnIsIGZnLCBmYiwgZmEs
IGJyLCBiZywgYmIsIGJhKTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xvckNs
YXNzQ29tYm9UZXh0KHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzaWdu
YWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhl
bWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwg
Kj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYTsKKyAgICAK
KyAgICBpZiAoIWVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldChvLCBzb3VyY2UsICZmciwgJmZn
LCAmZmIsICZmYSwgJmJyLCAmYmcsICZiYiwgJmJhLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgdGhhdC0+c2V0Q29tYm9UZXh0Q29sb3IoZnIsIGZnLCBmYiwgZmEsIGJyLCBi
ZywgYmIsIGJhKTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzRW50
cnlUZXh0KHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzaWduYWwsIGNv
bnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwq
IHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwgKj4oZGF0
YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYTsKKyAgICAKKyAgICBp
ZiAoIWVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldChvLCBzb3VyY2UsICZmciwgJmZnLCAmZmIs
ICZmYSwgJmJyLCAmYmcsICZiYiwgJmJhLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdGhhdC0+c2V0RW50cnlUZXh0Q29sb3IoZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIs
IGJhKTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VhcmNoVGV4
dCh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBj
aGFyKiBzb3VyY2UpCit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKiB0aGF0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsICo+KGRhdGEpOwor
ICAgIGludCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisgICAgaWYgKCFlZGplX29i
amVjdF9jb2xvcl9jbGFzc19nZXQobywgc291cmNlLCAmZnIsICZmZywgJmZiLCAmZmEsICZiciwg
JmJnLCAmYmIsICZiYSwgMCwgMCwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRoYXQt
PnNldFNlYXJjaFRleHRDb2xvcihmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmEpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lRWZsOjpjcmVhdGVDYW52YXMoKQoreworICAgIEFTU0VSVCghbV9j
YW52YXMpOworICAgIG1fY2FudmFzID0gZWNvcmVfZXZhc19idWZmZXJfbmV3KDEsIDEpOworICAg
IEFTU0VSVChtX2NhbnZhcyk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmNyZWF0ZUVkamUo
KQoreworICAgIEFTU0VSVCghbV9lZGplKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UgPyBt
X3BhZ2UtPm1haW5GcmFtZSgpIDogMDsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZSA/IGZy
YW1lLT52aWV3KCkgOiAwOworICAgIFN0cmluZyB0aGVtZSA9IHZpZXcgPyB2aWV3LT5lZGplVGhl
bWVSZWN1cnNpdmUoKSA6ICIiOworICAgIGlmICh0aGVtZS5pc0VtcHR5KCkpCisgICAgICAgIEVJ
TkFfTE9HX0VSUigiTm8gdGhlbWUgZGVmaW5lZCwgdW5hYmxlIHRvIHNldCBSZW5kZXJUaGVtZUVm
bC4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9lZGplID0gZWRqZV9vYmplY3RfYWRkKGVjb3Jl
X2V2YXNfZ2V0KG1fY2FudmFzKSk7CisgICAgICAgIGlmICghbV9lZGplKQorICAgICAgICAgICAg
RUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGJhc2UgZWRqZSBvYmplY3QuIik7CisgICAg
ICAgIGVsc2UgaWYgKCFlZGplX29iamVjdF9maWxlX3NldChtX2VkamUsIHRoZW1lLnV0ZjgoKS5k
YXRhKCksICJ3ZWJraXQvYmFzZSIpKSB7CisgICAgICAgICAgICBpbnQgZXJyID0gZWRqZV9vYmpl
Y3RfbG9hZF9lcnJvcl9nZXQobV9lZGplKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm1z
ZyA9IGVkamVfbG9hZF9lcnJvcl9zdHIoZXJyKTsKKyAgICAgICAgICAgIEVJTkFfTE9HX0VSUigi
Q291bGQgbm90IGxvYWQgJ3dlYmtpdC9iYXNlJyBmcm9tIHRoZW1lICVzOiAlcyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlbWUudXRmOCgpLmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChtX2VkamUpOworICAgICAgICAgICAgbV9lZGplID0gMDsKKyAg
ICAgICAgfSBlbHNlIHsKKyNkZWZpbmUgQ09OTkVDVChjYywgZnVuYykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVkamVfb2JqZWN0
X3NpZ25hbF9jYWxsYmFja19hZGQobV9lZGplLCAiY29sb3JfY2xhc3Msc2V0IiwgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdC8iY2MsIGZ1bmMs
IHRoaXMpCisKKyAgICAgICAgICAgIENPTk5FQ1QoInNlbGVjdGlvbi9hY3RpdmUiLAorICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NTZWxlY3Rpb25BY3RpdmUpOwor
ICAgICAgICAgICAgQ09OTkVDVCgic2VsZWN0aW9uL2luYWN0aXZlIiwKKyAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VsZWN0aW9uSW5hY3RpdmUpOworICAgICAg
ICAgICAgQ09OTkVDVCgiZm9jdXNfcmluZyIsIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0ZvY3Vz
UmluZyk7CisgICAgICAgICAgICBDT05ORUNUKCJidXR0b24vdGV4dCIsIHJlbmRlclRoZW1lRWZs
Q29sb3JDbGFzc0J1dHRvblRleHQpOworICAgICAgICAgICAgQ09OTkVDVCgiY29tYm8vdGV4dCIs
IHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0NvbWJvVGV4dCk7CisgICAgICAgICAgICBDT05ORUNU
KCJlbnRyeS90ZXh0IiwgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzRW50cnlUZXh0KTsKKyAgICAg
ICAgICAgIENPTk5FQ1QoInNlYXJjaC90ZXh0IiwgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2Vh
cmNoVGV4dCk7CisjdW5kZWYgQ09OTkVDVAorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCht
X2VkamUpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVDb2xvcnMoKQorewor
ICAgIGludCBmciwgZmcsIGZiLCBmYSwgYnIsIGJnLCBiYiwgYmE7CisgICAgQVNTRVJUKG1fZWRq
ZSk7CisjZGVmaW5lIENPTE9SX0dFVChjbHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG1f
ZWRqZSwgIndlYmtpdC8iY2xzLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZmciwgJmZnLCAmZmIsICZmYSwgJmJyLCAmYmcsICZiYiwgJmJhLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDApCisKKyAgICBpZiAo
Q09MT1JfR0VUKCJzZWxlY3Rpb24vYWN0aXZlIikpIHsKKyAgICAgICAgbV9hY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIG1fYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gQ29sb3IoYnIsIGJnLCBiYiwgYmEpOworICAg
IH0KKyAgICBpZiAoQ09MT1JfR0VUKCJzZWxlY3Rpb24vaW5hY3RpdmUiKSkgeworICAgICAgICBt
X2luYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZnIsIGZnLCBmYiwgZmEp
OworICAgICAgICBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gQ29sb3IoYnIs
IGJnLCBiYiwgYmEpOworICAgIH0KKyAgICBpZiAoQ09MT1JfR0VUKCJmb2N1c19yaW5nIikpIHsK
KyAgICAgICAgbV9mb2N1c1JpbmdDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKKyAgICAg
ICAgLy8gd2Via2l0IGp1c3QgdXNlIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBmb3IgZGVmYXVs
dCB0aGVtZSAod2l0aG91dCBwYWdlKQorICAgICAgICAvLyB0aGlzIGlzIHVnbHksIGJ1dCBubyBv
dGhlciB3YXkgdG8gZG8gaXQgdW5sZXNzIHdlIGNoYW5nZQorICAgICAgICAvLyBpdCB0byB1c2Ug
cGFnZSB0aGVtZXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgUmVuZGVyVGhlbWU6OnNl
dEN1c3RvbUZvY3VzUmluZ0NvbG9yKG1fZm9jdXNSaW5nQ29sb3IpOworICAgIH0KKyAgICBpZiAo
Q09MT1JfR0VUKCJidXR0b24vdGV4dCIpKSB7CisgICAgICAgIG1fYnV0dG9uVGV4dEZvcmVncm91
bmRDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKKyAgICAgICAgbV9idXR0b25UZXh0QmFj
a2dyb3VuZENvbG9yID0gQ29sb3IoYnIsIGJnLCBiYiwgYmEpOworICAgIH0KKyAgICBpZiAoQ09M
T1JfR0VUKCJjb21iby90ZXh0IikpIHsKKyAgICAgICAgbV9jb21ib1RleHRGb3JlZ3JvdW5kQ29s
b3IgPSBDb2xvcihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIG1fY29tYm9UZXh0QmFja2dyb3Vu
ZENvbG9yID0gQ29sb3IoYnIsIGJnLCBiYiwgYmEpOworICAgIH0KKyAgICBpZiAoQ09MT1JfR0VU
KCJlbnRyeS90ZXh0IikpIHsKKyAgICAgICAgbV9lbnRyeVRleHRGb3JlZ3JvdW5kQ29sb3IgPSBD
b2xvcihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIG1fZW50cnlUZXh0QmFja2dyb3VuZENvbG9y
ID0gQ29sb3IoYnIsIGJnLCBiYiwgYmEpOworICAgIH0KKyAgICBpZiAoQ09MT1JfR0VUKCJzZWFy
Y2gvdGV4dCIpKSB7CisgICAgICAgIG1fc2VhcmNoVGV4dEZvcmVncm91bmRDb2xvciA9IENvbG9y
KGZyLCBmZywgZmIsIGZhKTsKKyAgICAgICAgbV9zZWFyY2hUZXh0QmFja2dyb3VuZENvbG9yID0g
Q29sb3IoYnIsIGJnLCBiYiwgYmEpOworICAgIH0KKyN1bmRlZiBDT0xPUl9HRVQKKyAgICBwbGF0
Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBh
cnREZXNjcmlwdGlvbkZhbGxiYWNrKHN0cnVjdCBUaGVtZVBhcnREZXNjKiBkZXNjKQoreworICAg
IGRlc2MtPm1pbi5zZXRXaWR0aChMZW5ndGgoMCwgRml4ZWQpKTsKKyAgICBkZXNjLT5taW4uc2V0
SGVpZ2h0KExlbmd0aCgwLCBGaXhlZCkpOworCisgICAgZGVzYy0+bWF4LnNldFdpZHRoKExlbmd0
aCgwLCBGaXhlZCkpOworICAgIGRlc2MtPm1heC5zZXRIZWlnaHQoTGVuZ3RoKDAsIEZpeGVkKSk7
CisKKyAgICBkZXNjLT5wYWRkaW5nID0gTGVuZ3RoQm94KDAsIDAsIDAsIDApOworfQorCit2b2lk
IFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvbihFdmFzX09iamVjdCogbywgc3Ry
dWN0IFRoZW1lUGFydERlc2MqIGRlc2MpCit7CisgICAgRXZhc19Db29yZCBtaW53LCBtaW5oLCBt
YXh3LCBtYXhoOworCisgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fZ2V0KG8sICZtaW53LCAmbWlu
aCk7CisgICAgaWYgKCFtaW53ICYmICFtaW5oKQorICAgICAgICBlZGplX29iamVjdF9zaXplX21p
bl9jYWxjKG8sICZtaW53LCAmbWluaCk7CisKKyAgICBkZXNjLT5taW4uc2V0V2lkdGgoTGVuZ3Ro
KG1pbncsIEZpeGVkKSk7CisgICAgZGVzYy0+bWluLnNldEhlaWdodChMZW5ndGgobWluaCwgRml4
ZWQpKTsKKworICAgIGVkamVfb2JqZWN0X3NpemVfbWF4X2dldChvLCAmbWF4dywgJm1heGgpOwor
ICAgIGRlc2MtPm1heC5zZXRXaWR0aChMZW5ndGgobWF4dywgRml4ZWQpKTsKKyAgICBkZXNjLT5t
YXguc2V0SGVpZ2h0KExlbmd0aChtYXhoLCBGaXhlZCkpOworCisgICAgaWYgKCFlZGplX29iamVj
dF9wYXJ0X2V4aXN0cyhvLCAidGV4dF9jb25maW5lbWVudCIpKQorICAgICAgICBkZXNjLT5wYWRk
aW5nID0gTGVuZ3RoQm94KDAsIDAsIDAsIDApOworICAgIGVsc2UgeworICAgICAgICBFdmFzX0Nv
b3JkIHB4LCBweSwgcHcsIHBoOworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gMCwgb3kgPSAwLCBv
dyA9IDAsIG9oID0gMDsKKyAgICAgICAgaW50IHQsIHIsIGIsIGw7CisKKyAgICAgICAgaWYgKG1p
bncgPiAwKQorICAgICAgICAgICAgb3cgPSBtaW53OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdyA9IDEwMDsKKyAgICAgICAgaWYgKG1pbmggPiAwKQorICAgICAgICAgICAgb2ggPSBtaW5o
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvaCA9IDEwMDsKKyAgICAgICAgaWYgKG1heHcg
PiAwICYmIG93ID4gbWF4dykKKyAgICAgICAgICAgIG93ID0gbWF4dzsKKyAgICAgICAgaWYgKG1h
eGggPiAwICYmIG9oID4gbWF4aCkKKyAgICAgICAgICAgIG9oID0gbWF4aDsKKworICAgICAgICBl
dmFzX29iamVjdF9tb3ZlKG8sIG94LCBveSk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShv
LCBvdywgb2gpOworICAgICAgICBlZGplX29iamVjdF9jYWxjX2ZvcmNlKG8pOworICAgICAgICBl
ZGplX29iamVjdF9tZXNzYWdlX3NpZ25hbF9wcm9jZXNzKG8pOworICAgICAgICBlZGplX29iamVj
dF9wYXJ0X2dlb21ldHJ5X2dldChvLCAidGV4dF9jb25maW5lbWVudCIsICZweCwgJnB5LCAmcHcs
ICZwaCk7CisKKyAgICAgICAgdCA9IHB5IC0gb3k7CisgICAgICAgIGIgPSAob2ggKyBveSkgLSAo
cGggKyBweSk7CisKKyAgICAgICAgbCA9IHB4IC0gb3g7CisgICAgICAgIHIgPSAob3cgKyBveCkg
LSAocHcgKyBweCk7CisKKyAgICAgICAgZGVzYy0+cGFkZGluZyA9IExlbmd0aEJveCh0LCByLCBi
LCBsKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIFJlbmRlclRoZW1lRWZsOjplZGplR3JvdXBG
cm9tRm9ybVR5cGUoRm9ybVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogZ3JvdXBzW10gPSB7CisjZGVmaW5lIFcobikgIndlYmtpdC93aWRnZXQvIm4KKyAgICAgICAg
VygiYnV0dG9uIiksCisgICAgICAgIFcoInJhZGlvIiksCisgICAgICAgIFcoImVudHJ5IiksCisg
ICAgICAgIFcoImNoZWNrYm94IiksCisgICAgICAgIFcoImNvbWJvIiksCisgICAgICAgIFcoInNl
YXJjaC9maWVsZCIpLAorICAgICAgICBXKCJzZWFyY2gvZGVjb3JhdGlvbiIpLAorICAgICAgICBX
KCJzZWFyY2gvcmVzdWx0c19idXR0b24iKSwKKyAgICAgICAgVygic2VhcmNoL3Jlc3VsdHNfZGVj
b3JhdGlvbiIpLAorICAgICAgICBXKCJzZWFyY2gvY2FuY2VsX2J1dHRvbiIpLAorI3VuZGVmIFcK
KyAgICAgICAgMAorICAgIH07CisgICAgQVNTRVJUKHR5cGUgPj0gMCk7CisgICAgQVNTRVJUKChz
aXplX3QpdHlwZSA8IHNpemVvZihncm91cHMpIC8gc2l6ZW9mKGdyb3Vwc1swXSkpOyAvLyBvdXQg
b2Ygc3luYz8KKyAgICByZXR1cm4gZ3JvdXBzW3R5cGVdOworfQorCit2b2lkIFJlbmRlclRoZW1l
RWZsOjphcHBseVBhcnREZXNjcmlwdGlvbnMoKQoreworICAgIEV2YXNfT2JqZWN0KiBvOworICAg
IHVuc2lnbmVkIGludCBpOworICAgIGNvbnN0IGNoYXIqIGZpbGU7CisKKyAgICBBU1NFUlQobV9j
YW52YXMpOworICAgIEFTU0VSVChtX2VkamUpOworCisgICAgZWRqZV9vYmplY3RfZmlsZV9nZXQo
bV9lZGplLCAmZmlsZSwgMCk7CisgICAgQVNTRVJUKGZpbGUpOworCisgICAgbyA9IGVkamVfb2Jq
ZWN0X2FkZChlY29yZV9ldmFzX2dldChtX2NhbnZhcykpOworICAgIGlmICghbykgeworICAgICAg
ICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBjcmVhdGUgRWRqZSBvYmplY3QuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRm9ybVR5cGVMYXN0OyBpKysp
IHsKKyAgICAgICAgRm9ybVR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEZvcm1UeXBlPihpKTsKKyAg
ICAgICAgY29uc3QgY2hhciogZ3JvdXAgPSBlZGplR3JvdXBGcm9tRm9ybVR5cGUodHlwZSk7Cisg
ICAgICAgIG1fcGFydERlc2NzW2ldLnR5cGUgPSB0eXBlOworICAgICAgICBpZiAoIWVkamVfb2Jq
ZWN0X2ZpbGVfc2V0KG8sIGZpbGUsIGdyb3VwKSkgeworICAgICAgICAgICAgaW50IGVyciA9IGVk
amVfb2JqZWN0X2xvYWRfZXJyb3JfZ2V0KG8pOworICAgICAgICAgICAgY29uc3QgY2hhciogZXJy
bXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOworICAgICAgICAgICAgRUlOQV9MT0dfRVJS
KCJDb3VsZCBub3Qgc2V0IHRoZW1lIGdyb3VwICclcycgb2YgZmlsZSAnJXMnOiAlcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXAsIGZpbGUsIGVycm1zZyk7CisKKyAgICAgICAgICAg
IGFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2sobV9wYXJ0RGVzY3MgKyBpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBhcHBseVBhcnREZXNjcmlwdGlvbihvLCBtX3BhcnREZXNjcyAr
IGkpOworICAgIH0KKyAgICBldmFzX29iamVjdF9kZWwobyk7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgY2FjaGVUaGVtZVBhcnRGbHVzaCgpOworCisg
ICAgaWYgKCFtX2NhbnZhcykgeworICAgICAgICBjcmVhdGVDYW52YXMoKTsKKyAgICAgICAgaWYg
KCFtX2NhbnZhcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZWRq
ZSkgeworICAgICAgICBjcmVhdGVFZGplKCk7CisgICAgICAgIGlmICghbV9lZGplKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5RWRqZUNvbG9ycygpOworICAgIGFwcGx5
UGFydERlc2NyaXB0aW9ucygpOworfQorCitSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwo
UGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lKCkKKyAgICAsIG1fcGFnZShwYWdlKQorICAg
ICwgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMjU1KQorICAgICwgbV9h
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoMjU1LCAyNTUsIDI1NSkKKyAgICAsIG1faW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMTI4KQorICAgICwgbV9pbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigyMDAsIDIwMCwgMjAwKQorICAgICwgbV9mb2N1c1Jp
bmdDb2xvcigzMiwgMzIsIDIyNCwgMjI0KQorICAgICwgbV9idXR0b25UZXh0QmFja2dyb3VuZENv
bG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2J1dHRvblRleHRGb3JlZ3JvdW5kQ29sb3IoMCwgMCwg
MCkKKyAgICAsIG1fY29tYm9UZXh0QmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBt
X2NvbWJvVGV4dEZvcmVncm91bmRDb2xvcigwLCAwLCAwKQorICAgICwgbV9lbnRyeVRleHRCYWNr
Z3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKKyAgICAsIG1fZW50cnlUZXh0Rm9yZWdyb3VuZENvbG9y
KDAsIDAsIDApCisgICAgLCBtX3NlYXJjaFRleHRCYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkK
KyAgICAsIG1fc2VhcmNoVGV4dEZvcmVncm91bmRDb2xvcigwLCAwLCAwKQorICAgICwgbV9jYW52
YXMoMCkKKyAgICAsIG1fZWRqZSgwKQoreworICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFt
ZSgpICYmIHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpCisgICAgICAgIHRoZW1lQ2hhbmdlZCgp
OworfQorCitSZW5kZXJUaGVtZUVmbDo6flJlbmRlclRoZW1lRWZsKCkKK3sKKyAgICBjYWNoZVRo
ZW1lUGFydEZsdXNoKCk7CisKKyAgICBpZiAobV9jYW52YXMpIHsKKyAgICAgICAgaWYgKG1fZWRq
ZSkKKyAgICAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChtX2VkamUpOworICAgICAgICBlY29yZV9l
dmFzX2ZyZWUobV9jYW52YXMpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0
QWN0aXZlU2VsZWN0aW9uQ29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50
IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCit7Cisg
ICAgbV9hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3JlUiwgZm9yZUcs
IGZvcmVCLCBmb3JlQSk7CisgICAgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBD
b2xvcihiYWNrUiwgYmFja0csIGJhY2tCLCBiYWNrQSk7CisgICAgcGxhdGZvcm1Db2xvcnNEaWRD
aGFuZ2UoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0SW5hY3RpdmVTZWxlY3Rpb25D
b2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNr
UiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSkKK3sKKyAgICBtX2luYWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZm9yZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEp
OworICAgIG1faW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiYWNrUiwg
YmFja0csIGJhY2tCLCBiYWNrQSk7CisgICAgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0Rm9jdXNSaW5nQ29sb3IoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpCit7CisgICAgbV9mb2N1c1JpbmdDb2xvciA9IENvbG9yKHIsIGcsIGIsIGEp
OworICAgIC8vIHdlYmtpdCBqdXN0IHVzZSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkgZm9yIGRl
ZmF1bHQgdGhlbWUgKHdpdGhvdXQgcGFnZSkKKyAgICAvLyB0aGlzIGlzIHVnbHksIGJ1dCBubyBv
dGhlciB3YXkgdG8gZG8gaXQgdW5sZXNzIHdlIGNoYW5nZQorICAgIC8vIGl0IHRvIHVzZSBwYWdl
IHRoZW1lcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgIFJlbmRlclRoZW1lOjpzZXRDdXN0b21G
b2N1c1JpbmdDb2xvcihtX2ZvY3VzUmluZ0NvbG9yKTsKKyAgICBwbGF0Zm9ybUNvbG9yc0RpZENo
YW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRCdXR0b25UZXh0Q29sb3IoaW50
IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBi
YWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCit7CisgICAgbV9idXR0b25UZXh0Rm9yZWdyb3Vu
ZENvbG9yID0gQ29sb3IoZm9yZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEpOworICAgIG1fYnV0dG9u
VGV4dEJhY2tncm91bmRDb2xvciA9IENvbG9yKGJhY2tSLCBiYWNrRywgYmFja0IsIGJhY2tBKTsK
KyAgICBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZs
OjpzZXRDb21ib1RleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQg
Zm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSkKK3sKKyAg
ICBtX2NvbWJvVGV4dEZvcmVncm91bmRDb2xvciA9IENvbG9yKGZvcmVSLCBmb3JlRywgZm9yZUIs
IGZvcmVBKTsKKyAgICBtX2NvbWJvVGV4dEJhY2tncm91bmRDb2xvciA9IENvbG9yKGJhY2tSLCBi
YWNrRywgYmFja0IsIGJhY2tBKTsKKyAgICBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRFbnRyeVRleHRDb2xvcihpbnQgZm9yZVIsIGludCBm
b3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFj
a0IsIGludCBiYWNrQSkKK3sKKyAgICBtX2VudHJ5VGV4dEZvcmVncm91bmRDb2xvciA9IENvbG9y
KGZvcmVSLCBmb3JlRywgZm9yZUIsIGZvcmVBKTsKKyAgICBtX2VudHJ5VGV4dEJhY2tncm91bmRD
b2xvciA9IENvbG9yKGJhY2tSLCBiYWNrRywgYmFja0IsIGJhY2tBKTsKKyAgICBwbGF0Zm9ybUNv
bG9yc0RpZENoYW5nZSgpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpzZXRTZWFyY2hUZXh0
Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFj
a1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCit7CisgICAgbV9zZWFyY2hUZXh0
Rm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZm9yZVIsIGZvcmVHLCBmb3JlQiwgZm9yZUEpOworICAg
IG1fc2VhcmNoVGV4dEJhY2tncm91bmRDb2xvciA9IENvbG9yKGJhY2tSLCBiYWNrRywgYmFja0Is
IGJhY2tBKTsKKyAgICBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCitzdGF0aWMgYm9v
bCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7CisgICAgc3dpdGNoIChh
cHBlYXJhbmNlKSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBh
cnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAg
IGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgIGNhc2Ug
UmFkaW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJl
bmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICByZXR1cm4gaXNFbmFibGVkKG8pOworfQorCitp
bnQgUmVuZGVyVGhlbWVFZmw6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBv
KSBjb25zdAoreworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAorICAgIHx8ICBv
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQorICAgICAgICByZXR1cm4gdG9S
ZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3gobyktPmhlaWdodCgpIC0gMzsK
KworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGlm
ICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBh
Z2UoKS0+dGhlbWUoKSktPmFkanVzdENoZWNrYm94U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUs
IENoZWNrQm94KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworICAgIGNvbnN0IHN0cnVj
dCBUaGVtZVBhcnREZXNjICpkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94Owor
ICAgIGlmIChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUo
KSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAo
c3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworfQorCitib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJu
IHBhaW50VGhlbWVQYXJ0KG8sIENoZWNrQm94LCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGlmICghbV9wYWdlICYm
IGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUo
KSktPmFkanVzdFJhZGlvU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFJhZGlvQnV0dG9uKTsK
KyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworICAgIGNvbnN0IHN0cnVjdCBUaGVtZVBhcnRE
ZXNjICpkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJhZGlvQnV0dG9uOworICAgIGlmIChz
dHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKKyAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUtPmhl
aWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAgc3R5
bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworfQorCitib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGhlbWVQ
YXJ0KG8sIFJhZGlvQnV0dG9uLCBpLCByZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZSAmJiBlICYmIGUt
PmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVm
bDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1
c3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOworCisgICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgc3R5bGUt
PnJlc2V0Qm9yZGVyKCk7CisgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICAgICAgc3R5bGUtPnNldENv
bG9yKG1fYnV0dG9uVGV4dEZvcmVncm91bmRDb2xvcik7CisgICAgICAgIHN0eWxlLT5zZXRCYWNr
Z3JvdW5kQ29sb3IobV9idXR0b25UZXh0QmFja2dyb3VuZENvbG9yKTsKKyAgICB9Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0
dXJuIHBhaW50VGhlbWVQYXJ0KG8sIEJ1dHRvbiwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFn
ZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRo
ZW1lKCkpLT5hZGp1c3RNZW51TGlzdFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBDb21ib0Jv
eCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2Uo
UFJFKTsKKyAgICBzdHlsZS0+c2V0Q29sb3IobV9jb21ib1RleHRGb3JlZ3JvdW5kQ29sb3IpOwor
ICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9jb21ib1RleHRCYWNrZ3JvdW5kQ29sb3Ip
OworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIENvbWJvQm94LCBpLCByZWN0KTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sK
KyAgICBpZiAoIW1fcGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVu
dCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVDb25zdHJhaW50
cyhzdHlsZSwgVGV4dEZpZWxkKTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHls
ZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLT5zZXRDb2xvcihtX2VudHJ5VGV4dEZv
cmVncm91bmRDb2xvcik7CisgICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX2VudHJ5VGV4
dEJhY2tncm91bmRDb2xvcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFRleHRG
aWVsZCwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRBcmVh
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKK3sKKyAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRBcmVhKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAor
eworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3Vt
ZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxl
KHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZERlY29yYXRpb24pOworICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFNlYXJjaEZpZWxkRGVjb3JhdGlv
biwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBl
LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVF
Zmw6OlJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbik7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAg
c3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4g
cGFpbnRUaGVtZVBhcnQobywgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uLCBpLCByZWN0KTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgp
LT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRo
ZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uKTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHls
ZS0+c2V0V2hpdGVTcGFjZShQUkUpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4g
cGFpbnRUaGVtZVBhcnQobywgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaSwgcmVjdCk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCkt
PnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhl
bWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbik7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFydChv
LCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbiwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFn
ZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRo
ZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFy
Y2hGaWVsZCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKKyAgICBzdHlsZS0+c2V0Q29sb3IobV9zZWFyY2hUZXh0Rm9yZWdyb3VuZENv
bG9yKTsKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fc2VhcmNoVGV4dEJhY2tncm91
bmRDb2xvcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgU2VhcmNoRmllbGQs
IGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpzeXN0ZW1Gb250KGludCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3QKK3sKKyAgICAvLyBJZiB5b3UgcmVtb3ZlIHRoaXMgbm90SW1w
bGVtZW50ZWQoKSwgcmVwbGFjZSBpdCB3aXRoIGFuIGNvbW1lbnQgdGhhdCBleHBsYWlucyB3aHku
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNjI4MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKQEAg
LTAsMCArMSwyMDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUVmbF9oCisjZGVmaW5lIFJlbmRlclRoZW1lRWZsX2gK
KworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1
ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworZW51bSBGb3JtVHlwZSB7IC8vIEtFRVAgSU4gU1lOQyBXSVRIIGVkamVHcm91cEZyb21G
b3JtVHlwZSgpCisgICAgQnV0dG9uLAorICAgIFJhZGlvQnV0dG9uLAorICAgIFRleHRGaWVsZCwK
KyAgICBDaGVja0JveCwKKyAgICBDb21ib0JveCwKKyAgICBTZWFyY2hGaWVsZCwKKyAgICBTZWFy
Y2hGaWVsZERlY29yYXRpb24sCisgICAgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uLAorICAgIFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24sCisgICAgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24s
CisgICAgRm9ybVR5cGVMYXN0Cit9OworCitjbGFzcyBSZW5kZXJUaGVtZUVmbCA6IHB1YmxpYyBS
ZW5kZXJUaGVtZSB7Citwcml2YXRlOgorICAgIFJlbmRlclRoZW1lRWZsKFBhZ2UqKTsKKyAgICB+
UmVuZGVyVGhlbWVFZmwoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clRoZW1lPiBjcmVhdGUoUGFnZSopOworCisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0
aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJl
ZC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgLy8gQSBtZXRo
b2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93
IGhhcyBmb2N1cyBvciBub3QuCisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRz
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBh
c2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgorICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEg
ImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKKyAg
ICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29u
dGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKKyAgICAv
LyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KKyAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOyB9CisgICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsgfQorICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsgfQorICAgIHZpcnR1YWwgQ29sb3IgcGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7IH0KKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2ZvY3VzUmluZ0NvbG9yOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisKKyAgICAvLyBTZXQgcGxhdGZv
cm0gY29sb3JzIGFuZCBub3RpZnkgdGhleSBjaGFuZ2VkCisgICAgdm9pZCBzZXRBY3RpdmVTZWxl
Y3Rpb25Db2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGlu
dCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CisgICAgdm9pZCBzZXRJ
bmFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGlu
dCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsKKyAg
ICB2b2lkIHNldEZvY3VzUmluZ0NvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKKwor
ICAgIHZvaWQgc2V0QnV0dG9uVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9y
ZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tB
KTsKKyAgICB2b2lkIHNldENvbWJvVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQg
Zm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJh
Y2tBKTsKKyAgICB2b2lkIHNldEVudHJ5VGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBp
bnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50
IGJhY2tBKTsKKyAgICB2b2lkIHNldFNlYXJjaFRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3Jl
RywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0Is
IGludCBiYWNrQSk7CisKKyAgICB2b2lkIGFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHls
ZSogc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvbnN0OworCisKKyAgICAvLyBTeXN0ZW0gZm9udHMu
CisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9u
JikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVDYW52YXMoKTsKKyAg
ICB2b2lkIGNyZWF0ZUVkamUoKTsKKyAgICB2b2lkIGFwcGx5RWRqZUNvbG9ycygpOworICAgIHZv
aWQgYXBwbHlQYXJ0RGVzY3JpcHRpb25zKCk7CisgICAgY29uc3QgY2hhciogZWRqZUdyb3VwRnJv
bUZvcm1UeXBlKEZvcm1UeXBlIHR5cGUpIGNvbnN0OworICAgIHZvaWQgYXBwbHlFZGplU3RhdGVG
cm9tRm9ybShFdmFzX09iamVjdCogbywgQ29udHJvbFN0YXRlcyBzdGF0ZXMpOworICAgIGJvb2wg
cGFpbnRUaGVtZVBhcnQoUmVuZGVyT2JqZWN0KiBvLCBGb3JtVHlwZSB0eXBlLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCk7CisKKyAgICBQYWdl
KiBtX3BhZ2U7CisgICAgQ29sb3IgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7Cisg
ICAgQ29sb3IgbV9hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9p
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2luYWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yOworICAgIENvbG9yIG1fZm9jdXNSaW5nQ29sb3I7CisgICAg
Q29sb3IgbV9idXR0b25UZXh0QmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fYnV0dG9uVGV4
dEZvcmVncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2NvbWJvVGV4dEJhY2tncm91bmRDb2xvcjsK
KyAgICBDb2xvciBtX2NvbWJvVGV4dEZvcmVncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2VudHJ5
VGV4dEJhY2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2VudHJ5VGV4dEZvcmVncm91bmRDb2xv
cjsKKyAgICBDb2xvciBtX3NlYXJjaFRleHRCYWNrZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9z
ZWFyY2hUZXh0Rm9yZWdyb3VuZENvbG9yOworICAgIEVjb3JlX0V2YXMqIG1fY2FudmFzOworICAg
IEV2YXNfT2JqZWN0KiBtX2VkamU7CisKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyB7CisgICAg
ICAgIEZvcm1UeXBlIHR5cGU7CisgICAgICAgIExlbmd0aFNpemUgbWluOworICAgICAgICBMZW5n
dGhTaXplIG1heDsKKyAgICAgICAgTGVuZ3RoQm94IHBhZGRpbmc7CisgICAgfTsKKyAgICB2b2lk
IGFwcGx5UGFydERlc2NyaXB0aW9uRmFsbGJhY2soc3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2Mp
OworICAgIHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG8sIHN0cnVjdCBU
aGVtZVBhcnREZXNjKiBkZXNjKTsKKworICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5IHsK
KyAgICAgICAgRm9ybVR5cGUgdHlwZTsKKyAgICAgICAgSW50U2l6ZSBzaXplOworICAgICAgICBF
Y29yZV9FdmFzKiBlZTsKKyAgICAgICAgRXZhc19PYmplY3QqIG87CisgICAgICAgIGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZTsKKyAgICB9OworCisgICAgc3RydWN0IFRoZW1lUGFydERlc2MgbV9w
YXJ0RGVzY3NbRm9ybVR5cGVMYXN0XTsKKworICAgIC8vIHRoaXMgc2hvdWxkIGJlIHNtYWxsIGFu
ZCBub3Qgc28gZnJlcXVlbnRseSB1c2VkLAorICAgIC8vIHNvIHVzZSBhIHZlY3RvciBhbmQgZG8g
bGluZWFyIHNlYXJjaGVzCisgICAgVmVjdG9yPHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5ICo+
IG1fcGFydENhY2hlOworCisgICAgLy8gZ2V0ICh1c2UsIGNyZWF0ZSBvciByZXBsYWNlKSBlbnRy
eSBmcm9tIGNhY2hlCisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNhY2hlVGhlbWVQ
YXJ0R2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpOworICAgIC8vIGZsdXNo
IGNhY2hlLCBkZWxldGluZyBhbGwgZW50cmllcworICAgIHZvaWQgY2FjaGVUaGVtZVBhcnRGbHVz
aCgpOworCisgICAgLy8gaW50ZXJuYWwsIHVzZWQgYnkgY2FjaGVUaGVtZVBhcnRHZXQoKQorICAg
IGJvb2wgdGhlbWVQYXJ0Q2FjaGVFbnRyeVJlc2V0KHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5
KiBjZSwgRm9ybVR5cGUgdHlwZSk7CisgICAgYm9vbCB0aGVtZVBhcnRDYWNoZUVudHJ5U3VyZmFj
ZUNyZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2UpOworICAgIHN0cnVjdCBUaGVt
ZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydE5ldyhGb3JtVHlwZSB0eXBlLCBjb25zdCBJ
bnRTaXplJiBzaXplKTsKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVt
ZVBhcnRSZXNldChGb3JtVHlwZSB0eXBlLCBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2Up
OworICAgIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydFJlc2l6ZUFu
ZFJlc2V0KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUsIHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBjZSk7CisKK307Cit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUVmbF9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxWaWV3RWZsLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3NjhhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9TY3JvbGxWaWV3RWZsLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUluaXQo
KQoreworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQwYjY5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9TY3JvbGxiYXJFZmwuY3BwCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZwor
ICogICAgICAgICAgICAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogICAg
ICAgICAgICAoQykgMjAwOSBJTmRULCBJbnN0aXR1dG8gTm9raWEgZGUgVGVjaG5vbG9naWEKKyAq
ICAgICAgICAgICAgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICog
ICAgICAgICAgICAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJFZmwuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+Cisj
aW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Ny
b2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXpl
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsYmFyRWZsKGNsaWVudCwgb3JpZW50
YXRpb24sIHNpemUpKTsKK30KKworU2Nyb2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwoU2Nyb2xsYmFy
Q2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVu
dGF0aW9uLCBjb250cm9sU2l6ZSkKKyAgICAsIG1fbGFzdFBvcygwKQorICAgICwgbV9sYXN0VG90
YWxTaXplKDApCisgICAgLCBtX2xhc3RWaXNpYmxlU2l6ZSgwKQoreworICAgIFdpZGdldDo6c2V0
RnJhbWVSZWN0KEludFJlY3QoMCwgMCwgMCwgMCkpOworfQorCitTY3JvbGxiYXJFZmw6On5TY3Jv
bGxiYXJFZmwoKQoreworICAgIGlmICghZXZhc09iamVjdCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QoKSk7CisgICAgc2V0RXZhc09iamVjdCgwKTsK
K30KKworc3RhdGljIHZvaWQgc2Nyb2xsYmFyRWZsRWRqZU1lc3NhZ2Uodm9pZCogZGF0YSwgRXZh
c19PYmplY3QqIG8sIEVkamVfTWVzc2FnZV9UeXBlIHR5cGUsIGludCBpZCwgdm9pZCogbXNnKQor
eworICAgIFNjcm9sbGJhckVmbDo6U2Nyb2xsYmFyRWZsKiB0aGF0ID0gc3RhdGljX2Nhc3Q8U2Ny
b2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwqPihkYXRhKTsKKyAgICBFZGplX01lc3NhZ2VfRmxvYXQq
IG07CisgICAgaW50IHY7CisKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigi
VW5rbm93biBtZXNzYWdlIGlkICclZCcgZnJvbSBzY3JvbGwgYmFyIHRoZW1lLiIsIGlkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlICE9IEVESkVfTUVTU0FHRV9GTE9B
VCkgeworICAgICAgICBFSU5BX0xPR19FUlIoIk1lc3NhZ2UgaWQgJyVkJyBvZiBpbmNvcnJlY3Qg
dHlwZSBmcm9tIHNjcm9sbCBiYXIgdGhlbWUuICIKKyAgICAgICAgICAgICAgICAgICAgICJFeHBl
Y3RlZCAnJWQnLCBnb3QgJyVkJy4iLAorICAgICAgICAgICAgICAgICAgICAgaWQsIEVESkVfTUVT
U0FHRV9GTE9BVCwgdHlwZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtID0gc3Rh
dGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0Kj4obXNnKTsKKyAgICB2ID0gbS0+dmFsICogKHRo
YXQtPnRvdGFsU2l6ZSgpIC0gdGhhdC0+dmlzaWJsZVNpemUoKSk7CisgICAgdGhhdC0+c2V0VmFs
dWUodik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmll
dykKK3sKKyAgICBFdmFzX09iamVjdCogbyA9IGV2YXNPYmplY3QoKTsKKyAgICBFdmFzX0Nvb3Jk
IHcsIGg7CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudCh2aWV3KTsKKworICAgIGlmICghbykgewor
ICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbyA9IGVk
amVfb2JqZWN0X2FkZCh2aWV3LT5ldmFzKCkpOworICAgICAgICBpZiAoIW8pIHsKKyAgICAgICAg
ICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBlZGplIG9iamVjdCBmb3Igdmlldz0l
cCAoZXZhcz0lcCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcsIHZpZXctPmV2YXMo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWRqZV9vYmplY3Rf
bWVzc2FnZV9oYW5kbGVyX3NldChvLCBzY3JvbGxiYXJFZmxFZGplTWVzc2FnZSwgdGhpcyk7Cisg
ICAgICAgIHNldEV2YXNPYmplY3Qobyk7CisgICAgfSBlbHNlIGlmICghdmlldykgeworICAgICAg
ICBldmFzX29iamVjdF9oaWRlKG8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgY2hhciogZ3JvdXAgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICA/ICJzY3JvbGxiYXIuaG9yaXpvbnRhbCIgOiAic2Nyb2xsYmFyLnZlcnRpY2FsIjsK
KyAgICBTdHJpbmcgdGhlbWUoZWRqZVRoZW1lUmVjdXJzaXZlKCkpOworCisgICAgaWYgKHRoZW1l
LmlzRW1wdHkoKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkIHRoZW1l
ICclcyc6IG5vIHRoZW1lIHBhdGggc2V0LiIsIGdyb3VwKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
aGlkZShvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZWRqZV9vYmplY3Rf
ZmlsZV9zZXQobywgdGhlbWUudXRmOCgpLmRhdGEoKSwgZ3JvdXApKSB7CisgICAgICAgIGludCBl
cnIgPSBlZGplX29iamVjdF9sb2FkX2Vycm9yX2dldChvKTsKKyAgICAgICAgY29uc3QgY2hhciog
ZXJybXNnID0gZWRqZV9sb2FkX2Vycm9yX3N0cihlcnIpOworICAgICAgICBFSU5BX0xPR19FUlIo
IkNvdWxkIG5vdCBsb2FkIHRoZW1lICclcycgZnJvbSBmaWxlICclcyc6ICMlZCAnJXMnIiwKKyAg
ICAgICAgICAgICAgICAgICAgIHRoZW1lLnV0ZjgoKS5kYXRhKCksIGdyb3VwLCBlcnIsIGVycm1z
Zyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQbGF0Zm9ybVdpZGdldChvKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKG8sIHZpZXctPmV2YXNPYmplY3QoKSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhvKTsKKworICAgIGVkamVfb2JqZWN0X3NpemVfbWluX2dl
dChvLCAmdywgJmgpOworCisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgcmVj
dC5zZXRTaXplKEludFNpemUodywgaCkpOworICAgIHNldEZyYW1lUmVjdChyZWN0KTsKK30KKwor
dm9pZCBTY3JvbGxiYXJFZmw6OnVwZGF0ZVRodW1iUG9zaXRpb24oKQoreworICAgIHVwZGF0ZVRo
dW1iUG9zaXRpb25BbmRQcm9wb3J0aW9uKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQoreworICAgIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0
aW9uKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjp1cGRhdGVUaHVtYlBvc2l0aW9uQW5kUHJv
cG9ydGlvbigpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQgcG9zID0gY3VycmVudFBvcygpOworICAgIGludCB0U2l6ZSA9IHRvdGFsU2l6
ZSgpOworICAgIGludCB2U2l6ZSA9IHZpc2libGVTaXplKCk7CisKKyAgICBpZiAobV9sYXN0UG9z
ID09IHBvcworICAgICAgICAmJiBtX2xhc3RUb3RhbFNpemUgPT0gdFNpemUKKyAgICAgICAgJiYg
bV9sYXN0VmlzaWJsZVNpemUgPT0gdlNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFz
dFBvcyA9IHBvczsKKyAgICBtX2xhc3RUb3RhbFNpemUgPSB0U2l6ZTsKKyAgICBtX2xhc3RWaXNp
YmxlU2l6ZSA9IHZTaXplOworCisgICAgRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCogbXNnID0gc3Rh
dGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+CisgICAgICAgIChhbGxvY2Eoc2l6ZW9m
KEVkamVfTWVzc2FnZV9GbG9hdF9TZXQpICsgc2l6ZW9mKGZsb2F0KSkpOworICAgIG1zZy0+Y291
bnQgPSAyOworCisgICAgaWYgKHRTaXplIC0gdlNpemUgPiAwKQorICAgICAgICBtc2ctPnZhbFsw
XSA9IHBvcyAvIChmbG9hdCkodFNpemUgLSB2U2l6ZSk7CisgICAgZWxzZQorICAgICAgICBtc2ct
PnZhbFswXSA9IDAuMDsKKworICAgIGlmICh0U2l6ZSA+IDApCisgICAgICAgIG1zZy0+dmFsWzFd
ID0gdlNpemUgLyAoZmxvYXQpdFNpemU7CisgICAgZWxzZQorICAgICAgICBtc2ctPnZhbFsxXSA9
IDAuMDsKKworICAgIGVkamVfb2JqZWN0X21lc3NhZ2Vfc2VuZChwbGF0Zm9ybVdpZGdldCgpLCBF
REpFX01FU1NBR0VfRkxPQVRfU0VULCAwLCBtc2cpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6
c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgV2lkZ2V0OjpzZXRGcmFt
ZVJlY3QocmVjdCk7CisgICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxi
YXJFZmw6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKK3sKKyAgICBFdmFzX09iamVjdCogbyA9IHBsYXRm
b3JtV2lkZ2V0KCk7CisgICAgRXZhc19Db29yZCB4LCB5OworCisgICAgaWYgKCFwYXJlbnQoKSB8
fCAhbykKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7
CisgICAgaWYgKHBhcmVudCgpLT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIodGhpcykpCisgICAgICAg
IHJlY3Quc2V0TG9jYXRpb24ocGFyZW50KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVj
dC5sb2NhdGlvbigpKSk7CisgICAgZWxzZQorICAgICAgICByZWN0LnNldExvY2F0aW9uKHBhcmVu
dCgpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSkpOworCisgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KHJvb3QoKS0+ZXZhc09iamVjdCgpLCAmeCwgJnksIDAsIDApOworICAg
IGV2YXNfb2JqZWN0X21vdmUobywgeCArIHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShvLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2
b2lkIFNjcm9sbGJhckVmbDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9T
Y3JvbGxiYXJFZmwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODU4ODgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaApAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lh
IGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxiYXJFZmxfaAorI2RlZmluZSBTY3JvbGxiYXJFZmxf
aAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xs
YmFyRWZsIDogcHVibGljIFNjcm9sbGJhciB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFNj
cm9sbGJhcjsKKworICAgIHZpcnR1YWwgflNjcm9sbGJhckVmbCgpOworCisgICAgdmlydHVhbCB2
b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VPdXRFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVN
b3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZVJlY3RzQ2hhbmdlZCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBTY3JvbGxiYXJFZmwoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbGJhckNvbnRyb2xTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0
aW9uQW5kUHJvcG9ydGlvbigpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9u
KCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworCisgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3KiB2aWV3KTsKKworcHJpdmF0ZToKKyAgICBp
bnQgbV9sYXN0UG9zOworICAgIGludCBtX2xhc3RUb3RhbFNpemU7CisgICAgaW50IG1fbGFzdFZp
c2libGVTaXplOworfTsKKworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyRWZsX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MmRmMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lRWZsLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsYmFyVGhlbWUq
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgc3RhdGljIFNjcm9sbGJhclRo
ZW1lRWZsIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK1Njcm9sbGJhclRoZW1lRWZs
Ojp+U2Nyb2xsYmFyVGhlbWVFZmwoKQoreworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVFZmw6OnNj
cm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAg
ICByZXR1cm4gMDsgLy8gd2UgcGFpbnQgb24gdG9wCit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVF
Zmw6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworfQorCit2b2lk
IFNjcm9sbGJhclRoZW1lRWZsOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9s
bGJhclRoZW1lRWZsLmggYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjQwMGYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxiYXJUaGVtZUVmbF9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lRWZsX2gKKworI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Ny
b2xsYmFyVGhlbWVFZmwgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUgeworcHVibGljOgorICAgIHZp
cnR1YWwgflNjcm9sbGJhclRoZW1lRWZsKCk7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKKworICAg
IHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcik7Cisg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
OworCisKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2VhcmNoUG9wdXBNZW51RWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NlYXJjaFBvcHVw
TWVudUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MTc0Zgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NlYXJjaFBvcHVwTWVudUVm
bC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAt
IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlYXJjaFBv
cHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDog
UG9wdXBNZW51KGNsaWVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNl
YXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYs
IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNl
YXJjaFBvcHVwTWVudTo6ZW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2hh
cmVkQnVmZmVyRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NoYXJlZEJ1ZmZlckVmbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwODM3NgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NoYXJlZEJ1ZmZlckVmbC5jcHAKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogICAgICAgICAgICAgICAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
CisgKiAgICAgICAgICAgICAgIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogICAgICAgICAgICAgICAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
V2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgRklMRSog
ZmlsZTsKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiByZXN1bHQ7CisKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghKGZpbGUgPSBmb3BlbihmaWxlUGF0aC51dGY4KCkuZGF0YSgpLCAicmIi
KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGZzdGF0KGZpbGVubyhmaWxlKSwgJmZp
bGVTdGF0KSkgeworICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5t
X2J1ZmZlci5yZXNpemUoZmlsZVN0YXQuc3Rfc2l6ZSk7CisgICAgaWYgKHJlc3VsdC0+bV9idWZm
ZXIuc2l6ZSgpICE9IGZpbGVTdGF0LnN0X3NpemUpIHsKKyAgICAgICAgZmNsb3NlKGZpbGUpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmcmVhZChyZXN1bHQtPm1fYnVmZmVyLmRh
dGEoKSwgMSwgZmlsZVN0YXQuc3Rfc2l6ZSwgZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworCisg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1NoYXJlZFRpbWVyRWZsLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1NoYXJlZFRpbWVyRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMjJjOGMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvU2hhcmVkVGltZXJFZmwuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqICAgICAgICAgICAo
QykgMjAwOCBBZm9uc28gUmFiZWxvIENvc3RhIEpyLgorICogICAgICAgICAgIChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICAgICAgICAgICAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2hhcmVkVGltZXIuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBFY29yZV9UaW1lciAqZ19zaGFy
ZWRUaW1lciA9IDA7CisKK3N0YXRpYyB2b2lkICgqZ190aW1lckZ1bmN0aW9uKSgpOworCit2b2lk
IHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSkKK3sKKyAgICBnX3Rp
bWVyRnVuY3Rpb24gPSBmdW5jOworfQorCitzdGF0aWMgaW50IHRpbWVyRXZlbnQodm9pZCopCit7
CisgICAgaWYgKGdfdGltZXJGdW5jdGlvbikKKyAgICAgICAgZ190aW1lckZ1bmN0aW9uKCk7CisK
KyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIHN0b3BTaGFyZWRU
aW1lcigpCit7CisgICAgaWYgKGdfc2hhcmVkVGltZXIpIHsKKyAgICAgICAgZWNvcmVfdGltZXJf
ZGVsKGdfc2hhcmVkVGltZXIpOworICAgICAgICBnX3NoYXJlZFRpbWVyID0gMDsKKyAgICB9Cit9
CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit7CisgICAg
ZG91YmxlIGludGVydmFsID0gZmlyZVRpbWUgLSBjdXJyZW50VGltZSgpOworCisgICAgc3RvcFNo
YXJlZFRpbWVyKCk7CisgICAgZ19zaGFyZWRUaW1lciA9IGVjb3JlX3RpbWVyX2FkZChpbnRlcnZh
bCwgdGltZXJFdmVudCwgMCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvU291bmRFZmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU291bmRFZmwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOGFjZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Tb3VuZEVmbC5jcHAKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lh
IGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaWZkZWYgSEFWRV9FQ09SRV9YCisjaW5jbHVk
ZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIHN5c3RlbUJlZXAoKQoreworI2lmZGVmIEhBVkVfRUNPUkVfWAor
ICAgIERpc3BsYXkqIGRpc3BsYXkgPSAoRGlzcGxheSopIGVjb3JlX3hfZGlzcGxheV9nZXQoKTsK
KyAgICBYQmVsbChkaXNwbGF5LCAwKTsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TeXN0ZW1UaW1lRWZsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L1N5c3RlbVRpbWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRl
OGM4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TeXN0ZW1UaW1l
RWZsLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeXN0ZW1U
aW1lLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Rv
dWJsZSBjdXJyZW50VGltZSgpCit7CisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVj
dG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25z
dCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKQoreworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworZmxvYXQgdXNlcklkbGVUaW1lKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBGTFRfTUFYOworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL1dpZGdldEVmbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9XaWRn
ZXRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OTIwOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2VmbC9XaWRnZXRFZmwuY3BwCkBAIC0w
LDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVt
cworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
KyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRlIDxFdmFzLmg+
CisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8
RWNvcmVfWF9DdXJzb3IuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgSEFWRV9FQ09SRV9YCitjbGFzcyBDdXJzb3JN
YXAgeworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQgc2hvcnQ+IG1fY3Vy
c29yU3RyaW5nTWFwOworCitwdWJsaWM6CisgICAgQ3Vyc29yTWFwKCk7CisgICAgdW5zaWduZWQg
aW50IGN1cnNvcihTdHJpbmcpOworfTsKKwordW5zaWduZWQgaW50IEN1cnNvck1hcDo6Y3Vyc29y
KFN0cmluZyBjdXJzb3JHcm91cCkKK3sKKyAgICBpbnQgcmV0ID0gbV9jdXJzb3JTdHJpbmdNYXAu
Z2V0KGN1cnNvckdyb3VwKTsKKworICAgIGlmIChyZXQgPCBFQ09SRV9YX0NVUlNPUl9YIHx8IHJl
dCA+IEVDT1JFX1hfQ1VSU09SX1hURVJNKQorICAgICAgICByZXQgPSBFQ09SRV9YX0NVUlNPUl9M
RUZUX1BUUjsKKworICAgIHJldHVybiByZXQ7Cit9CisKK0N1cnNvck1hcDo6Q3Vyc29yTWFwKCkK
K3sKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9wb2ludGVyIiwgRUNPUkVfWF9D
VVJTT1JfTEVGVF9QVFIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL21vdmUi
LCBFQ09SRV9YX0NVUlNPUl9GTEVVUik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJz
b3IvY3Jvc3MiLCBFQ09SRV9YX0NVUlNPUl9DUk9TUyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAu
c2V0KCJjdXJzb3IvaGFuZCIsIEVDT1JFX1hfQ1VSU09SX0hBTkQyKTsKKyAgICBtX2N1cnNvclN0
cmluZ01hcC5zZXQoImN1cnNvci9pX2JlYW0iLCBFQ09SRV9YX0NVUlNPUl9YVEVSTSk7CisgICAg
bV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivd2FpdCIsIEVDT1JFX1hfQ1VSU09SX1dBVENI
KTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9oZWxwIiwgRUNPUkVfWF9DVVJT
T1JfUVVFU1RJT05fQVJST1cpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2Vh
c3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfUklHSFRfU0lERSk7CisgICAgbV9jdXJzb3JTdHJp
bmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfVE9QX1NJREUp
OworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL25vcnRoX2Vhc3RfcmVzaXplIiwg
RUNPUkVfWF9DVVJTT1JfVE9QX1JJR0hUX0NPUk5FUik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAu
c2V0KCJjdXJzb3Ivbm9ydGhfd2VzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9UT1BfTEVGVF9D
T1JORVIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3NvdXRoX3Jlc2l6ZSIs
IEVDT1JFX1hfQ1VSU09SX0JPVFRPTV9TSURFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci9zb3V0aF9lYXN0X3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX0JPVFRPTV9SSUdIVF9D
T1JORVIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3NvdXRoX3dlc3RfcmVz
aXplIiwgRUNPUkVfWF9DVVJTT1JfQk9UVE9NX0xFRlRfQ09STkVSKTsKKyAgICBtX2N1cnNvclN0
cmluZ01hcC5zZXQoImN1cnNvci93ZXN0X3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX0xFRlRfU0lE
RSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfc291dGhfcmVzaXpl
IiwgRUNPUkVfWF9DVVJTT1JfU0JfSF9ET1VCTEVfQVJST1cpOworICAgIG1fY3Vyc29yU3RyaW5n
TWFwLnNldCgiY3Vyc29yL2Vhc3Rfd2VzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9TQl9WX0RP
VUJMRV9BUlJPVyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfZWFz
dF9zb3V0aF93ZXN0X3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX1NJWklORyk7CisgICAgbV9jdXJz
b3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0aF9lYXN0X3Jlc2l6ZSIsIEVD
T1JFX1hfQ1VSU09SX1NJWklORyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Iv
Y29sdW1uX3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX1NCX1ZfRE9VQkxFX0FSUk9XKTsKKyAgICBt
X2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9yb3dfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1Jf
U0JfSF9ET1VCTEVfQVJST1cpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL21p
ZGRsZV9wYW5uaW5nIiwgIEVDT1JFX1hfQ1VSU09SX0NST1NTX1JFVkVSU0UpOworICAgIG1fY3Vy
c29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2Vhc3RfcGFubmluZyIsIEVDT1JFX1hfQ1VSU09SX0NS
T1NTX1JFVkVSU0UpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL25vcnRoX3Bh
bm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmlu
Z01hcC5zZXQoImN1cnNvci9ub3J0aF9lYXN0X3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9T
U19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF93ZXN0
X3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0
cmluZ01hcC5zZXQoImN1cnNvci9zb3V0aF9wYW5uaW5nIiwgRUNPUkVfWF9DVVJTT1JfQ1JPU1Nf
UkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivc291dGhfZWFzdF9w
YW5uaW5nIiwgRUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJp
bmdNYXAuc2V0KCJjdXJzb3Ivc291dGhfd2VzdF9wYW5uaW5nIiwgRUNPUkVfWF9DVVJTT1JfQ1JP
U1NfUkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivd2VzdF9wYW5u
aW5nIiwgRUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdN
YXAuc2V0KCJjdXJzb3IvdmVydGljYWxfdGV4dCIsIEVDT1JFX1hfQ1VSU09SX1NCX0RPV05fQVJS
T1cpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2NlbGwiLCBFQ09SRV9YX0NV
UlNPUl9JQ09OKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9jb250ZXh0X21l
bnUiLCBFQ09SRV9YX0NVUlNPUl9IQU5EMik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJj
dXJzb3Ivbm9fZHJvcCIsIEVDT1JFX1hfQ1VSU09SX0RPVF9CT1hfTUFTSyk7CisgICAgbV9jdXJz
b3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvY29weSIsIEVDT1JFX1hfQ1VSU09SX0lDT04pOworICAg
IG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3Byb2dyZXNzIiwgRUNPUkVfWF9DVVJTT1Jf
V0FUQ0gpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2FsaWFzIiwgRUNPUkVf
WF9DVVJTT1JfTUFOKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub25lIiwg
RUNPUkVfWF9DVVJTT1JfWCk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm90
X2FsbG93ZWQiLCBFQ09SRV9YX0NVUlNPUl9YKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci96b29tX2luIiwgRUNPUkVfWF9DVVJTT1JfRElBTU9ORF9DUk9TUyk7CisgICAgbV9j
dXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivem9vbV9vdXQiLCBFQ09SRV9YX0NVUlNPUl9ESUFN
T05EX0NST1NTKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ncmFiIiwgRUNP
UkVfWF9DVVJTT1JfSEFORDIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2dy
YWJiaW5nIiwgRUNPUkVfWF9DVVJTT1JfSEFORDIpOworfQorCitzdGF0aWMgQ3Vyc29yTWFwIGN1
cnNvclN0cmluZ01hcCA9IEN1cnNvck1hcCgpOworI2VuZGlmCisKK2NsYXNzIFdpZGdldFByaXZh
dGUgeworcHVibGljOgorICAgIEV2YXMqIG1fZXZhczsKKyAgICBFdmFzX09iamVjdCogbV9ldmFz
T2JqZWN0OworICAgIFN0cmluZyBtX3RoZW1lOworCisgICAgV2lkZ2V0UHJpdmF0ZSgpCisgICAg
ICAgIDogbV9ldmFzKDApCisgICAgICAgICwgbV9ldmFzT2JqZWN0KDApCisgICAgICAgICwgbV9j
dXJzb3JPYmplY3QoMCkKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICAgICAgLCBtX2lzVXNpbmdF
Y29yZVgoZmFsc2UpCisjZW5kaWYKKyAgICB7fQorCisgICAgLyogY3Vyc29yICovCisgICAgU3Ry
aW5nIG1fY3Vyc29yR3JvdXA7CisgICAgRXZhc19PYmplY3QqIG1fY3Vyc29yT2JqZWN0OworCisj
aWZkZWYgSEFWRV9FQ09SRV9YCisgICAgYm9vbCBtX2lzVXNpbmdFY29yZVg7CisjZW5kaWYKK307
CisKK1dpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKKyAgICA6IG1fcGFyZW50
KDApCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9zZWxmVmlzaWJsZShmYWxzZSkKKyAgICAs
IG1fcGFyZW50VmlzaWJsZShmYWxzZSkKKyAgICAsIG1fZnJhbWUoMCwgMCwgMCwgMCkKKyAgICAs
IG1fZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKK3sKKyAgICBpbml0KHdpZGdldCk7Cit9CisKK1dp
ZGdldDo6fldpZGdldCgpCit7CisgICAgQVNTRVJUKCFwYXJlbnQoKSk7CisKKyAgICBpZiAobV9k
YXRhLT5tX2N1cnNvck9iamVjdCkKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fZGF0YS0+bV9j
dXJzb3JPYmplY3QpOworCisgICAgZGVsZXRlIG1fZGF0YTsKK30KKworSW50UmVjdCBXaWRnZXQ6
OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0g
cmVjdDsKKyAgICBXaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCit7CisgICAgRXZhc19PYmplY3QqIG8gPSBldmFzT2JqZWN0
KCk7CisgICAgRXZhc19Db29yZCB4LCB5OworCisgICAgaWYgKCFwYXJlbnQoKSB8fCAhbykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgaWYg
KHBhcmVudCgpLT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIodGhpcykpCisgICAgICAgIHJlY3Quc2V0
TG9jYXRpb24ocGFyZW50KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdC5sb2NhdGlv
bigpKSk7CisgICAgZWxzZQorICAgICAgICByZWN0LnNldExvY2F0aW9uKHBhcmVudCgpLT5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSkpOworCisgICAgZXZhc19vYmplY3RfZ2VvbWV0
cnlfZ2V0KHJvb3QoKS0+ZXZhc09iamVjdCgpLCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2Jq
ZWN0X21vdmUobywgeCArIHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShvLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdl
dDo6c2V0Rm9jdXMoKQoreworfQorCit2b2lkIFdpZGdldDo6YXBwbHlGYWxsYmFja0N1cnNvcigp
Cit7CisjaWYgSEFWRV9FQ09SRV9YCisgICAgaWYgKG1fZGF0YS0+bV9pc1VzaW5nRWNvcmVYICYm
ICFtX2RhdGEtPm1fY3Vyc29yR3JvdXAuaXNOdWxsKCkpIHsKKyAgICAgICAgaW50IHNoYXBlID0g
Y3Vyc29yU3RyaW5nTWFwLmN1cnNvcihtX2RhdGEtPm1fY3Vyc29yR3JvdXAudXRmOCgpLmRhdGEo
KSk7CisKKyAgICAgICAgaWYgKHNoYXBlIDwgRUNPUkVfWF9DVVJTT1JfWCB8fCBzaGFwZSA+IEVD
T1JFX1hfQ1VSU09SX1hURVJNKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9S
OiBjYW5ub3QgbWFwIGFuIGVxdWl2YWxlbnQgWCBjdXJzb3IgZm9yIgorICAgICAgICAgICAgICAg
ICAgICAiIGN1cnNvciBncm91cCAlcyIsIG1fZGF0YS0+bV9jdXJzb3JHcm91cC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIHNoYXBlID0gRUNPUkVfWF9DVVJTT1JfTEVGVF9QVFI7CisgICAg
ICAgIH0KKworICAgICAgICBFY29yZV9YX1dpbmRvdyB3aW4gPSBlY29yZV9ldmFzX3NvZnR3YXJl
X3gxMV93aW5kb3dfZ2V0KGVjb3JlRXZhcygpKTsKKyAgICAgICAgRWNvcmVfWF9DdXJzb3IgY3Vy
ID0gZWNvcmVfeF9jdXJzb3Jfc2hhcGVfZ2V0KHNoYXBlKTsKKyAgICAgICAgZWNvcmVfeF93aW5k
b3dfY3Vyc29yX3NldCh3aW4sIGN1cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQor
ICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IE9vb3BzLCBubyBmYWxsYmFjayB0byBzZXQgY3Vy
c29yICVzIVxuIiwKKyAgICAgICAgICAgIG1fZGF0YS0+bV9jdXJzb3JHcm91cC51dGY4KCkuZGF0
YSgpKTsKKyNlbmRpZgorfQorCit2b2lkIFdpZGdldDo6YXBwbHlDdXJzb3IoKQoreworICAgIGNv
bnN0IGNoYXIgKmZpbGU7CisgICAgRXZhc19Db29yZCB4LCB5OworCisgICAgU3RyaW5nIHRoZW1l
ID0gZWRqZVRoZW1lUmVjdXJzaXZlKCk7CisgICAgaWYgKCF0aGVtZS5pc051bGwoKSkKKyAgICAg
ICAgZmlsZSA9IGVkamVUaGVtZVJlY3Vyc2l2ZSgpLnV0ZjgoKS5kYXRhKCk7CisKKyAgICBtX2Rh
dGEtPm1fY3Vyc29yT2JqZWN0ID0gZWRqZV9vYmplY3RfYWRkKGV2YXMoKSk7CisgICAgaWYgKCFl
ZGplX29iamVjdF9maWxlX3NldChtX2RhdGEtPm1fY3Vyc29yT2JqZWN0LCBmaWxlLCBtX2RhdGEt
Pm1fY3Vyc29yR3JvdXAudXRmOCgpLmRhdGEoKSkpIHsKKyAgICAgICAgZXZhc19vYmplY3RfZGVs
KG1fZGF0YS0+bV9jdXJzb3JPYmplY3QpOworICAgICAgICBtX2RhdGEtPm1fY3Vyc29yT2JqZWN0
ID0gMDsKKyAgICAgICAgZWNvcmVfZXZhc19vYmplY3RfY3Vyc29yX3NldChlY29yZUV2YXMoKSwg
MCwgMCwgMCwgMCk7CisgICAgICAgIGFwcGx5RmFsbGJhY2tDdXJzb3IoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgIGNvbnN0IGNoYXIgKmQ7CisKKyAg
ICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fZ2V0KG1fZGF0YS0+bV9jdXJzb3JPYmplY3QsICZ3
LCAmaCk7CisgICAgICAgIGlmICgodyA8PSAwKSB8fCAoaCA8PSAwKSkKKyAgICAgICAgICAgIGVk
amVfb2JqZWN0X3NpemVfbWluX2NhbGMobV9kYXRhLT5tX2N1cnNvck9iamVjdCwgJncsICZoKTsK
KyAgICAgICAgaWYgKCh3IDw9IDApIHx8IChoIDw9IDApKQorICAgICAgICAgICAgdyA9IGggPSAx
NjsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG1fZGF0YS0+bV9jdXJzb3JPYmplY3QsIHcs
IGgpOworCisgICAgICAgIGQgPSBlZGplX29iamVjdF9kYXRhX2dldChtX2RhdGEtPm1fY3Vyc29y
T2JqZWN0LCAiaG90LngiKTsKKyAgICAgICAgeCA9IGQgPyBhdG9pKGQpIDogMDsKKworICAgICAg
ICBkID0gZWRqZV9vYmplY3RfZGF0YV9nZXQobV9kYXRhLT5tX2N1cnNvck9iamVjdCwgImhvdC55
Iik7CisgICAgICAgIHkgPSBkID8gYXRvaShkKSA6IDA7CisKKyAgICAgICAgZWNvcmVfZXZhc19v
YmplY3RfY3Vyc29yX3NldChlY29yZUV2YXMoKSwgbV9kYXRhLT5tX2N1cnNvck9iamVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVkFTX0xBWUVSX01BWCwgeCwgeSk7
CisgICAgfQorfQorCit2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29y
KQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSB8fCAhZXZhcygpKQorICAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgY2hhciAqZ3JvdXAgPSBjdXJzb3IuaW1wbCgpOworICAgIGlmICgh
Z3JvdXAgfHwgU3RyaW5nKGdyb3VwKSA9PSBtX2RhdGEtPm1fY3Vyc29yR3JvdXApCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+bV9jdXJzb3JHcm91cCA9IGdyb3VwOworCisgICAgYXBw
bHlDdXJzb3IoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIGlmICghcGxhdGZv
cm1XaWRnZXQoKSkKKyAgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X3Nob3cocGxh
dGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBpZiAoIXBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9oaWRl
KHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2NvbnN0IFN0cmluZyBXaWRnZXQ6OmVkamVUaGVtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZGF0YS0+bV90aGVtZTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEVkamVUaGVt
ZShjb25zdCBTdHJpbmcmIHRoZW1lUGF0aCkKK3sKKyAgICBpZiAobV9kYXRhLT5tX3RoZW1lID09
IHRoZW1lUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3RoZW1lID0gdGhl
bWVQYXRoOworfQorCitjb25zdCBTdHJpbmcgV2lkZ2V0OjplZGplVGhlbWVSZWN1cnNpdmUoKSBj
b25zdAoreworICAgIGlmICghbV9kYXRhLT5tX3RoZW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbV9kYXRhLT5tX3RoZW1lOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5lZGplVGhlbWVSZWN1cnNpdmUoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworRXZhcyogV2lkZ2V0OjpldmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX2V2
YXM7Cit9CisKK0Vjb3JlX0V2YXMqIFdpZGdldDo6ZWNvcmVFdmFzKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRSBFRkw6IFhYWCBhc3N1bWUgZXZhcyB3YXMgY3JlYXRlZCBieSBlY29yZV9ldmFzCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEVjb3JlX0V2YXMqPihldmFzX2RhdGFfYXR0YWNoX2dldChl
dmFzKCkpKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEV2YXNPYmplY3QoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgLy8gRklYTUU6IHN0dWR5IHBsYXRmb3JtV2lkZ2V0KCkgYW5kIHVzZSBpdAorICAg
IC8vIEZJWE1FOiByaWdodCBub3cgcGxhdGZvcm1XaWRnZXQoKSByZXF1aXJlcyBpbXBsZW1lbnRp
bmcgdG9vIG11Y2gKKyAgICBpZiAobV9kYXRhLT5tX2V2YXNPYmplY3QgPT0gbykKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGF0YS0+bV9ldmFzT2JqZWN0ID0gbzsKKyAgICBpZiAoIW8pIHsKKyAg
ICAgICAgbV9kYXRhLT5tX2V2YXMgPSAwOworICAgICAgICBtX2RhdGEtPm1faXNVc2luZ0Vjb3Jl
WCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhLT5tX2V2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldChvKTsKKworI2lmZGVmIEhBVkVfRUNPUkVfWAorICAgIGNv
bnN0IGNoYXIgKmVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVjb3JlRXZhcygp
KTsKKyAgICBtX2RhdGEtPm1faXNVc2luZ0Vjb3JlWCA9ICghc3RyY21wKGVuZ2luZSwgInNvZnR3
YXJlX3gxMSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNtcChlbmdp
bmUsICJzb2Z0d2FyZV94Y2IiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFz
dHJjbXAoZW5naW5lLCAic29mdHdhcmVfMTZfeDExIikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhc3RybmNtcChlbmdpbmUsICJ4cmVuZGVyIiwgc2l6ZW9mKCJ4cmVuZGVyIikg
LSAxKSk7CisjZW5kaWYKKworICAgIFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQoKTsKK30KKwor
RXZhc19PYmplY3QqIFdpZGdldDo6ZXZhc09iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZGF0YS0+bV9ldmFzT2JqZWN0OworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQ3ZmMyMmIuLjQ3NTU2MzEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTAtMDItMjIgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEVG
TCBwb3J0IGZpbGVzIHRvIHBsYXRmb3JtL2VmbC4KKyAgICAgICAgaHR0cDovL3dlYmtpdC5vcmcv
Yi8zNTA4NworCisgICAgICAgICogcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Vm
bC9Db250ZXh0TWVudUVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51
SXRlbUVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0Nvb2tpZUphckVmbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
ZWZsL0RyYWdEYXRhRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvRHJhZ0ltYWdlRWZs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9lZmwvRmlsZUNob29zZXJFZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2Vm
bC9GaWxlU3lzdGVtRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvS1VSTEVmbC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZWZsL0xhbmd1YWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvTG9jYWxpemVkU3RyaW5nc0VmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0xv
Z2dpbmdFZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9NSU1FVHlwZVJlZ2lzdHJ5RWZs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUGFzdGVib2FyZEVmbC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEVmbC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZWZsL1BsYXRmb3JtTW91c2VFdmVudEVmbC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZWZsL1BsYXRmb3JtU2NyZWVuRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUGxh
dGZvcm1XaGVlbEV2ZW50RWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUG9wdXBNZW51
RWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9TY3JvbGxWaWV3RWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFy
RWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2VhcmNo
UG9wdXBNZW51RWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2hhcmVkQnVmZmVyRWZs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2hhcmVkVGltZXJFZmwuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2VmbC9Tb3VuZEVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1N5
c3RlbVRpbWVFZmwuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9XaWRnZXRFZmwuY3BwOgorCiAyMDEwLTAy
LTExICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOYXRlIENoYXBpbi4K
</data>
<flag name="review"
          id="32027"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49519</attachid>
            <date>2010-02-25 12:34:30 -0800</date>
            <delta_ts>2010-02-26 17:51:47 -0800</delta_ts>
            <desc>Patch 1/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-1.diff</filename>
            <type>text/plain</type>
            <size>25167</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCkBA
IC0wLDAgKzEsMTQxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRFZmwuaCIKKworI2luY2x1ZGUgIkVkaXRv
ci5oIgorI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK1Bhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSkKK3sKKyAgICByZXR1cm4gbmV3IENsaXBib2FyZEVmbChwb2xpY3ksIGZh
bHNlKTsKK30KKworQ2xpcGJvYXJkRWZsOjpDbGlwYm9hcmRFZmwoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZykKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGZv
ckRyYWdnaW5nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NsaXBib2FyZEVmbDo6
fkNsaXBib2FyZEVmbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDbGlw
Ym9hcmRFZmw6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjp3cml0ZVBsYWluVGV4dChjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJk
RWZsOjpjbGVhckFsbERhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmlu
ZyBDbGlwYm9hcmRFZmw6OmdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9vbCAmc3VjY2VzcykgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRFZmw6OnR5cGVzKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4o
KTsKK30KKworUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQg
Q2xpcGJvYXJkRWZsOjpkcmFnTG9jYXRpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOworfQorCitDYWNoZWRJbWFnZSogQ2xpcGJv
YXJkRWZsOjpkcmFnSW1hZ2UoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkRWZsOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1h
Z2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworTm9k
ZSogQ2xpcGJvYXJkRWZsOjpkcmFnSW1hZ2VFbGVtZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENsaXBib2FyZEVmbDo6c2V0RHJhZ0ltYWdl
RWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRFZmw6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2lu
dCYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBDbGlwYm9hcmRFZmw6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIENsaXBib2FyZEVmbDo6d3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBi
b2FyZEVmbDo6d3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIENsaXBib2FyZEVmbDo6aGFzRGF0YSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZWZsL1BvcHVwTWVudUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2VmbC9Qb3B1cE1lbnVFZmwuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb3B1cE1lbnUuaCIKKworI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisg
ICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKK3sKK30KKworUG9wdXBNZW51Ojp+UG9wdXBNZW51
KCkKK3sKK30KKwordm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJh
bWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKGNsaWVudCgpKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6aGlkZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KCkK
K3sKKyAgICBjbGllbnQoKS0+c2V0VGV4dEZyb21JdGVtKGNsaWVudCgpLT5zZWxlY3RlZEluZGV4
KCkpOworfQorCitib29sIFBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9TaGFyZWRUaW1lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2VmbC9TaGFyZWRUaW1lckVmbC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogICAgICAg
ICAgIChDKSAyMDA4IEFmb25zbyBSYWJlbG8gQ29zdGEgSnIuCisgKiAgICAgICAgICAgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAgICAgIChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEVjb3JlX1RpbWVyICpn
X3NoYXJlZFRpbWVyID0gMDsKKworc3RhdGljIHZvaWQgKCpnX3RpbWVyRnVuY3Rpb24pKCk7CisK
K3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKQoreworICAg
IGdfdGltZXJGdW5jdGlvbiA9IGZ1bmM7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJFdmVudCh2b2lk
KikKK3sKKyAgICBpZiAoZ190aW1lckZ1bmN0aW9uKQorICAgICAgICBnX3RpbWVyRnVuY3Rpb24o
KTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3ZvaWQgc3RvcFNo
YXJlZFRpbWVyKCkKK3sKKyAgICBpZiAoZ19zaGFyZWRUaW1lcikgeworICAgICAgICBlY29yZV90
aW1lcl9kZWwoZ19zaGFyZWRUaW1lcik7CisgICAgICAgIGdfc2hhcmVkVGltZXIgPSAwOworICAg
IH0KK30KKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKK3sK
KyAgICBkb3VibGUgaW50ZXJ2YWwgPSBmaXJlVGltZSAtIGN1cnJlbnRUaW1lKCk7CisKKyAgICBz
dG9wU2hhcmVkVGltZXIoKTsKKyAgICBnX3NoYXJlZFRpbWVyID0gZWNvcmVfdGltZXJfYWRkKGlu
dGVydmFsLCB0aW1lckV2ZW50LCAwKTsKK30KKworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2VmbC9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1
dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRo
ZW1lRWZsX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVFZmxfaAorCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEZvcm1UeXBlIHsg
Ly8gS0VFUCBJTiBTWU5DIFdJVEggZWRqZUdyb3VwRnJvbUZvcm1UeXBlKCkKKyAgICBCdXR0b24s
CisgICAgUmFkaW9CdXR0b24sCisgICAgVGV4dEZpZWxkLAorICAgIENoZWNrQm94LAorICAgIENv
bWJvQm94LAorICAgIFNlYXJjaEZpZWxkLAorICAgIFNlYXJjaEZpZWxkRGVjb3JhdGlvbiwKKyAg
ICBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24sCisgICAgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvbiwKKyAgICBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbiwKKyAgICBGb3JtVHlwZUxhc3QKK307
CisKK2NsYXNzIFJlbmRlclRoZW1lRWZsIDogcHVibGljIFJlbmRlclRoZW1lIHsKK3ByaXZhdGU6
CisgICAgUmVuZGVyVGhlbWVFZmwoUGFnZSopOworICAgIH5SZW5kZXJUaGVtZUVmbCgpOworCitw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7
CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFs
bHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgorICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhl
IGZvY3VzIHJpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRy
b2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAg
ICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CisKKyAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0
aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29u
dHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQSBtZXRob2QgdG8g
b2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMg
d2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQorICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBi
ZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCBy
YWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0
byBkbyB0aGlzLgorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3I7IH0KKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2luYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcjsgfQorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNSaW5nQ29sb3I7IH0KKworICAgIHZpcnR1YWwgdm9pZCB0
aGVtZUNoYW5nZWQoKTsKKworICAgIC8vIFNldCBwbGF0Zm9ybSBjb2xvcnMgYW5kIG5vdGlmeSB0
aGV5IGNoYW5nZWQKKyAgICB2b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwg
aW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGlu
dCBiYWNrQiwgaW50IGJhY2tBKTsKKyAgICB2b2lkIHNldEluYWN0aXZlU2VsZWN0aW9uQ29sb3Io
aW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGlu
dCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0Rm9jdXNSaW5nQ29s
b3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCisgICAgdm9pZCBzZXRCdXR0b25UZXh0
Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFj
a1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0Q29tYm9U
ZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQg
YmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0RW50
cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBp
bnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOworICAgIHZvaWQgc2V0
U2VhcmNoVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3Jl
QSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsKKworICAgIHZv
aWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlw
ZSkgY29uc3Q7CisKKworICAgIC8vIFN5c3RlbSBmb250cy4KKyAgICB2aXJ0dWFsIHZvaWQgc3lz
dGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNhbnZhcygpOworICAgIHZvaWQgY3JlYXRlRWRqZSgpOwor
ICAgIHZvaWQgYXBwbHlFZGplQ29sb3JzKCk7CisgICAgdm9pZCBhcHBseVBhcnREZXNjcmlwdGlv
bnMoKTsKKyAgICBjb25zdCBjaGFyKiBlZGplR3JvdXBGcm9tRm9ybVR5cGUoRm9ybVR5cGUgdHlw
ZSkgY29uc3Q7CisgICAgdm9pZCBhcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2YXNfT2JqZWN0KiBv
LCBDb250cm9sU3RhdGVzIHN0YXRlcyk7CisgICAgYm9vbCBwYWludFRoZW1lUGFydChSZW5kZXJP
YmplY3QqIG8sIEZvcm1UeXBlIHR5cGUsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBDb2xvciBt
X2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2FjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yOworICAgIENvbG9yIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7
CisgICAgQ29sb3IgbV9mb2N1c1JpbmdDb2xvcjsKKyAgICBDb2xvciBtX2J1dHRvblRleHRCYWNr
Z3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9idXR0b25UZXh0Rm9yZWdyb3VuZENvbG9yOworICAg
IENvbG9yIG1fY29tYm9UZXh0QmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fY29tYm9UZXh0
Rm9yZWdyb3VuZENvbG9yOworICAgIENvbG9yIG1fZW50cnlUZXh0QmFja2dyb3VuZENvbG9yOwor
ICAgIENvbG9yIG1fZW50cnlUZXh0Rm9yZWdyb3VuZENvbG9yOworICAgIENvbG9yIG1fc2VhcmNo
VGV4dEJhY2tncm91bmRDb2xvcjsKKyAgICBDb2xvciBtX3NlYXJjaFRleHRGb3JlZ3JvdW5kQ29s
b3I7CisgICAgRWNvcmVfRXZhcyogbV9jYW52YXM7CisgICAgRXZhc19PYmplY3QqIG1fZWRqZTsK
KworICAgIHN0cnVjdCBUaGVtZVBhcnREZXNjIHsKKyAgICAgICAgRm9ybVR5cGUgdHlwZTsKKyAg
ICAgICAgTGVuZ3RoU2l6ZSBtaW47CisgICAgICAgIExlbmd0aFNpemUgbWF4OworICAgICAgICBM
ZW5ndGhCb3ggcGFkZGluZzsKKyAgICB9OworICAgIHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb25G
YWxsYmFjayhzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYyk7CisgICAgdm9pZCBhcHBseVBhcnRE
ZXNjcmlwdGlvbihFdmFzX09iamVjdCogbywgc3RydWN0IFRoZW1lUGFydERlc2MqIGRlc2MpOwor
CisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgeworICAgICAgICBGb3JtVHlwZSB0eXBl
OworICAgICAgICBJbnRTaXplIHNpemU7CisgICAgICAgIEVjb3JlX0V2YXMqIGVlOworICAgICAg
ICBFdmFzX09iamVjdCogbzsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlOworICAg
IH07CisKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyBtX3BhcnREZXNjc1tGb3JtVHlwZUxhc3Rd
OworCisgICAgLy8gdGhpcyBzaG91bGQgYmUgc21hbGwgYW5kIG5vdCBzbyBmcmVxdWVudGx5IHVz
ZWQsCisgICAgLy8gc28gdXNlIGEgdmVjdG9yIGFuZCBkbyBsaW5lYXIgc2VhcmNoZXMKKyAgICBW
ZWN0b3I8c3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKj4gbV9wYXJ0Q2FjaGU7CisKKyAgICAv
LyBnZXQgKHVzZSwgY3JlYXRlIG9yIHJlcGxhY2UpIGVudHJ5IGZyb20gY2FjaGUKKyAgICBzdHJ1
Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2FjaGVUaGVtZVBhcnRHZXQoRm9ybVR5cGUgdHlwZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgLy8gZmx1c2ggY2FjaGUsIGRlbGV0aW5nIGFsbCBl
bnRyaWVzCisgICAgdm9pZCBjYWNoZVRoZW1lUGFydEZsdXNoKCk7CisKKyAgICAvLyBpbnRlcm5h
bCwgdXNlZCBieSBjYWNoZVRoZW1lUGFydEdldCgpCisgICAgYm9vbCB0aGVtZVBhcnRDYWNoZUVu
dHJ5UmVzZXQoc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlLCBGb3JtVHlwZSB0eXBlKTsK
KyAgICBib29sIHRoZW1lUGFydENhY2hlRW50cnlTdXJmYWNlQ3JlYXRlKHN0cnVjdCBUaGVtZVBh
cnRDYWNoZUVudHJ5KiBjZSk7CisgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNhY2hl
VGhlbWVQYXJ0TmV3KEZvcm1UeXBlIHR5cGUsIGNvbnN0IEludFNpemUmIHNpemUpOworICAgIHN0
cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjYWNoZVRoZW1lUGFydFJlc2V0KEZvcm1UeXBlIHR5
cGUsIHN0cnVjdCBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjZSk7CisgICAgc3RydWN0IFRoZW1lUGFy
dENhY2hlRW50cnkqIGNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUgdHlwZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkqIGNlKTsKKwor
fTsKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lRWZsX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZWZsL0xhbmd1YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZWZsL0xhbmd1YWdlLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVj
bm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5
c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgZGVmYXVsdExhbmd1YWdlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvQ29va2llSmFyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0Nvb2tpZUphckVmbC5jcHAKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
KworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsK
Kwordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBwb2xpY3lVUkwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY29va2ll
SmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKK30KKworU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGNvb2tp
ZUphci5nZXQodXJsLnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZWZsL01JTUVUeXBlUmVnaXN0cnlFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTUlNRVR5cGVSZWdpc3RyeUVmbC5j
cHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lv
bjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBFeHRlbnNp
b25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwKKyAg
ICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwKKyAg
ICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAor
ICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJpbWFnZS9qcGVn
IiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwgImFwcGxpY2F0
aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJtbmciLCAidmlkZW8veC1tbmciIH0sCisgICAg
eyAicGJtIiwgImltYWdlL3gtcG9ydGFibGUtYml0bWFwIiB9LAorICAgIHsgInBnbSIsICJpbWFn
ZS94LXBvcnRhYmxlLWdyYXltYXAiIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIg
fSwKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgInBwbSIsICJpbWFnZS94LXBv
cnRhYmxlLXBpeG1hcCIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwK
KyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxh
aW4iIH0sCisgICAgeyAidGlmIiwgImltYWdlL3RpZmYiIH0sCisgICAgeyAidGlmZiIsICJpbWFn
ZS90aWZmIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInhibSIsICJp
bWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAorICAgIHsgInhw
bSIsICJpbWFnZS94LXhwbSIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0sCisgICAgeyAi
eGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsgIndtbCIsICJ0ZXh0L3Zu
ZC53YXAud21sIiB9LAorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiB9
LAorICAgIHsgMCwgMCB9Cit9OworCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAgU3RyaW5nIHMgPSBleHQu
bG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUgPSBleHRlbnNpb25NYXA7CisgICAg
d2hpbGUgKGUtPmV4dGVuc2lvbikgeworICAgICAgICBpZiAocyA9PSBlLT5leHRlbnNpb24pCisg
ICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7CisgICAgICAgICsrZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCisrKyBXZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEwLTAyLTI1ICBMZWFuZHJvIFBlcmVpcmEg
IDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4K
KworICAgICAgICBBZGQgRUZMIHBvcnQgZmlsZXMgdG8gcGxhdGZvcm0vZWZsLgorICAgICAgICBo
dHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9DbGlwYm9hcmRFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9Qb3B1cE1lbnVFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9TaGFyZWRUaW1lckVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0v
ZWZsL1JlbmRlclRoZW1lRWZsLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0v
ZWZsL0xhbmd1YWdlLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
Q29va2llSmFyRWZsLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
TUlNRVR5cGVSZWdpc3RyeUVmbC5jcHA6IEFkZGVkLgorCiAyMDEwLTAyLTI1ICBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAg
IFJ1YmJlci1zdGFtcGVkIGJ5IFhhbiBMb3Blei4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49520</attachid>
            <date>2010-02-25 12:34:56 -0800</date>
            <delta_ts>2010-02-26 11:53:02 -0800</delta_ts>
            <desc>Patch 2/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-2.diff</filename>
            <type>text/plain</type>
            <size>21838</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
L2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCkBAIC0wLDAg
KzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29z
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJz
b3IuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxFZGplLmg+
CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0
Zm9ybUN1cnNvciBwKQoreworICAgIG1faW1wbCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHApOwor
fQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1faW1wbCA9
IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1faW1wbCk7Cit9CisKK0N1cnNvcjo6fkN1cnNv
cigpCit7CisgICAgaWYgKG1faW1wbCkgeworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbCht
X2ltcGwpOworICAgICAgICBtX2ltcGwgPSAwOworICAgIH0KK30KKworQ3Vyc29yOjpDdXJzb3Io
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKKyAgICA6IG1faW1wbCgwKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0o
Y29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZihvdGhlci5t
X2ltcGwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG1faW1wbCk7CisgICAgbV9pbXBsID0g
b3RoZXIubV9pbXBsOworICAgIHJldHVybiAqdGhpczsKK30KKworbmFtZXNwYWNlIHsKKworY2xh
c3MgQ3Vyc29ycyB7Citwcm90ZWN0ZWQ6CisgICAgQ3Vyc29ycygpCisgICAgICAgIDogUG9pbnRl
ckN1cnNvcigiY3Vyc29yL3BvaW50ZXIiKQorICAgICAgICAsIE1vdmVDdXJzb3IoImN1cnNvci9t
b3ZlIikKKyAgICAgICAgLCBDcm9zc0N1cnNvcigiY3Vyc29yL2Nyb3NzIikKKyAgICAgICAgLCBI
YW5kQ3Vyc29yKCJjdXJzb3IvaGFuZCIpCisgICAgICAgICwgSUJlYW1DdXJzb3IoImN1cnNvci9p
X2JlYW0iKQorICAgICAgICAsIFdhaXRDdXJzb3IoImN1cnNvci93YWl0IikKKyAgICAgICAgLCBI
ZWxwQ3Vyc29yKCJjdXJzb3IvaGVscCIpCisgICAgICAgICwgRWFzdFJlc2l6ZUN1cnNvcigiY3Vy
c29yL2Vhc3RfcmVzaXplIikKKyAgICAgICAgLCBOb3J0aFJlc2l6ZUN1cnNvcigiY3Vyc29yL25v
cnRoX3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9y
dGhfZWFzdF9yZXNpemUiKQorICAgICAgICAsIE5vcnRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vyc29y
L25vcnRoX3dlc3RfcmVzaXplIikKKyAgICAgICAgLCBTb3V0aFJlc2l6ZUN1cnNvcigiY3Vyc29y
L3NvdXRoX3Jlc2l6ZSIpCisgICAgICAgICwgU291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Iv
c291dGhfZWFzdF9yZXNpemUiKQorICAgICAgICAsIFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vy
c29yL3NvdXRoX3dlc3RfcmVzaXplIikKKyAgICAgICAgLCBXZXN0UmVzaXplQ3Vyc29yKCJjdXJz
b3Ivd2VzdF9yZXNpemUiKQorICAgICAgICAsIE5vcnRoU291dGhSZXNpemVDdXJzb3IoImN1cnNv
ci9ub3J0aF9zb3V0aF9yZXNpemUiKQorICAgICAgICAsIEVhc3RXZXN0UmVzaXplQ3Vyc29yKCJj
dXJzb3IvZWFzdF93ZXN0X3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhFYXN0U291dGhXZXN0UmVz
aXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfZWFzdF9zb3V0aF93ZXN0X3Jlc2l6ZSIpCisgICAgICAg
ICwgTm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0
aF9lYXN0X3Jlc2l6ZSIpCisgICAgICAgICwgQ29sdW1uUmVzaXplQ3Vyc29yKCJjdXJzb3IvY29s
dW1uX3Jlc2l6ZSIpCisgICAgICAgICwgUm93UmVzaXplQ3Vyc29yKCJjdXJzb3Ivcm93X3Jlc2l6
ZSIpCisgICAgICAgICwgTWlkZGxlUGFubmluZ0N1cnNvcigiY3Vyc29yL21pZGRsZV9wYW5uaW5n
IikKKyAgICAgICAgLCBFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL2Vhc3RfcGFubmluZyIpCisg
ICAgICAgICwgTm9ydGhQYW5uaW5nQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfcGFubmluZyIpCisgICAg
ICAgICwgTm9ydGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL25vcnRoX2Vhc3RfcGFubmluZyIp
CisgICAgICAgICwgTm9ydGhXZXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL25vcnRoX3dlc3RfcGFu
bmluZyIpCisgICAgICAgICwgU291dGhQYW5uaW5nQ3Vyc29yKCJjdXJzb3Ivc291dGhfcGFubmlu
ZyIpCisgICAgICAgICwgU291dGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRoX2Vhc3Rf
cGFubmluZyIpCisgICAgICAgICwgU291dGhXZXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRo
X3dlc3RfcGFubmluZyIpCisgICAgICAgICwgV2VzdFBhbm5pbmdDdXJzb3IoImN1cnNvci93ZXN0
X3Bhbm5pbmciKQorICAgICAgICAsIFZlcnRpY2FsVGV4dEN1cnNvcigiY3Vyc29yL3ZlcnRpY2Fs
X3RleHQiKQorICAgICAgICAsIENlbGxDdXJzb3IoImN1cnNvci9jZWxsIikKKyAgICAgICAgLCBD
b250ZXh0TWVudUN1cnNvcigiY3Vyc29yL2NvbnRleHRfbWVudSIpCisgICAgICAgICwgTm9Ecm9w
Q3Vyc29yKCJjdXJzb3Ivbm9fZHJvcCIpCisgICAgICAgICwgQ29weUN1cnNvcigiY3Vyc29yL2Nv
cHkiKQorICAgICAgICAsIFByb2dyZXNzQ3Vyc29yKCJjdXJzb3IvcHJvZ3Jlc3MiKQorICAgICAg
ICAsIEFsaWFzQ3Vyc29yKCJjdXJzb3IvYWxpYXMiKQorICAgICAgICAsIE5vbmVDdXJzb3IoImN1
cnNvci9ub25lIikKKyAgICAgICAgLCBOb3RBbGxvd2VkQ3Vyc29yKCJjdXJzb3Ivbm90X2FsbG93
ZWQiKQorICAgICAgICAsIFpvb21JbkN1cnNvcigiY3Vyc29yL3pvb21faW4iKQorICAgICAgICAs
IFpvb21PdXRDdXJzb3IoImN1cnNvci96b29tX291dCIpCisgICAgICAgICwgR3JhYkN1cnNvcigi
Y3Vyc29yL2dyYWIiKQorICAgICAgICAsIEdyYWJiaW5nQ3Vyc29yKCJjdXJzb3IvZ3JhYmJpbmci
KQorICAgIHsKKyAgICB9CisKKyAgICB+Q3Vyc29ycygpCisgICAgeworICAgIH0KKworcHVibGlj
OgorICAgIHN0YXRpYyBDdXJzb3JzKiBzZWxmKCk7CisgICAgc3RhdGljIEN1cnNvcnMqIHNfc2Vs
ZjsKKworICAgIEN1cnNvciBQb2ludGVyQ3Vyc29yOworICAgIEN1cnNvciBNb3ZlQ3Vyc29yOwor
ICAgIEN1cnNvciBDcm9zc0N1cnNvcjsKKyAgICBDdXJzb3IgSGFuZEN1cnNvcjsKKyAgICBDdXJz
b3IgSUJlYW1DdXJzb3I7CisgICAgQ3Vyc29yIFdhaXRDdXJzb3I7CisgICAgQ3Vyc29yIEhlbHBD
dXJzb3I7CisgICAgQ3Vyc29yIEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIE5vcnRoUmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29y
IE5vcnRoV2VzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgU291dGhSZXNpemVDdXJzb3I7Cisg
ICAgQ3Vyc29yIFNvdXRoRWFzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgU291dGhXZXN0UmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0
aFNvdXRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBFYXN0V2VzdFJlc2l6ZUN1cnNvcjsKKyAg
ICBDdXJzb3IgTm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0
aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIENvbHVtblJlc2l6ZUN1cnNv
cjsKKyAgICBDdXJzb3IgUm93UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBNaWRkbGVQYW5uaW5n
Q3Vyc29yOworICAgIEN1cnNvciBFYXN0UGFubmluZ0N1cnNvcjsKKyAgICBDdXJzb3IgTm9ydGhQ
YW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1
cnNvciBOb3J0aFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBTb3V0aFBhbm5pbmdDdXJz
b3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRo
V2VzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1
cnNvciBWZXJ0aWNhbFRleHRDdXJzb3I7CisgICAgQ3Vyc29yIENlbGxDdXJzb3I7CisgICAgQ3Vy
c29yIENvbnRleHRNZW51Q3Vyc29yOworICAgIEN1cnNvciBOb0Ryb3BDdXJzb3I7CisgICAgQ3Vy
c29yIENvcHlDdXJzb3I7CisgICAgQ3Vyc29yIFByb2dyZXNzQ3Vyc29yOworICAgIEN1cnNvciBB
bGlhc0N1cnNvcjsKKyAgICBDdXJzb3IgTm9uZUN1cnNvcjsKKyAgICBDdXJzb3IgTm90QWxsb3dl
ZEN1cnNvcjsKKyAgICBDdXJzb3IgWm9vbUluQ3Vyc29yOworICAgIEN1cnNvciBab29tT3V0Q3Vy
c29yOworICAgIEN1cnNvciBHcmFiQ3Vyc29yOworICAgIEN1cnNvciBHcmFiYmluZ0N1cnNvcjsK
K307CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNfc2VsZiA9IDA7CisKK0N1cnNvcnMqIEN1cnNvcnM6
OnNlbGYoKQoreworICAgIGlmICghc19zZWxmKQorICAgICAgICBzX3NlbGYgPSBuZXcgQ3Vyc29y
cygpOworCisgICAgcmV0dXJuIHNfc2VsZjsKK30KKworfQorCitjb25zdCBDdXJzb3ImIHBvaW50
ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBvaW50ZXJDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+TW92ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7
CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Q3Jvc3NDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SGFuZEN1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1
cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+V2FpdEN1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5I
ZWxwQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RSZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
Pk5vcnRoUmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhFYXN0UmVzaXplQ3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5Tb3V0aFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoRWFzdFJlc2l6
ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFJlc2l6ZUN1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6
c2VsZigpLT5XZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoU291dGhS
ZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RXZXN0UmVzaXplQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJu
IEN1cnNvcnM6OnNlbGYoKS0+Q29sdW1uUmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Um93UmVz
aXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1pZGRsZVBhbm5pbmdDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk1pZGRsZVBhbm5pbmdDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpz
ZWxmKCktPkVhc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoUGFubmlu
Z0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhQYW5uaW5nQ3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoRWFzdFBhbm5pbmdDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNv
cnM6OnNlbGYoKS0+Tm9ydGhXZXN0UGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBz
b3V0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRo
UGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Tb3V0aEVhc3RQYW5uaW5nQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFBhbm5pbmdDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxm
KCktPldlc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+VmVydGljYWxUZXh0Q3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3Jz
OjpzZWxmKCktPkNlbGxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvbnRleHRNZW51Q3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+Tm9Ecm9wQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvcHlDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBy
b2dyZXNzQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICBy
ZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5BbGlhc0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBu
b25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Ob25lQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPk5vdEFsbG93ZWRDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbUlu
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5ab29tSW5DdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+Wm9vbU91dEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5HcmFiQ3Vyc29yOworfQorCitjb25zdCBD
dXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5H
cmFiYmluZ0N1cnNvcjsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9jYWxp
emVkU3RyaW5nc0VmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZsLmNwcApAQCAtMCwwICsxLDQwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8u
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1N0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJTdWJtaXQiKTsKK30KKworU3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTdWJtaXQiKTsKK30KKworU3RyaW5n
IHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiUmVzZXQiKTsKK30KKworU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9TZWFyY2hhYmxlIEluZGV4Iik7Cit9CisK
K1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiQ2hvb3NlIEZpbGUiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVT
ZWxlY3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8gZmlsZSBz
ZWxlY3RlZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4gTGluayBpbiBOZXcg
X1dpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9E
aXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiX0Rvd25sb2FkIExpbmtlZCBG
aWxlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJk
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29weSBMaW5rIExvY19hdGlvbiIp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJPcGVuIF9JbWFnZSBpbiBOZXcgV2luZG93
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiU2FfdmUgSW1hZ2UgQXMiKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29wX3kgSW1hZ2UiKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOCgiQ29weSIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJEZWxldGUiKTsKKyAgICByZXR1cm4gc3RvY2tM
YWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCit7CisgICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiU2VsZWN0IF9BbGwi
KTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfSW5zZXJ0IFVuaWNv
ZGUgQ29udHJvbCBDaGFyYWN0ZXIiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIklucHV0IF9NZXRo
b2RzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKQoreworICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkdvX0JhY2siKTsKKyAg
ICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9y
d2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRG
OCgiR29fRm9yd2FyZCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnU3RvcCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOCgiU3RvcCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiX1JlbG9hZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkK
K3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJDdXQi
KTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1Bhc3RlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21V
VEY4KCJQYXN0ZSIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJObyBHdWVzc2VzIEZvdW5kIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVTcGVsbGluZygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9JZ25vcmUg
U3BlbGxpbmciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmco
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfTGVhcm4gU3BlbGxpbmciKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoIl9TZWFyY2ggdGhlIFdlYiIpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgiX0xvb2sgVXAgaW4gRGljdGlvbmFyeSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnT3BlbkxpbmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfT3BlbiBM
aW5rIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiSWdub3JlIF9HcmFtbWFyIik7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChzaG93ID8gIlNob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiIDogIkhp
ZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfQ2hlY2sg
RG9jdW1lbnQgTm93Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nV2hpbGVUeXBpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJDaGVjayBT
cGVsbGluZyBXaGlsZSBfVHlwaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdGb250TWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9Gb250
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkKK3sKKyAgICBzdGF0aWMg
U3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJCb2xkIik7CisgICAgcmV0dXJu
IHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQorewor
ICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkl0YWxpYyIp
OworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VW5kZXJsaW5lKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZy
b21VVEY4KCJVbmRlcmxpbmUiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJfT3V0bGluZSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJJbnNwZWN0IF9FbGVtZW50
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCit7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmln
aHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpCit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgc2VhcmNoTWVudU5v
UmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8g
cmVjZW50IHNlYXJjaGVzIik7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiUmVjZW50IHNlYXJjaGVzIik7
Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfQ2xlYXIgcmVjZW50IHNlYXJjaGVzIik7Cit9CisK
K1N0cmluZyBBWERlZmluaXRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KCJ0ZXJtIik7Cit9CisKK1N0cmluZyBBWERlZmluaXRpb25MaXN0RGVmaW5pdGlv
blRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJkZWZpbml0aW9uIik7Cit9
CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJwcmVzcyIpOworfQorCitTdHJpbmcgQVhSYWRpb0J1dHRvbkFjdGlvblZlcmIoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJzZWxlY3QiKTsKK30KKworU3RyaW5nIEFY
VGV4dEZpZWxkQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoImFj
dGl2YXRlIik7Cit9CisKK1N0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ1bmNoZWNrIik7Cit9CisKK1N0cmluZyBBWFVu
Y2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoImNoZWNrIik7Cit9CisKK1N0cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOCgianVtcCIpOworfQorCitTdHJpbmcgdW5rbm93bkZpbGVTaXpl
VGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlVua25vd24iKTsKK30KKwor
U3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJMb2FkaW5nLi4uIik7Cit9CisKK1N0cmluZyBtZWRpYUVsZW1lbnRM
aXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgi
TGl2ZSBCcm9hZGNhc3QiKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVybk1p
c21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInBhdHRlcm4gbWlz
bWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSBvdmVyZmxvdyIpOworfQor
CitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSB1bmRlcmZsb3ciKTsKK30KKworU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoInN0ZXAgbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VG9vTG9uZ1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0b28gbG9uZyIp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidHlwZSBtaXNtYXRjaCIpOworfQorCitTdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgidmFsdWUgbWlzc2luZyIpOworfQorCitTdHJpbmcgQVhNZW51TGlzdFBvcHVw
QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhNZW51
TGlzdEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2VhcmNoUG9wdXBNZW51RWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1NlYXJjaFBvcHVwTWVudUVmbC5j
cHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIElu
c3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlYXJjaFBvcHVw
TWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogUG9w
dXBNZW51KGNsaWVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNlYXJj
aFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNl
YXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZl
Y3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNlYXJj
aFBvcHVwTWVudTo6ZW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjUgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxl
cyB0byBwbGF0Zm9ybS9lZmwuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzUwODcKKwor
ICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0xvY2FsaXplZFN0cmluZ3NFZmwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TZWFyY2hQb3B1cE1lbnVFZmwuY3Bw
OiBBZGRlZC4KKwogMjAxMC0wMi0yNSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5u
b3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBYYW4g
TG9wZXouCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49521</attachid>
            <date>2010-02-25 12:35:21 -0800</date>
            <delta_ts>2010-02-26 12:24:54 -0800</delta_ts>
            <desc>Patch 3/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-3.diff</filename>
            <type>text/plain</type>
            <size>23336</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCkBA
IC0wLDAgKzEsMjE1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZworICogICAgICAgICAgICAoQykgMjAwOSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogICAgICAgICAgICAoQykgMjAwOSBJTmRULCBJ
bnN0aXR1dG8gTm9raWEgZGUgVGVjaG5vbG9naWEKKyAqICAgICAgICAgICAgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAgICAgICAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJFZmwuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1
ZGUgPHN0cmluZz4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3Jv
bGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2Nyb2xsYmFyRWZsKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpKTsKK30KKworU2Ny
b2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSkKKyAg
ICAsIG1fbGFzdFBvcygwKQorICAgICwgbV9sYXN0VG90YWxTaXplKDApCisgICAgLCBtX2xhc3RW
aXNpYmxlU2l6ZSgwKQoreworICAgIFdpZGdldDo6c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwg
MCwgMCkpOworfQorCitTY3JvbGxiYXJFZmw6On5TY3JvbGxiYXJFZmwoKQoreworICAgIGlmICgh
ZXZhc09iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfZGVsKGV2YXNP
YmplY3QoKSk7CisgICAgc2V0RXZhc09iamVjdCgwKTsKK30KKworc3RhdGljIHZvaWQgc2Nyb2xs
YmFyRWZsRWRqZU1lc3NhZ2Uodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIEVkamVfTWVzc2Fn
ZV9UeXBlIHR5cGUsIGludCBpZCwgdm9pZCogbXNnKQoreworICAgIFNjcm9sbGJhckVmbDo6U2Ny
b2xsYmFyRWZsKiB0aGF0ID0gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwq
PihkYXRhKTsKKyAgICBFZGplX01lc3NhZ2VfRmxvYXQqIG07CisgICAgaW50IHY7CisKKyAgICBp
ZiAoIWlkKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiVW5rbm93biBtZXNzYWdlIGlkICclZCcg
ZnJvbSBzY3JvbGwgYmFyIHRoZW1lLiIsIGlkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh0eXBlICE9IEVESkVfTUVTU0FHRV9GTE9BVCkgeworICAgICAgICBFSU5BX0xPR19F
UlIoIk1lc3NhZ2UgaWQgJyVkJyBvZiBpbmNvcnJlY3QgdHlwZSBmcm9tIHNjcm9sbCBiYXIgdGhl
bWUuICIKKyAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCAnJWQnLCBnb3QgJyVkJy4iLAor
ICAgICAgICAgICAgICAgICAgICAgaWQsIEVESkVfTUVTU0FHRV9GTE9BVCwgdHlwZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtID0gc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zs
b2F0Kj4obXNnKTsKKyAgICB2ID0gbS0+dmFsICogKHRoYXQtPnRvdGFsU2l6ZSgpIC0gdGhhdC0+
dmlzaWJsZVNpemUoKSk7CisgICAgdGhhdC0+c2V0VmFsdWUodik7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyRWZsOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmlldykKK3sKKyAgICBFdmFzX09iamVjdCog
byA9IGV2YXNPYmplY3QoKTsKKyAgICBFdmFzX0Nvb3JkIHcsIGg7CisKKyAgICBXaWRnZXQ6OnNl
dFBhcmVudCh2aWV3KTsKKworICAgIGlmICghbykgeworICAgICAgICBpZiAoIXZpZXcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbyA9IGVkamVfb2JqZWN0X2FkZCh2aWV3LT5ldmFz
KCkpOworICAgICAgICBpZiAoIW8pIHsKKyAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQg
bm90IGNyZWF0ZSBlZGplIG9iamVjdCBmb3Igdmlldz0lcCAoZXZhcz0lcCkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpZXcsIHZpZXctPmV2YXMoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9oYW5kbGVyX3NldChvLCBz
Y3JvbGxiYXJFZmxFZGplTWVzc2FnZSwgdGhpcyk7CisgICAgICAgIHNldEV2YXNPYmplY3Qobyk7
CisgICAgfSBlbHNlIGlmICghdmlldykgeworICAgICAgICBldmFzX29iamVjdF9oaWRlKG8pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgY2hhciogZ3JvdXAgPSAob3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICA/ICJzY3JvbGxiYXIuaG9y
aXpvbnRhbCIgOiAic2Nyb2xsYmFyLnZlcnRpY2FsIjsKKyAgICBTdHJpbmcgdGhlbWUoZWRqZVRo
ZW1lUmVjdXJzaXZlKCkpOworCisgICAgaWYgKHRoZW1lLmlzRW1wdHkoKSkgeworICAgICAgICBF
SU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkIHRoZW1lICclcyc6IG5vIHRoZW1lIHBhdGggc2V0
LiIsIGdyb3VwKTsKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZShvKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQobywgdGhlbWUudXRmOCgp
LmRhdGEoKSwgZ3JvdXApKSB7CisgICAgICAgIGludCBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vy
cm9yX2dldChvKTsKKyAgICAgICAgY29uc3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9y
X3N0cihlcnIpOworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkIHRoZW1lICcl
cycgZnJvbSBmaWxlICclcyc6ICMlZCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIHRoZW1l
LnV0ZjgoKS5kYXRhKCksIGdyb3VwLCBlcnIsIGVycm1zZyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzZXRQbGF0Zm9ybVdpZGdldChvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKG8sIHZpZXctPmV2YXNPYmplY3QoKSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhv
KTsKKworICAgIGVkamVfb2JqZWN0X3NpemVfbWluX2dldChvLCAmdywgJmgpOworCisgICAgSW50
UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgcmVjdC5zZXRTaXplKEludFNpemUodywgaCkp
OworICAgIHNldEZyYW1lUmVjdChyZWN0KTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OnVwZGF0
ZVRodW1iUG9zaXRpb24oKQoreworICAgIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0aW9u
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQorewor
ICAgIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0aW9uKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyRWZsOjp1cGRhdGVUaHVtYlBvc2l0aW9uQW5kUHJvcG9ydGlvbigpCit7CisgICAgaWYgKCFw
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgcG9zID0gY3VycmVu
dFBvcygpOworICAgIGludCB0U2l6ZSA9IHRvdGFsU2l6ZSgpOworICAgIGludCB2U2l6ZSA9IHZp
c2libGVTaXplKCk7CisKKyAgICBpZiAobV9sYXN0UG9zID09IHBvcworICAgICAgICAmJiBtX2xh
c3RUb3RhbFNpemUgPT0gdFNpemUKKyAgICAgICAgJiYgbV9sYXN0VmlzaWJsZVNpemUgPT0gdlNp
emUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdFBvcyA9IHBvczsKKyAgICBtX2xhc3RU
b3RhbFNpemUgPSB0U2l6ZTsKKyAgICBtX2xhc3RWaXNpYmxlU2l6ZSA9IHZTaXplOworCisgICAg
RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCogbXNnID0gc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zs
b2F0X1NldCo+CisgICAgICAgIChhbGxvY2Eoc2l6ZW9mKEVkamVfTWVzc2FnZV9GbG9hdF9TZXQp
ICsgc2l6ZW9mKGZsb2F0KSkpOworICAgIG1zZy0+Y291bnQgPSAyOworCisgICAgaWYgKHRTaXpl
IC0gdlNpemUgPiAwKQorICAgICAgICBtc2ctPnZhbFswXSA9IHBvcyAvIChmbG9hdCkodFNpemUg
LSB2U2l6ZSk7CisgICAgZWxzZQorICAgICAgICBtc2ctPnZhbFswXSA9IDAuMDsKKworICAgIGlm
ICh0U2l6ZSA+IDApCisgICAgICAgIG1zZy0+dmFsWzFdID0gdlNpemUgLyAoZmxvYXQpdFNpemU7
CisgICAgZWxzZQorICAgICAgICBtc2ctPnZhbFsxXSA9IDAuMDsKKworICAgIGVkamVfb2JqZWN0
X21lc3NhZ2Vfc2VuZChwbGF0Zm9ybVdpZGdldCgpLCBFREpFX01FU1NBR0VfRkxPQVRfU0VULCAw
LCBtc2cpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7CisgICAgZnJhbWVS
ZWN0c0NoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OmZyYW1lUmVjdHNDaGFuZ2Vk
KCkKK3sKKyAgICBFdmFzX09iamVjdCogbyA9IHBsYXRmb3JtV2lkZ2V0KCk7CisgICAgRXZhc19D
b29yZCB4LCB5OworCisgICAgaWYgKCFwYXJlbnQoKSB8fCAhbykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgaWYgKHBhcmVudCgpLT5pc1Nj
cm9sbFZpZXdTY3JvbGxiYXIodGhpcykpCisgICAgICAgIHJlY3Quc2V0TG9jYXRpb24ocGFyZW50
KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7CisgICAgZWxz
ZQorICAgICAgICByZWN0LnNldExvY2F0aW9uKHBhcmVudCgpLT5jb250ZW50c1RvV2luZG93KHJl
Y3QubG9jYXRpb24oKSkpOworCisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHJvb3QoKS0+
ZXZhc09iamVjdCgpLCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X21vdmUobywgeCAr
IHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShvLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworfQorCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNwcApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCit7CisgICAgZWNv
cmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudEVmbC5jcHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDggRGllZ28gSGlkYWxnbyBDLiBHb256YWxlegorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IEtleU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4g
V2luZG93c0tleU1hcDsKKworc3RhdGljIEtleU1hcCBnS2V5TWFwOworc3RhdGljIFdpbmRvd3NL
ZXlNYXAgZ1dpbmRvd3NLZXlNYXA7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUtleU1hcCgpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIFN0cmlu
ZyBrZXkgPSBTdHJpbmc6OmZvcm1hdCgiRiVkIiwgaSk7CisgICAgICAgIGdLZXlNYXAuc2V0KGtl
eSwga2V5KTsKKyAgICB9CisgICAgZ0tleU1hcC5zZXQoIkFsdF9MIiwgIkFsdCIpOworICAgIGdL
ZXlNYXAuc2V0KCJJU09fTGV2ZWwzX1NoaWZ0IiwgIkFsdCIpOworICAgIGdLZXlNYXAuc2V0KCJN
ZW51IiwgIkFsdCIpOworICAgIGdLZXlNYXAuc2V0KCJTaGlmdF9MIiwgIlNoaWZ0Iik7CisgICAg
Z0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAiU2hpZnQiKTsKKyAgICBnS2V5TWFwLnNldCgiRG93biIs
ICJEb3duIik7CisgICAgZ0tleU1hcC5zZXQoIkVuZCIsICJFbmQiKTsKKyAgICBnS2V5TWFwLnNl
dCgiUmV0dXJuIiwgIkVudGVyIik7CisgICAgZ0tleU1hcC5zZXQoIktQX0VudGVyIiwgIkVudGVy
Iik7CisgICAgZ0tleU1hcC5zZXQoIkhvbWUiLCAiSG9tZSIpOworICAgIGdLZXlNYXAuc2V0KCJJ
bnNlcnQiLCAiSW5zZXJ0Iik7CisgICAgZ0tleU1hcC5zZXQoIkxlZnQiLCAiTGVmdCIpOworICAg
IGdLZXlNYXAuc2V0KCJEb3duIiwgIkRvd24iKTsKKyAgICBnS2V5TWFwLnNldCgiTmV4dCIsICJQ
YWdlRG93biIpOworICAgIGdLZXlNYXAuc2V0KCJQcmlvciIsICJQYWdlVXAiKTsKKyAgICBnS2V5
TWFwLnNldCgiUmlnaHQiLCAiUmlnaHQiKTsKKyAgICBnS2V5TWFwLnNldCgiVXAiLCAiVXAiKTsK
KyAgICBnS2V5TWFwLnNldCgiRGVsZXRlIiwgIlUrMDA3RiIpOworICAgIGdLZXlNYXAuc2V0KCJU
YWIiLCAiVSswMDA5Iik7CisgICAgZ0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsICJVKzAwMDki
KTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlV2luZG93c0tleU1hcCgpCit7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJSZXR1cm4iLCAgICAgVktfUkVUVVJOKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoIktQX1JldHVybiIsICBWS19SRVRVUk4pOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
QWx0X0wiLCAgICAgIFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiSVNPX0xldmVs
M19TaGlmdCIsIFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTWVudSIsICAgICAg
IFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfTCIsICAgIFZLX1NISUZU
KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAgICBWS19TSElGVCk7CisgICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJDb250cm9sX0wiLCAgVktfQ09OVFJPTCk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJDb250cm9sX1IiLCAgVktfQ09OVFJPTCk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJQYXVzZSIsICAgICAgVktfUEFVU0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
QnJlYWsiLCAgICAgIFZLX1BBVVNFKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkNhcHNfTG9j
ayIsICBWS19DQVBJVEFMKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlNjcm9sbF9Mb2NrIiwg
VktfU0NST0xMKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIk51bV9Mb2NrIiwgICBWS19OVU1M
T0NLKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkVzY2FwZSIsICAgICBWS19FU0NBUEUpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiVGFiIiwgICAgICAgIFZLX1RBQik7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJJU09fTGVmdF9UYWIiLCBWS19UQUIpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiQmFja1NwYWNlIiwgIFZLX0JBQ0spOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU3Bh
Y2UiLCAgICAgIFZLX1NQQUNFKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIk5leHQiLCAgICAg
ICBWS19ORVhUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlByaW9yIiwgICAgICBWS19QUklP
Uik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJIb21lIiwgICAgICAgVktfSE9NRSk7CisgICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJFbmQiLCAgICAgICAgVktfRU5EKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoIlJpZ2h0IiwgICAgICBWS19SSUdIVCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0
KCJMZWZ0IiwgICAgICAgVktfTEVGVCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJVcCIsICAg
ICAgICAgVktfVVApOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRG93biIsICAgICAgIFZLX0RP
V04pOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpbnQiLCAgICAgIFZLX1BSSU5UKTsKKyAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkluc2VydCIsICAgICBWS19JTlNFUlQpOworICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiRGVsZXRlIiwgICAgIFZLX0RFTEVURSk7CisKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoImNvbW1hIiwgICAgICAgIFZLX09FTV9DT01NQSk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJsZXNzIiwgICAgICAgICBWS19PRU1fQ09NTUEpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgicGVyaW9kIiwgICAgICAgVktfT0VNX1BFUklPRCk7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJncmVhdGVyIiwgICAgICBWS19PRU1fUEVSSU9EKTsKKyAgICBnV2luZG93c0tleU1hcC5z
ZXQoInNlbWljb2xvbiIsICAgIFZLX09FTV8xKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImNv
bG9uIiwgICAgICAgIFZLX09FTV8xKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInNsYXNoIiwg
ICAgICAgIFZLX09FTV8yKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInF1ZXN0aW9uIiwgICAg
IFZLX09FTV8yKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImdyYXZlIiwgICAgICAgIFZLX09F
TV8zKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImFzY2lpdGlsZGUiLCAgIFZLX09FTV8zKTsK
KyAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNrZXRsZWZ0IiwgIFZLX09FTV80KTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoImJyYWNlbGVmdCIsICAgIFZLX09FTV80KTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoImJhY2tzbGFzaCIsICAgIFZLX09FTV81KTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImJhciIsICAgICAgICAgIFZLX09FTV81KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
ImJyYWNrZXRyaWdodCIsIFZLX09FTV82KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNl
cmlnaHQiLCAgIFZLX09FTV82KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImFwb3N0cm9waGUi
LCAgIFZLX09FTV83KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInF1b3RlZGJsIiwgICAgIFZL
X09FTV83KTsKKworICAgIC8vIEFscGhhYmV0CisgICAgU3RyaW5nIGFscGhhYmV0ID0gImFiY2Rl
ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IDI2OyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IFN0cmluZzo6Zm9ybWF0KCIlYyIsIGFs
cGhhYmV0W2ldKTsKKyAgICAgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KGtleSwgVktfQSArIGkpOwor
ICAgIH0KKworICAgIC8vIERpZ2l0cworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
MTA7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgaSk7
CisgICAgICAgIGdXaW5kb3dzS2V5TWFwLnNldChrZXksIFZLXzAgKyBpKTsKKyAgICB9CisKKyAg
ICAvLyBTaGlmdGVkIGRpZ2l0cworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZXhjbGFtIiwgICAg
VktfMSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhdCIsICAgICAgICBWS18yKTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoIm51bWJlcnNpZ24iLCBWS18zKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImRvbGxhciIsICAgIFZLXzQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGVyY2Vu
dCIsICAgVktfNSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhc2NpaWNpcmN1bSIsIFZLXzYp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYW1wZXJzYW5kIiwgVktfNyk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJhc3RlcmlzayIsICBWS184KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
InBhcmVubGVmdCIsIFZLXzkpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGFyZW5yaWdodCIs
IFZLXzApOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgibWludXMiLCAgICAgVktfT0VNX01JTlVT
KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInVuZGVyc2NvcmUiLCBWS19PRU1fTUlOVVMpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZXF1YWwiLCAgICAgVktfT0VNX1BMVVMpOworICAgIGdX
aW5kb3dzS2V5TWFwLnNldCgicGx1cyIsICAgICAgVktfT0VNX1BMVVMpOworCisgICAgLy8gRl9Y
WAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgeworICAgICAgICBT
dHJpbmcga2V5ID0gU3RyaW5nOjpmb3JtYXQoIkYlZCIsIGkpOworICAgICAgICBnV2luZG93c0tl
eU1hcC5zZXQoa2V5LCBWS19GMSArIGkpOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBrZXlJ
ZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5nJiBrZXlOYW1lKQoreworICAgIGlmIChnS2V5
TWFwLmlzRW1wdHkoKSkKKyAgICAgICAgY3JlYXRlS2V5TWFwKCk7CisKKyAgICBpZiAoZ0tleU1h
cC5jb250YWlucyhrZXlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGdLZXlNYXAuZ2V0KGtleU5hbWUp
OworCisgICAgcmV0dXJuIGtleU5hbWU7Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVG
b3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUpCit7CisgICAgaWYgKGdXaW5kb3dzS2V5TWFw
LmlzRW1wdHkoKSkKKyAgICAgICAgY3JlYXRlV2luZG93c0tleU1hcCgpOworCisgICAgaWYgKGdX
aW5kb3dzS2V5TWFwLmNvbnRhaW5zKGtleU5hbWUpKQorICAgICAgICByZXR1cm4gZ1dpbmRvd3NL
ZXlNYXAuZ2V0KGtleU5hbWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24q
IGV2KQorICAgIDogbV90eXBlKEtleURvd24pCisgICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9k
aWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAgLCBtX3NoaWZ0S2V5KGV2
YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1f
Y3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wi
KSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJz
LCAiQWx0IikpCisgICAgLCBtX3RleHQoU3RyaW5nOjpmcm9tVVRGOChldi0+c3RyaW5nKSkKK3sK
KyAgICBTdHJpbmcga2V5TmFtZSA9IFN0cmluZyhldi0+a2V5KTsKKyAgICBtX2tleUlkZW50aWZp
ZXIgPSBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisgICAgbV93aW5kb3dz
VmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvckV2YXNLZXlOYW1lKGtleU5hbWUpOwor
CisgICAgLy8gRklYTUU6CisgICAgbV9pc0tleXBhZCA9IGZhbHNlOworICAgIG1fYXV0b1JlcGVh
dCA9IGZhbHNlOworfQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudChjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogZXYpCisgICAgOiBtX3R5cGUoS2V5VXApCisg
ICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJN
ZXRhIikpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9k
aWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19z
ZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21v
ZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX3RleHQoU3RyaW5n
Ojpmcm9tVVRGOChldi0+c3RyaW5nKSkKK3sKKyAgICBTdHJpbmcga2V5TmFtZSA9IFN0cmluZyhl
di0+a2V5KTsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5h
bWUoa2V5TmFtZSk7CisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29k
ZUZvckV2YXNLZXlOYW1lKGtleU5hbWUpOworCisgICAgLy8gRklYTUU6CisgICAgbV9pc0tleXBh
ZCA9IGZhbHNlOworICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOworfQorCit2b2lkIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIG1fdHlwZSA9IHR5cGU7CisK
KyAgICBpZiAodHlwZSA9PSBSYXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmluZygp
OworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojpj
dXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9E
cmFnSW1hZ2VFZmwuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCit7CisgICAg
cmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK3ZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZikKK3sKK30KKworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBp
bWFnZSwgRmxvYXRTaXplKQoreworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJhZ0ltYWdlUmVm
IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQor
eworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZShJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQoreworICAgIHJldHVy
biAwOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybU1vdXNlRXZl
bnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUGxhdGZvcm1Nb3VzZUV2ZW50RWZsLmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtTW91c2VF
dmVudDo6c2V0Q2xpY2tDb3VudChFdmFzX0J1dHRvbl9GbGFncyBmbGFncykKK3sKKyAgICBpZiAo
ZmxhZ3MgJiBFVkFTX0JVVFRPTl9UUklQTEVfQ0xJQ0spCisgICAgICAgIG1fY2xpY2tDb3VudCA9
IDM7CisgICAgZWxzZSBpZiAoZmxhZ3MgJiBFVkFTX0JVVFRPTl9ET1VCTEVfQ0xJQ0spCisgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDI7CisgICAgZWxzZQorICAgICAgICBtX2NsaWNrQ291bnQgPSAx
OworfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBFdmFz
X0V2ZW50X01vdXNlX0Rvd24qIGV2LCBJbnRQb2ludCBwb3MpCisgICAgOiBtX3RpbWVzdGFtcChj
dXJyZW50VGltZSgpKQorICAgICwgbV9zaGlmdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQo
ZXYtPm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBtX2N0cmxLZXkoZXZhc19rZXlfbW9kaWZp
ZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9sIikpCisgICAgLCBtX2FsdEtleShldmFz
X2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkFsdCIpKQorICAgICwgbV9tZXRh
S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiTWV0YSIpKQorICAg
ICwgbV9nbG9iYWxQb3NpdGlvbihJbnRQb2ludChldi0+Y2FudmFzLngsIGV2LT5jYW52YXMueSkp
CisgICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCAtIHBvcy54KCksIGV2LT5j
YW52YXMueSAtIHBvcy55KCkpKQorICAgICwgbV9idXR0b24oTW91c2VCdXR0b24oZXYtPmJ1dHRv
biAtIDEpKQorICAgICwgbV9ldmVudFR5cGUoTW91c2VFdmVudFByZXNzZWQpCit7CisgICAgc2V0
Q2xpY2tDb3VudChldi0+ZmxhZ3MpOworfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiBldiwgSW50UG9pbnQgcG9zKQor
ICAgIDogbV90aW1lc3RhbXAoY3VycmVudFRpbWUoKSkKKyAgICAsIG1fc2hpZnRLZXkoZXZhc19r
ZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJTaGlmdCIpKQorICAgICwgbV9jdHJs
S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQ29udHJvbCIpKQor
ICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJB
bHQiKSkKKyAgICAsIG1fbWV0YUtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlm
aWVycywgIk1ldGEiKSkKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oSW50UG9pbnQoZXYtPmNhbnZh
cy54LCBldi0+Y2FudmFzLnkpKQorICAgICwgbV9wb3NpdGlvbihJbnRQb2ludChldi0+Y2FudmFz
LnggLSBwb3MueCgpLCBldi0+Y2FudmFzLnkgLSBwb3MueSgpKSkKKyAgICAsIG1fYnV0dG9uKE1v
dXNlQnV0dG9uKGV2LT5idXR0b24gLSAxKSkKKyAgICAsIG1fZXZlbnRUeXBlKE1vdXNlRXZlbnRS
ZWxlYXNlZCkKK3sKKyAgICBzZXRDbGlja0NvdW50KGV2LT5mbGFncyk7Cit9CisKK1BsYXRmb3Jt
TW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92
ZSogZXYsIEludFBvaW50IHBvcykKKyAgICA6IG1fdGltZXN0YW1wKGN1cnJlbnRUaW1lKCkpCisg
ICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAi
U2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1v
ZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lz
X3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9k
aWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKEludFBvaW50KGV2LT5jdXIuY2FudmFzLngsIGV2LT5jdXIuY2FudmFzLnkpKQorICAgICwg
bV9wb3NpdGlvbihJbnRQb2ludChldi0+Y3VyLmNhbnZhcy54IC0gcG9zLngoKSwgZXYtPmN1ci5j
YW52YXMueSAtIHBvcy55KCkpKQorICAgICwgbV9jbGlja0NvdW50KDApCisgICAgLCBtX2J1dHRv
bihNb3VzZUJ1dHRvbihldi0+YnV0dG9ucyAtIDEpKQorICAgICwgbV9ldmVudFR5cGUoTW91c2VF
dmVudE1vdmVkKQoreworfQorCit9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZworKysgV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxMC0wMi0yNSAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9i
aT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgQWRkIEVGTCBwb3J0
IGZpbGVzIHRvIHBsYXRmb3JtL2VmbC4KKyAgICAgICAgaHR0cDovL3dlYmtpdC5vcmcvYi8zNTA4
NworCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmNwcDogQWRk
ZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNwcDogQWRk
ZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50
RWZsLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0ltYWdl
RWZsLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1N
b3VzZUV2ZW50RWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDItMjUgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgWGFuIExvcGV6Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49522</attachid>
            <date>2010-02-25 12:35:52 -0800</date>
            <delta_ts>2010-02-26 12:31:36 -0800</delta_ts>
            <desc>Patch 4/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-4.diff</filename>
            <type>text/plain</type>
            <size>25580</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIENsaXBi
b2FyZEVmbF9oCisjZGVmaW5lIENsaXBib2FyZEVmbF9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2FjaGVkSW1hZ2U7CisKK2NsYXNzIENs
aXBib2FyZEVmbCA6IHB1YmxpYyBDbGlwYm9hcmQgeworcHVibGljOgorICAgIENsaXBib2FyZEVm
bChDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGJvb2wpOworICAgIH5DbGlwYm9hcmRFZmwoKTsKKwor
CisgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbGVhckFsbERh
dGEoKTsKKyAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJikgY29uc3Q7Cisg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworCisgICAgSGFz
aFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBmaWxlcygpIGNvbnN0OworCisgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7
CisgICAgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RHJhZ0lt
YWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICBOb2RlKiBkcmFnSW1hZ2VF
bGVtZW50KCk7CisgICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQ
b2ludCYpOworCisgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShF
bGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAgdmlydHVh
bCB2b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAg
IHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNEYXRhKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJik7Cit9OworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZWZsL1Njcm9sbGJhckVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNu
b2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU2Nyb2xsYmFyRWZsX2gKKyNkZWZpbmUgU2Nyb2xsYmFyRWZsX2gKKworI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckVmbCA6
IHB1YmxpYyBTY3JvbGxiYXIgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxiYXI7
CisKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJFZmwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRG
cmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNl
TW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlT3V0RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VQcmVz
c0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0No
YW5nZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworCitwcm90ZWN0ZWQ6CisgICAgU2Nyb2xs
YmFyRWZsKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbkFuZFBy
b3BvcnRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmlldyk7CisKK3ByaXZhdGU6CisgICAgaW50IG1fbGFz
dFBvczsKKyAgICBpbnQgbV9sYXN0VG90YWxTaXplOworICAgIGludCBtX2xhc3RWaXNpYmxlU2l6
ZTsKK307CisKK30KKworI2VuZGlmIC8vIFNjcm9sbGJhckVmbF9oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVs
bAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcApAQCAtMCww
ICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMg
SW5jLiA8aW5mb0BzdGFpa29zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5z
dGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
bnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRleHRNZW51SXRl
bTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShD
b250ZXh0TWVudSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ29udGV4dE1lbnVJ
dGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSwgQ29udGV4dE1lbnVBY3Rp
b24sIGNvbnN0IFN0cmluZyYsIENvbnRleHRNZW51KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitDb250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1BsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVu
dUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisKK0NvbnRleHRNZW51
SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBBY3Rpb25UeXBlOworfQorCit2b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0VHlwZShDb250ZXh0TWVudUl0ZW1UeXBlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0NvbnRleHRNZW51QWN0aW9uIENvbnRleHRNZW51SXRlbTo6YWN0aW9uKCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdO
b0FjdGlvbjsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVu
dUFjdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgQ29udGV4dE1l
bnVJdGVtOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BsYXRmb3JtTWVudURlc2Ny
aXB0aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0U3ViTWVudShDb250ZXh0TWVudSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZChib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
ZWZsL1Bhc3RlYm9hcmRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvUGFzdGVib2FyZEVmbC5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJv
YXJkKCkKK3sKKyAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IG5ldyBQYXN0ZWJv
YXJkKCk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQ7Cit9CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9h
cmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3RlYm9hcmQ6On5QYXN0ZWJv
YXJkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
Ym9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpj
bGVhcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjpj
YW5TbWFydFJlcGxhY2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3Vt
ZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRl
eHQoRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJUaGVtZUVmbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xs
YmFyVGhlbWVFZmwuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJ
TmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVFZmxfaAorI2RlZmluZSBTY3JvbGxi
YXJUaGVtZUVmbF9oCisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lRWZsIDogcHVibGljIFNjcm9sbGJhclRo
ZW1lIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUVmbCgpOworCisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVn
dWxhclNjcm9sbGJhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTY3JvbGxiYXIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKTsKKworCit9OworCit9CisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZWZsL0tVUkxFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysg
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvS1VSTEVmbC5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1N0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAgY2hhciogZmlsZW5h
bWUgPSAoY2hhciopbV9zdHJpbmcudXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoIWZpbGVuYW1lKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgcGF0aCA9IFN0cmluZzo6ZnJv
bVVURjgoZmlsZW5hbWUpOworICAgIGZyZWUoZmlsZW5hbWUpOworICAgIHJldHVybiBwYXRoOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9T
eXN0ZW1UaW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZWZsL1N5c3RlbVRpbWVFZmwuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gZWNv
cmVfdGltZV9nZXQoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU291bmRF
ZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U291bmRFZmwuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworI2lmZGVmIEhBVkVfRUNPUkVfWAorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1C
ZWVwKCkKK3sKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gKERp
c3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgWEJlbGwoZGlzcGxheSwgMCk7Cisj
ZW5kaWYKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxl
U3lzdGVtRWZsLmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgor
I2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1ZGUgPGds
aWIuaD4gLy8gVE9ETzogcmVtb3ZlIG1lIGFmdGVyIGZvbGxvd2luZyBUT0RPIGlzIHNvbHZlZC4K
KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9z
dGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ1N0
cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IHJldHVybiBwYXRoLnV0ZjgoKTsKK30KKworY2hhciogZmlsZW5hbWVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQoreworLy8gV0FSTklORzogdGhpcyBpcyBqdXN0IHVzZWQgYnkgcGxh
dGZvcm0vbmV0d29yay9zb3VwLCB0aHVzIG11c3QgYmUgR0xJQiEhIQorLy8gVE9ETzogbW92ZSB0
aGlzIHRvIENTdHJpbmcgYW5kIHVzZSBpdCBpbnN0ZWFkIGluIGJvdGgsIGJlaW5nIG1vcmUgc3Rh
bmRhcmQKKyNpZiBQTEFURk9STShXSU5fT1MpCisgICAgcmV0dXJuIGdfc3RyZHVwKHN0cmluZy51
dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGdfdXJpX3VuZXNjYXBlX3N0cmluZyhz
dHJpbmcudXRmOCgpLmRhdGEoKSwgMCk7CisjZW5kaWYKK30KKworQ1N0cmluZyBvcGVuVGVtcG9y
YXJ5RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQor
eworICAgIGNoYXIgYnVmZmVyW1BBVEhfTUFYXTsKKyAgICBjb25zdCBjaGFyKiB0bXBEaXIgPSBn
ZXRlbnYoIlRNUERJUiIpOworCisgICAgaWYgKCF0bXBEaXIpCisgICAgICAgIHRtcERpciA9ICIv
dG1wIjsKKworICAgIGlmIChzbnByaW50ZihidWZmZXIsIFBBVEhfTUFYLCAiJXMvJXNYWFhYWFgi
LCB0bXBEaXIsIHByZWZpeCkgPj0gUEFUSF9NQVgpCisgICAgICAgIGdvdG8gZW5kOworCisgICAg
aGFuZGxlID0gbWtzdGVtcChidWZmZXIpOworICAgIGlmIChoYW5kbGUgPCAwKQorICAgICAgICBn
b3RvIGVuZDsKKworICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlcik7CisKK2VuZDoKKyAgICBoYW5k
bGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9
CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGlm
IChpc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKKyAgICAgICAgY2xvc2UoaGFuZGxlKTsKKyAgICAg
ICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICB9Cit9CisKK2ludCB3
cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7CisgICAgc2l6
ZV90IHRvZG8gPSBsZW5ndGg7CisgICAgd2hpbGUgKHRvZG8gPiAwKSB7CisgICAgICAgIHNzaXpl
X3QgYnl0ZXNXcml0dGVuID0gd3JpdGUoaGFuZGxlLCBkYXRhLCB0b2RvKTsKKyAgICAgICAgaWYg
KGJ5dGVzV3JpdHRlbiA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUiAmJiBl
cnJubyAhPSBFQUdBSU4pCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVs
c2UgaWYgKGJ5dGVzV3JpdHRlbiA+IDApIHsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNXcml0dGVu
ICs9IGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIGRhdGEgKz0gYnl0ZXNXcml0dGVuOworICAg
ICAgICAgICAgdG9kbyAtPSBieXRlc1dyaXR0ZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3Jt
TW9kdWxlIG1vZHVsZSkKK3sKKyAgICAvLyBjYXV0aW9uLCBjbG9zaW5nIGhhbmRsZSB3aWxsIG1h
a2UgbWVtb3J5IHZhbmlzaCBhbmQgYW55IHJlbWFpbmluZworICAgIC8vIHRpbWVyLCBpZGxlciwg
dGhyZWFkcyBvciBhbnkgb3RoZXIgbGVmdC1vdmVyIHdpbGwgY3Jhc2gsCisgICAgLy8gbWF5YmUg
anVzdCBpZ25vcmUgdGhpcyBpcyBhIHNhZmVyIHNvbHV0aW9uPworICAgIHJldHVybiAhZGxjbG9z
ZShtb2R1bGUpOworfQorCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIGNvbnN0
IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBpZiAoIWhvbWUpIHsKKyAgICAgICAg
aG9tZSA9IGdldGVudigiVE1QRElSIik7CisgICAgICAgIGlmICghaG9tZSkKKyAgICAgICAgICAg
IGhvbWUgPSAiL3RtcCI7CisgICAgfQorICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGhvbWUp
OworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAg
ICBDU3RyaW5nIGNwYXRoID0gcGF0aC51dGY4KCk7CisgICAgQ1N0cmluZyBjZmlsdGVyID0gZmls
dGVyLnV0ZjgoKTsKKyAgICBjaGFyIGZpbGVQYXRoW1BBVEhfTUFYXTsKKyAgICBjaGFyKiBmaWxl
TmFtZTsKKyAgICBzaXplX3QgZmlsZU5hbWVTcGFjZTsKKyAgICBESVIqIGRpcjsKKworICAgIGlm
IChjcGF0aC5sZW5ndGgoKSArIE5BTUVfTUFYID49IHNpemVvZihmaWxlUGF0aCkpCisgICAgICAg
IHJldHVybiBlbnRyaWVzOworICAgIC8vIGxvb3AgaW52YXJpYW50OiBkaXJlY3RvcnkgcGFydCAr
ICcvJworICAgIG1lbWNweShmaWxlUGF0aCwgY3BhdGguZGF0YSgpLCBjcGF0aC5sZW5ndGgoKSk7
CisgICAgZmlsZU5hbWUgPSBmaWxlUGF0aCArIGNwYXRoLmxlbmd0aCgpOworICAgIGlmIChjcGF0
aC5sZW5ndGgoKSA+IDAgJiYgZmlsZVBhdGhbY3BhdGgubGVuZ3RoKCkgLSAxXSAhPSAnLycpIHsK
KyAgICAgICAgZmlsZU5hbWVbMF0gPSAnLyc7CisgICAgICAgIGZpbGVOYW1lKys7CisgICAgfQor
ICAgIGZpbGVOYW1lU3BhY2UgPSBzaXplb2YoZmlsZVBhdGgpIC0gKGZpbGVOYW1lIC0gZmlsZVBh
dGgpIC0gMTsKKworICAgIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKKyAgICBpZiAoIWRp
cikKKyAgICAgICAgcmV0dXJuIGVudHJpZXM7CisKKyAgICBzdHJ1Y3QgZGlyZW50KiBkZTsKKyAg
ICB3aGlsZSAoZGUgPSByZWFkZGlyKGRpcikpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVMZW47Cisg
ICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykgeworICAgICAgICAgICAgaWYgKGRlLT5k
X25hbWVbMV0gPT0gJ1wwJykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChkZS0+ZF9uYW1lWzFdID09ICcuJyAmJiBkZS0+ZF9uYW1lWzJdID09ICdcMCcpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZubWF0Y2goY2Zp
bHRlci5kYXRhKCksIGRlLT5kX25hbWUsIDApKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbmFtZUxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKyAgICAgICAgaWYgKG5hbWVMZW4g
Pj0gZmlsZU5hbWVTcGFjZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBtYXliZSBhc3NlcnQ/
IGl0IHNob3VsZCBuZXZlciBoYXBwZW4gYW55d2F5Li4uCisKKyAgICAgICAgbWVtY3B5KGZpbGVO
YW1lLCBkZS0+ZF9uYW1lLCBuYW1lTGVuICsgMSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5kKGZp
bGVQYXRoKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKKyAgICByZXR1cm4gZW50cmllczsK
K30KKworfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDIt
MjUgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxlcyB0byBwbGF0
Zm9ybS9lZmwuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzUwODcKKworICAgICAgICAq
IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaDogQWRkZWQuCisgICAgICAgICogV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcDogQWRkZWQuCisgICAgICAg
ICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGFzdGVib2FyZEVmbC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0tVUkxFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TeXN0ZW1UaW1lRWZsLmNwcDogQWRkZWQuCisgICAgICAg
ICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU291bmRFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDIt
MjUgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28u
dWs+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgWGFuIExvcGV6Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49523</attachid>
            <date>2010-02-25 12:36:26 -0800</date>
            <delta_ts>2010-02-26 19:53:30 -0800</delta_ts>
            <desc>Patch 5/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-5.diff</filename>
            <type>text/plain</type>
            <size>23149</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtV2hlZWxFdmVudEVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVdo
ZWVsRXZlbnRFZmwuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA5IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYS4KKyAqICAgICAgICAgICAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgICAgICAgICAgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSB7CisgICAgVmVydGljYWxTY3JvbGxEaXJlY3Rpb24g
PSAwLAorICAgIEhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSAxCit9OworCitQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVs
KiBldikKKyAgICA6IG1fZ3JhbnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQpCisgICAg
LCBtX2lzQWNjZXB0ZWQoZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVy
X2lzX3NldChldi0+bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tl
eV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0
S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAg
LCBtX21ldGFLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRh
IikpCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCwgZXYtPmNh
bnZhcy55KSkKKyAgICAsIG1fcG9zaXRpb24oSW50UG9pbnQoZXYtPmNhbnZhcy54LCBldi0+Y2Fu
dmFzLnkpKQoreworICAgIC8vIEEgbmVnYXRpdmUgeiB2YWx1ZSBtZWFucyAoaW4gRUZMKSB0aGF0
IHdlIGFyZSBzY3JvbGxpbmcgZG93biwgc28gd2UgbmVlZAorICAgIC8vIHRvIGludmVydCB0aGUg
dmFsdWUuCisgICAgaWYgKGV2LT5kaXJlY3Rpb24gPT0gVmVydGljYWxTY3JvbGxEaXJlY3Rpb24p
IHsKKyAgICAgICAgbV9kZWx0YVggPSAwOworICAgICAgICBtX2RlbHRhWSA9IC0gZXYtPno7Cisg
ICAgfSBlbHNlIGlmIChldi0+ZGlyZWN0aW9uID09IEhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24p
IHsKKyAgICAgICAgbV9kZWx0YVggPSAtIGV2LT56OworICAgICAgICBtX2RlbHRhWSA9IDA7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IHJldHJpZXZlIHRoZSB1c2VyIHNldHRpbmcgZm9yIHRoZSBu
dW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIG9uIGVhY2ggd2hlZWwgZXZlbnQKKyAgICBtX3doZWVs
VGlja3NYID0gbV9kZWx0YVg7CisgICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOworICAgIG1f
ZGVsdGFYICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVw
KCkpOworICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxl
Q2hvb3NlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2VmbC9GaWxlQ2hvb3NlckVmbC5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisKKyNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEZpbGVDaG9v
c2VyOjpiYXNlbmFtZUZvcldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkgY29uc3QK
K3sKKyAgICBpZiAod2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
aWYgKG1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZpbGVCdXR0b25Ob0Zp
bGVTZWxlY3RlZExhYmVsKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0Nv
bnRleHRNZW51RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVu
dS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQorICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKKyAgICAsIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbigwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NvbnRleHRNZW51Ojp+Q29u
dGV4dE1lbnUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1l
bnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3Jt
TWVudURlc2NyaXB0aW9uIG1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVu
dTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVz
Y3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9
CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1E
ZXNjcmlwdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1T
Y3JlZW5FZmwuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAy
MDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TY3JlZW4uaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyNpbmNsdWRlIDxFY29yZV9YLmg+Cisj
aW5jbHVkZSA8WDExL1hsaWIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lu
dCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiA4OworfQorCitpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiA4OworfQorCitib29sIHNjcmVl
bklzTW9ub2Nocm9tZShXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBpbnQgeCA9IDAsIHkgPSAwLCB3ID0gMCwgaCA9IDA7CisKKyNpZmRlZiBIQVZFX0VDT1JF
X1gKKyAgICBFY29yZV9YX0Rpc3BsYXkqIGRpc3BsYXkgPSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7
CisgICAgaW50IGRlZiA9IERlZmF1bHRTY3JlZW4oZGlzcGxheSk7CisgICAgU2NyZWVuKiBzY3Jl
ZW4gPSBTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSwgZGVmKTsKKyAgICB4ID0gMDsKKyAgICB5ID0g
MDsKKyAgICB3ID0gc2NyZWVuLT53aWR0aDsKKyAgICBoID0gc2NyZWVuLT5oZWlnaHQ7CisjZW5k
aWYKKworICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgdywgaCk7Cit9CisKK0Zsb2F0UmVjdCBz
Y3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1dpZGdldEVmbC5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJD
dXJzb3IuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworI2luY2x1ZGUgPEVjb3Jl
Lmg+CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIEhBVkVf
RUNPUkVfWAorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFY29yZV9YX0N1cnNvci5o
PgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKK2NsYXNzIEN1cnNvck1hcCB7Citwcml2YXRlOgor
ICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBzaG9ydD4gbV9jdXJzb3JTdHJpbmdNYXA7CisK
K3B1YmxpYzoKKyAgICBDdXJzb3JNYXAoKTsKKyAgICB1bnNpZ25lZCBpbnQgY3Vyc29yKFN0cmlu
Zyk7Cit9OworCit1bnNpZ25lZCBpbnQgQ3Vyc29yTWFwOjpjdXJzb3IoU3RyaW5nIGN1cnNvckdy
b3VwKQoreworICAgIGludCByZXQgPSBtX2N1cnNvclN0cmluZ01hcC5nZXQoY3Vyc29yR3JvdXAp
OworCisgICAgaWYgKHJldCA8IEVDT1JFX1hfQ1VSU09SX1ggfHwgcmV0ID4gRUNPUkVfWF9DVVJT
T1JfWFRFUk0pCisgICAgICAgIHJldCA9IEVDT1JFX1hfQ1VSU09SX0xFRlRfUFRSOworCisgICAg
cmV0dXJuIHJldDsKK30KKworQ3Vyc29yTWFwOjpDdXJzb3JNYXAoKQoreworICAgIG1fY3Vyc29y
U3RyaW5nTWFwLnNldCgiY3Vyc29yL3BvaW50ZXIiLCBFQ09SRV9YX0NVUlNPUl9MRUZUX1BUUik7
CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvbW92ZSIsIEVDT1JFX1hfQ1VSU09S
X0ZMRVVSKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9jcm9zcyIsIEVDT1JF
X1hfQ1VSU09SX0NST1NTKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9oYW5k
IiwgRUNPUkVfWF9DVVJTT1JfSEFORDIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vy
c29yL2lfYmVhbSIsIEVDT1JFX1hfQ1VSU09SX1hURVJNKTsKKyAgICBtX2N1cnNvclN0cmluZ01h
cC5zZXQoImN1cnNvci93YWl0IiwgRUNPUkVfWF9DVVJTT1JfV0FUQ0gpOworICAgIG1fY3Vyc29y
U3RyaW5nTWFwLnNldCgiY3Vyc29yL2hlbHAiLCBFQ09SRV9YX0NVUlNPUl9RVUVTVElPTl9BUlJP
Vyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvZWFzdF9yZXNpemUiLCBFQ09S
RV9YX0NVUlNPUl9SSUdIVF9TSURFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNv
ci9ub3J0aF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9UT1BfU0lERSk7CisgICAgbV9jdXJzb3JT
dHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfZWFzdF9yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9U
T1BfUklHSFRfQ09STkVSKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0
aF93ZXN0X3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX1RPUF9MRUZUX0NPUk5FUik7CisgICAgbV9j
dXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivc291dGhfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1Jf
Qk9UVE9NX1NJREUpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3NvdXRoX2Vh
c3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfQk9UVE9NX1JJR0hUX0NPUk5FUik7CisgICAgbV9j
dXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivc291dGhfd2VzdF9yZXNpemUiLCBFQ09SRV9YX0NV
UlNPUl9CT1RUT01fTEVGVF9DT1JORVIpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vy
c29yL3dlc3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfTEVGVF9TSURFKTsKKyAgICBtX2N1cnNv
clN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF9zb3V0aF9yZXNpemUiLCBFQ09SRV9YX0NVUlNP
Ul9TQl9IX0RPVUJMRV9BUlJPVyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Iv
ZWFzdF93ZXN0X3Jlc2l6ZSIsIEVDT1JFX1hfQ1VSU09SX1NCX1ZfRE9VQkxFX0FSUk9XKTsKKyAg
ICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3J0aF9lYXN0X3NvdXRoX3dlc3RfcmVz
aXplIiwgRUNPUkVfWF9DVVJTT1JfU0laSU5HKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci9ub3J0aF93ZXN0X3NvdXRoX2Vhc3RfcmVzaXplIiwgRUNPUkVfWF9DVVJTT1JfU0la
SU5HKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9jb2x1bW5fcmVzaXplIiwg
RUNPUkVfWF9DVVJTT1JfU0JfVl9ET1VCTEVfQVJST1cpOworICAgIG1fY3Vyc29yU3RyaW5nTWFw
LnNldCgiY3Vyc29yL3Jvd19yZXNpemUiLCBFQ09SRV9YX0NVUlNPUl9TQl9IX0RPVUJMRV9BUlJP
Vyk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvbWlkZGxlX3Bhbm5pbmciLCAg
RUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVWRVJTRSk7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0
KCJjdXJzb3IvZWFzdF9wYW5uaW5nIiwgRUNPUkVfWF9DVVJTT1JfQ1JPU1NfUkVWRVJTRSk7Cisg
ICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3Ivbm9ydGhfcGFubmluZyIsIEVDT1JFX1hf
Q1VSU09SX0NST1NTX1JFVkVSU0UpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29y
L25vcnRoX2Vhc3RfcGFubmluZyIsIEVDT1JFX1hfQ1VSU09SX0NST1NTX1JFVkVSU0UpOworICAg
IG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL25vcnRoX3dlc3RfcGFubmluZyIsIEVDT1JF
X1hfQ1VSU09SX0NST1NTX1JFVkVSU0UpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vy
c29yL3NvdXRoX3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBt
X2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9zb3V0aF9lYXN0X3Bhbm5pbmciLCBFQ09SRV9Y
X0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNv
ci9zb3V0aF93ZXN0X3Bhbm5pbmciLCBFQ09SRV9YX0NVUlNPUl9DUk9TU19SRVZFUlNFKTsKKyAg
ICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci93ZXN0X3Bhbm5pbmciLCBFQ09SRV9YX0NV
UlNPUl9DUk9TU19SRVZFUlNFKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci92
ZXJ0aWNhbF90ZXh0IiwgRUNPUkVfWF9DVVJTT1JfU0JfRE9XTl9BUlJPVyk7CisgICAgbV9jdXJz
b3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvY2VsbCIsIEVDT1JFX1hfQ1VSU09SX0lDT04pOworICAg
IG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2NvbnRleHRfbWVudSIsIEVDT1JFX1hfQ1VS
U09SX0hBTkQyKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub19kcm9wIiwg
RUNPUkVfWF9DVVJTT1JfRE9UX0JPWF9NQVNLKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQo
ImN1cnNvci9jb3B5IiwgRUNPUkVfWF9DVVJTT1JfSUNPTik7CisgICAgbV9jdXJzb3JTdHJpbmdN
YXAuc2V0KCJjdXJzb3IvcHJvZ3Jlc3MiLCBFQ09SRV9YX0NVUlNPUl9XQVRDSCk7CisgICAgbV9j
dXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvYWxpYXMiLCBFQ09SRV9YX0NVUlNPUl9NQU4pOwor
ICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL25vbmUiLCBFQ09SRV9YX0NVUlNPUl9Y
KTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5zZXQoImN1cnNvci9ub3RfYWxsb3dlZCIsIEVDT1JF
X1hfQ1VSU09SX1gpOworICAgIG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL3pvb21faW4i
LCBFQ09SRV9YX0NVUlNPUl9ESUFNT05EX0NST1NTKTsKKyAgICBtX2N1cnNvclN0cmluZ01hcC5z
ZXQoImN1cnNvci96b29tX291dCIsIEVDT1JFX1hfQ1VSU09SX0RJQU1PTkRfQ1JPU1MpOworICAg
IG1fY3Vyc29yU3RyaW5nTWFwLnNldCgiY3Vyc29yL2dyYWIiLCBFQ09SRV9YX0NVUlNPUl9IQU5E
Mik7CisgICAgbV9jdXJzb3JTdHJpbmdNYXAuc2V0KCJjdXJzb3IvZ3JhYmJpbmciLCBFQ09SRV9Y
X0NVUlNPUl9IQU5EMik7Cit9CisKK3N0YXRpYyBDdXJzb3JNYXAgY3Vyc29yU3RyaW5nTWFwID0g
Q3Vyc29yTWFwKCk7CisjZW5kaWYKKworY2xhc3MgV2lkZ2V0UHJpdmF0ZSB7CitwdWJsaWM6Cisg
ICAgRXZhcyogbV9ldmFzOworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7CisgICAgU3Ry
aW5nIG1fdGhlbWU7CisKKyAgICBXaWRnZXRQcml2YXRlKCkKKyAgICAgICAgOiBtX2V2YXMoMCkK
KyAgICAgICAgLCBtX2V2YXNPYmplY3QoMCkKKyAgICAgICAgLCBtX2N1cnNvck9iamVjdCgwKQor
I2lmZGVmIEhBVkVfRUNPUkVfWAorICAgICAgICAsIG1faXNVc2luZ0Vjb3JlWChmYWxzZSkKKyNl
bmRpZgorICAgIHt9CisKKyAgICAvKiBjdXJzb3IgKi8KKyAgICBTdHJpbmcgbV9jdXJzb3JHcm91
cDsKKyAgICBFdmFzX09iamVjdCogbV9jdXJzb3JPYmplY3Q7CisKKyNpZmRlZiBIQVZFX0VDT1JF
X1gKKyAgICBib29sIG1faXNVc2luZ0Vjb3JlWDsKKyNlbmRpZgorfTsKKworV2lkZ2V0OjpXaWRn
ZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQorICAgIDogbV9wYXJlbnQoMCkKKyAgICAsIG1fd2lk
Z2V0KDApCisgICAgLCBtX3NlbGZWaXNpYmxlKGZhbHNlKQorICAgICwgbV9wYXJlbnRWaXNpYmxl
KGZhbHNlKQorICAgICwgbV9mcmFtZSgwLCAwLCAwLCAwKQorICAgICwgbV9kYXRhKG5ldyBXaWRn
ZXRQcml2YXRlKQoreworICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkK
K3sKKyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKworICAgIGlmIChtX2RhdGEtPm1fY3Vyc29yT2Jq
ZWN0KQorICAgICAgICBldmFzX29iamVjdF9kZWwobV9kYXRhLT5tX2N1cnNvck9iamVjdCk7CisK
KyAgICBkZWxldGUgbV9kYXRhOworfQorCitJbnRSZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fZnJhbWUgPSByZWN0OworICAgIFdpZGdl
dDo6ZnJhbWVSZWN0c0NoYW5nZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OmZyYW1lUmVjdHNDaGFu
Z2VkKCkKK3sKKyAgICBFdmFzX09iamVjdCogbyA9IGV2YXNPYmplY3QoKTsKKyAgICBFdmFzX0Nv
b3JkIHgsIHk7CisKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFvKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBpZiAocGFyZW50KCktPmlzU2Ny
b2xsVmlld1Njcm9sbGJhcih0aGlzKSkKKyAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihwYXJlbnQo
KS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBlbHNl
CisgICAgICAgIHJlY3Quc2V0TG9jYXRpb24ocGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVj
dC5sb2NhdGlvbigpKSk7CisKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocm9vdCgpLT5l
dmFzT2JqZWN0KCksICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfbW92ZShvLCB4ICsg
cmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKG8sIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCit7
Cit9CisKK3ZvaWQgV2lkZ2V0OjphcHBseUZhbGxiYWNrQ3Vyc29yKCkKK3sKKyNpZiBIQVZFX0VD
T1JFX1gKKyAgICBpZiAobV9kYXRhLT5tX2lzVXNpbmdFY29yZVggJiYgIW1fZGF0YS0+bV9jdXJz
b3JHcm91cC5pc051bGwoKSkgeworICAgICAgICBpbnQgc2hhcGUgPSBjdXJzb3JTdHJpbmdNYXAu
Y3Vyc29yKG1fZGF0YS0+bV9jdXJzb3JHcm91cC51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBp
ZiAoc2hhcGUgPCBFQ09SRV9YX0NVUlNPUl9YIHx8IHNoYXBlID4gRUNPUkVfWF9DVVJTT1JfWFRF
Uk0pIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGNhbm5vdCBtYXAgYW4g
ZXF1aXZhbGVudCBYIGN1cnNvciBmb3IiCisgICAgICAgICAgICAgICAgICAgICIgY3Vyc29yIGdy
b3VwICVzIiwgbV9kYXRhLT5tX2N1cnNvckdyb3VwLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgc2hhcGUgPSBFQ09SRV9YX0NVUlNPUl9MRUZUX1BUUjsKKyAgICAgICAgfQorCisgICAgICAg
IEVjb3JlX1hfV2luZG93IHdpbiA9IGVjb3JlX2V2YXNfc29mdHdhcmVfeDExX3dpbmRvd19nZXQo
ZWNvcmVFdmFzKCkpOworICAgICAgICBFY29yZV9YX0N1cnNvciBjdXIgPSBlY29yZV94X2N1cnNv
cl9zaGFwZV9nZXQoc2hhcGUpOworICAgICAgICBlY29yZV94X3dpbmRvd19jdXJzb3Jfc2V0KHdp
biwgY3VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgZnByaW50ZihzdGRl
cnIsICJFUlJPUjogT29vcHMsIG5vIGZhbGxiYWNrIHRvIHNldCBjdXJzb3IgJXMhXG4iLAorICAg
ICAgICAgICAgbV9kYXRhLT5tX2N1cnNvckdyb3VwLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9
CisKK3ZvaWQgV2lkZ2V0OjphcHBseUN1cnNvcigpCit7CisgICAgY29uc3QgY2hhciAqZmlsZTsK
KyAgICBFdmFzX0Nvb3JkIHgsIHk7CisKKyAgICBTdHJpbmcgdGhlbWUgPSBlZGplVGhlbWVSZWN1
cnNpdmUoKTsKKyAgICBpZiAoIXRoZW1lLmlzTnVsbCgpKQorICAgICAgICBmaWxlID0gZWRqZVRo
ZW1lUmVjdXJzaXZlKCkudXRmOCgpLmRhdGEoKTsKKworICAgIG1fZGF0YS0+bV9jdXJzb3JPYmpl
Y3QgPSBlZGplX29iamVjdF9hZGQoZXZhcygpKTsKKyAgICBpZiAoIWVkamVfb2JqZWN0X2ZpbGVf
c2V0KG1fZGF0YS0+bV9jdXJzb3JPYmplY3QsIGZpbGUsIG1fZGF0YS0+bV9jdXJzb3JHcm91cC51
dGY4KCkuZGF0YSgpKSkgeworICAgICAgICBldmFzX29iamVjdF9kZWwobV9kYXRhLT5tX2N1cnNv
ck9iamVjdCk7CisgICAgICAgIG1fZGF0YS0+bV9jdXJzb3JPYmplY3QgPSAwOworICAgICAgICBl
Y29yZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0KGVjb3JlRXZhcygpLCAwLCAwLCAwLCAwKTsKKyAg
ICAgICAgYXBwbHlGYWxsYmFja0N1cnNvcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKKyAgICAgICAgY29uc3QgY2hhciAqZDsKKworICAgICAgICBlZGplX29iamVj
dF9zaXplX21pbl9nZXQobV9kYXRhLT5tX2N1cnNvck9iamVjdCwgJncsICZoKTsKKyAgICAgICAg
aWYgKCh3IDw9IDApIHx8IChoIDw9IDApKQorICAgICAgICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9t
aW5fY2FsYyhtX2RhdGEtPm1fY3Vyc29yT2JqZWN0LCAmdywgJmgpOworICAgICAgICBpZiAoKHcg
PD0gMCkgfHwgKGggPD0gMCkpCisgICAgICAgICAgICB3ID0gaCA9IDE2OworICAgICAgICBldmFz
X29iamVjdF9yZXNpemUobV9kYXRhLT5tX2N1cnNvck9iamVjdCwgdywgaCk7CisKKyAgICAgICAg
ZCA9IGVkamVfb2JqZWN0X2RhdGFfZ2V0KG1fZGF0YS0+bV9jdXJzb3JPYmplY3QsICJob3QueCIp
OworICAgICAgICB4ID0gZCA/IGF0b2koZCkgOiAwOworCisgICAgICAgIGQgPSBlZGplX29iamVj
dF9kYXRhX2dldChtX2RhdGEtPm1fY3Vyc29yT2JqZWN0LCAiaG90LnkiKTsKKyAgICAgICAgeSA9
IGQgPyBhdG9pKGQpIDogMDsKKworICAgICAgICBlY29yZV9ldmFzX29iamVjdF9jdXJzb3Jfc2V0
KGVjb3JlRXZhcygpLCBtX2RhdGEtPm1fY3Vyc29yT2JqZWN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVWQVNfTEFZRVJfTUFYLCB4LCB5KTsKKyAgICB9Cit9CisKK3Zv
aWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgaWYgKCFw
bGF0Zm9ybVdpZGdldCgpIHx8ICFldmFzKCkpCisgICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBjaGFyICpncm91cCA9IGN1cnNvci5pbXBsKCk7CisgICAgaWYgKCFncm91cCB8fCBTdHJpbmco
Z3JvdXApID09IG1fZGF0YS0+bV9jdXJzb3JHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9kYXRhLT5tX2N1cnNvckdyb3VwID0gZ3JvdXA7CisKKyAgICBhcHBseUN1cnNvcigpOworfQor
Cit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAg
ICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsK
K30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkK
KyAgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X2hpZGUocGxhdGZvcm1XaWRnZXQo
KSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzZXRJc1NlbGVjdGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworY29u
c3QgU3RyaW5nIFdpZGdldDo6ZWRqZVRoZW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRh
LT5tX3RoZW1lOworfQorCit2b2lkIFdpZGdldDo6c2V0RWRqZVRoZW1lKGNvbnN0IFN0cmluZyYg
dGhlbWVQYXRoKQoreworICAgIGlmIChtX2RhdGEtPm1fdGhlbWUgPT0gdGhlbWVQYXRoKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdGhlbWUgPSB0aGVtZVBhdGg7Cit9CisKK2Nv
bnN0IFN0cmluZyBXaWRnZXQ6OmVkamVUaGVtZVJlY3Vyc2l2ZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2RhdGEtPm1fdGhlbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2RhdGEtPm1fdGhl
bWU7CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmVkamVUaGVt
ZVJlY3Vyc2l2ZSgpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitFdmFzKiBXaWRnZXQ6
OmV2YXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPm1fZXZhczsKK30KKworRWNvcmVf
RXZhcyogV2lkZ2V0OjplY29yZUV2YXMoKSBjb25zdAoreworICAgIC8vIEZJWE1FIEVGTDogWFhY
IGFzc3VtZSBldmFzIHdhcyBjcmVhdGVkIGJ5IGVjb3JlX2V2YXMKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RWNvcmVfRXZhcyo+KGV2YXNfZGF0YV9hdHRhY2hfZ2V0KGV2YXMoKSkpOworfQorCit2
b2lkIFdpZGdldDo6c2V0RXZhc09iamVjdChFdmFzX09iamVjdCAqbykKK3sKKyAgICAvLyBGSVhN
RTogc3R1ZHkgcGxhdGZvcm1XaWRnZXQoKSBhbmQgdXNlIGl0CisgICAgLy8gRklYTUU6IHJpZ2h0
IG5vdyBwbGF0Zm9ybVdpZGdldCgpIHJlcXVpcmVzIGltcGxlbWVudGluZyB0b28gbXVjaAorICAg
IGlmIChtX2RhdGEtPm1fZXZhc09iamVjdCA9PSBvKQorICAgICAgICByZXR1cm47CisgICAgbV9k
YXRhLT5tX2V2YXNPYmplY3QgPSBvOworICAgIGlmICghbykgeworICAgICAgICBtX2RhdGEtPm1f
ZXZhcyA9IDA7CisgICAgICAgIG1fZGF0YS0+bV9pc1VzaW5nRWNvcmVYID0gZmFsc2U7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPm1fZXZhcyA9IGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KG8pOworCisjaWZkZWYgSEFWRV9FQ09SRV9YCisgICAgY29uc3QgY2hhciAqZW5naW5l
ID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWNvcmVFdmFzKCkpOworICAgIG1fZGF0YS0+
bV9pc1VzaW5nRWNvcmVYID0gKCFzdHJjbXAoZW5naW5lLCAic29mdHdhcmVfeDExIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKGVuZ2luZSwgInNvZnR3YXJlX3hj
YiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmNtcChlbmdpbmUsICJz
b2Z0d2FyZV8xNl94MTEiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJu
Y21wKGVuZ2luZSwgInhyZW5kZXIiLCBzaXplb2YoInhyZW5kZXIiKSAtIDEpKTsKKyNlbmRpZgor
CisgICAgV2lkZ2V0OjpmcmFtZVJlY3RzQ2hhbmdlZCgpOworfQorCitFdmFzX09iamVjdCogV2lk
Z2V0OjpldmFzT2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5tX2V2YXNPYmpl
Y3Q7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCisrKyBXZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEw
LTAyLTI1ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBBZGQgRUZMIHBvcnQgZmlsZXMgdG8g
cGxhdGZvcm0vZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisKKyAgICAg
ICAgKiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVdoZWVsRXZlbnRFZmwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlQ2hvb3NlckVmbC5jcHA6IEFk
ZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNwcDog
QWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9XaWRnZXRFZmwuY3Bw
OiBBZGRlZC4KKwogMjAxMC0wMi0yNSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5u
b3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBYYW4g
TG9wZXouCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49524</attachid>
            <date>2010-02-25 12:36:56 -0800</date>
            <delta_ts>2010-02-26 20:43:02 -0800</delta_ts>
            <desc>Patch 6/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-6.diff</filename>
            <type>text/plain</type>
            <size>32556</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNw
cApAQCAtMCwwICsxLDkzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElO
ZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZUVmbC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorCisjaW5jbHVkZSA8RWRqZS5oPgorbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBUT0RPOiBjaGFuZ2UgZnJvbSBvYmplY3QgY291bnQgdG8gZWNvcmVfZXZhcyBzaXplIChi
eXRlcykKKy8vIFRPRE86IGFzIG9iamVjdHMgYXJlIHdlYnBhZ2UvdXNlciBkZWZpbmVkIGFuZCB0
aGV5IGNhbiBiZSB2ZXJ5IGxhcmdlLgorI2RlZmluZSBSRU5ERVJfVEhFTUVfRUZMX1BBUlRfQ0FD
SEVfTUFYIDMyCisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhS
ZW5kZXJTdHlsZSogc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgY29uc3Qgc3Ry
dWN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpdHlwZTsKKwor
ICAgIGlmIChzdHlsZS0+bWluV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBz
dHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS0+bWlu
SGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldE1pbkhlaWdo
dChkZXNjLT5taW4uaGVpZ2h0KCkpOworCisgICAgaWYgKGRlc2MtPm1heC53aWR0aCgpLnZhbHVl
KCkgPiAwICYmIHN0eWxlLT5tYXhXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAg
IHN0eWxlLT5zZXRNYXhXaWR0aChkZXNjLT5tYXgud2lkdGgoKSk7CisgICAgaWYgKGRlc2MtPm1h
eC5oZWlnaHQoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4SGVpZ2h0KCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldE1heEhlaWdodChkZXNjLT5tYXguaGVpZ2h0KCkp
OworCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3AoKSk7CisgICAg
c3R5bGUtPnNldFBhZGRpbmdCb3R0b20oZGVzYy0+cGFkZGluZy5ib3R0b20oKSk7CisgICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcubGVmdCgpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVFZmw6OnRoZW1lUGFydENhY2hlRW50cnlSZXNldChzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRy
eSogY2UsIEZvcm1UeXBlIHR5cGUpCit7CisgICAgY29uc3QgY2hhciAqZmlsZSwgKmdyb3VwOwor
CisgICAgQVNTRVJUKGNlKTsKKworICAgIGVkamVfb2JqZWN0X2ZpbGVfZ2V0KG1fZWRqZSwgJmZp
bGUsIDApOworICAgIGdyb3VwID0gZWRqZUdyb3VwRnJvbUZvcm1UeXBlKHR5cGUpOworICAgIEFT
U0VSVChmaWxlKTsKKyAgICBBU1NFUlQoZ3JvdXApOworCisgICAgaWYgKCFlZGplX29iamVjdF9m
aWxlX3NldChjZS0+bywgZmlsZSwgZ3JvdXApKSB7CisgICAgICAgIGludCBlcnIgPSBlZGplX29i
amVjdF9sb2FkX2Vycm9yX2dldChjZS0+byk7CisgICAgICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9
IGVkamVfbG9hZF9lcnJvcl9zdHIoZXJyKTsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgbG9hZCAnJXMnIGZyb20gdGhlbWUgJXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGdy
b3VwLCBmaWxlLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjp0aGVtZVBhcnRDYWNoZUVudHJ5
U3VyZmFjZUNyZWF0ZShzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2UpCit7CisgICAgaW50
IHcsIGg7CisgICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVzOworCisgICAgQVNTRVJUKGNlKTsKKyAg
ICBBU1NFUlQoY2UtPmVlKTsKKworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGNlLT5lZSwg
MCwgMCwgJncsICZoKTsKKyAgICBBU1NFUlQodyA+IDApOworICAgIEFTU0VSVChoID4gMCk7CisK
KyAgICBjZS0+c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1
bnNpZ25lZCBjaGFyICopZWNvcmVfZXZhc19idWZmZXJfcGl4ZWxzX2dldChjZS0+ZWUpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9f
Rk9STUFUX0FSR0IzMiwgdywgaCwgdyAqIDQpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKGNlLT5zdXJmYWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJm
YWNlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0
YXR1cykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIGFsbG9jYXRlIGEgbmV3IGVudHJ5IGFuZCBmaWxsIGl0IHdpdGggZWRqZSBncm91
cAorc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBSZW5kZXJUaGVt
ZUVmbDo6Y2FjaGVUaGVtZVBhcnROZXcoRm9ybVR5cGUgdHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqY2UgPSBuZXcgc3RydWN0IFRo
ZW1lUGFydENhY2hlRW50cnk7CisKKyAgICBpZiAoIWNlKSB7CisgICAgICAgIEVJTkFfTE9HX0VS
UigiY291bGQgbm90IGFsbG9jYXRlIFRoZW1lUGFydENhY2hlRW50cnkuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGNlLT5lZSA9IGVjb3JlX2V2YXNfYnVmZmVyX25ldyhzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIGlmICghY2UtPmVlKSB7CisgICAgICAgIEVJ
TkFfTE9HX0VSUigiZWNvcmVfZXZhc19idWZmZXJfbmV3KCVkLCAlZCkgZmFpbGVkLiIsCisgICAg
ICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBk
ZWxldGUgY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNlLT5vID0gZWRqZV9v
YmplY3RfYWRkKGVjb3JlX2V2YXNfZ2V0KGNlLT5lZSkpOworICAgIEFTU0VSVChjZS0+byk7Cisg
ICAgaWYgKCF0aGVtZVBhcnRDYWNoZUVudHJ5UmVzZXQoY2UsIHR5cGUpKSB7CisgICAgICAgIGV2
YXNfb2JqZWN0X2RlbChjZS0+byk7CisgICAgICAgIGVjb3JlX2V2YXNfZnJlZShjZS0+ZWUpOwor
ICAgICAgICBkZWxldGUgY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgh
dGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoY2UpKSB7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2RlbChjZS0+byk7CisgICAgICAgIGVjb3JlX2V2YXNfZnJlZShjZS0+ZWUpOworICAgICAg
ICBkZWxldGUgY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShjZS0+bywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBldmFzX29i
amVjdF9zaG93KGNlLT5vKTsKKworICAgIGNlLT50eXBlID0gdHlwZTsKKyAgICBjZS0+c2l6ZSA9
IHNpemU7CisKKyAgICBtX3BhcnRDYWNoZS5wcmVwZW5kKGNlKTsKKyAgICByZXR1cm4gY2U7Cit9
CisKKy8vIGp1c3QgY2hhbmdlIHRoZSBlZGplIGdyb3VwIGFuZCByZXR1cm4gdGhlIHNhbWUgZW50
cnkKK3N0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVuZGVyVGhl
bWVFZmw6OmNhY2hlVGhlbWVQYXJ0UmVzZXQoRm9ybVR5cGUgdHlwZSwgc3RydWN0IFJlbmRlclRo
ZW1lRWZsOjpUaGVtZVBhcnRDYWNoZUVudHJ5KiBjZSkKK3sKKyAgICBpZiAoIXRoZW1lUGFydENh
Y2hlRW50cnlSZXNldChjZSwgdHlwZSkpIHsKKyAgICAgICAgY2UtPnR5cGUgPSBGb3JtVHlwZUxh
c3Q7IC8vIGludmFsaWRhdGUKKyAgICAgICAgbV9wYXJ0Q2FjaGUuYXBwZW5kKGNlKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNlLT50eXBlID0gdHlwZTsKKyAgICBtX3BhcnRDYWNo
ZS5wcmVwZW5kKGNlKTsKKyAgICByZXR1cm4gY2U7Cit9CisKKy8vIHJlc2l6ZSBlbnRyeSBhbmQg
cmVzZXQgaXQKK3N0cnVjdCBSZW5kZXJUaGVtZUVmbDo6VGhlbWVQYXJ0Q2FjaGVFbnRyeSogUmVu
ZGVyVGhlbWVFZmw6OmNhY2hlVGhlbWVQYXJ0UmVzaXplQW5kUmVzZXQoRm9ybVR5cGUgdHlwZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgc3RydWN0IFJlbmRlclRoZW1lRWZsOjpUaGVtZVBhcnRDYWNo
ZUVudHJ5KiBjZSkKK3sKKyAgICBjYWlyb19zdXJmYWNlX2ZpbmlzaChjZS0+c3VyZmFjZSk7Cisg
ICAgZWNvcmVfZXZhc19yZXNpemUoY2UtPmVlLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjZS0+bywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKKworICAgIGlmICghdGhlbWVQYXJ0Q2FjaGVFbnRyeVN1cmZhY2VDcmVhdGUoY2UpKSB7
CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbChjZS0+byk7CisgICAgICAgIGVjb3JlX2V2YXNfZnJl
ZShjZS0+ZWUpOworICAgICAgICBkZWxldGUgY2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIHJldHVybiBjYWNoZVRoZW1lUGFydFJlc2V0KHR5cGUsIGNlKTsKK30KKworLy8gZ2Vu
ZXJhbCBwdXJwb3NlIGdldCAod2lsbCBjcmVhdGUsIHJldXNlIGFuZCBhbGwpCitzdHJ1Y3QgUmVu
ZGVyVGhlbWVFZmw6OlRoZW1lUGFydENhY2hlRW50cnkqIFJlbmRlclRoZW1lRWZsOjpjYWNoZVRo
ZW1lUGFydEdldChGb3JtVHlwZSB0eXBlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIFZl
Y3RvcjxzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSAqPjo6aXRlcmF0b3IgaXRyLCBlbmQ7Cisg
ICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmNlX2xhc3Rfc2l6ZSA9IDA7CisgICAgaW50
IGksIGlkeExhc3RTaXplID0gLTE7CisKKyAgICBpdHIgPSBtX3BhcnRDYWNoZS5iZWdpbigpOwor
ICAgIGVuZCA9IG1fcGFydENhY2hlLmVuZCgpOworICAgIGZvciAoaSA9IDA7IGl0ciAhPSBlbmQ7
IGkrKywgaXRyKyspIHsKKyAgICAgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkgKmNlID0g
Kml0cjsKKyAgICAgICAgaWYgKGNlLT5zaXplID09IHNpemUpIHsKKyAgICAgICAgICAgIGlmIChj
ZS0+dHlwZSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBjZTsKKyAgICAgICAgICAg
IGNlX2xhc3Rfc2l6ZSA9IGNlOworICAgICAgICAgICAgaWR4TGFzdFNpemUgPSBpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKG1fcGFydENhY2hlLnNpemUoKSA8IFJFTkRFUl9USEVNRV9F
RkxfUEFSVF9DQUNIRV9NQVgpCisgICAgICAgIHJldHVybiBjYWNoZVRoZW1lUGFydE5ldyh0eXBl
LCBzaXplKTsKKworICAgIGlmIChjZV9sYXN0X3NpemUgJiYgY2VfbGFzdF9zaXplICE9IG1fcGFy
dENhY2hlLmZpcnN0KCkpIHsKKyAgICAgICAgbV9wYXJ0Q2FjaGUucmVtb3ZlKGlkeExhc3RTaXpl
KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlVGhlbWVQYXJ0UmVzZXQodHlwZSwgY2VfbGFzdF9zaXpl
KTsKKyAgICB9CisKKyAgICBUaGVtZVBhcnRDYWNoZUVudHJ5KiBjZSA9IG1fcGFydENhY2hlLmxh
c3QoKTsKKyAgICBtX3BhcnRDYWNoZS5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGNhY2hlVGhl
bWVQYXJ0UmVzaXplQW5kUmVzZXQodHlwZSwgc2l6ZSwgY2UpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lRWZsOjpjYWNoZVRoZW1lUGFydEZsdXNoKCkKK3sKKyAgICBWZWN0b3I8c3RydWN0IFRoZW1l
UGFydENhY2hlRW50cnkgKj46Oml0ZXJhdG9yIGl0ciwgZW5kOworCisgICAgaXRyID0gbV9wYXJ0
Q2FjaGUuYmVnaW4oKTsKKyAgICBlbmQgPSBtX3BhcnRDYWNoZS5lbmQoKTsKKyAgICBmb3IgKDsg
aXRyICE9IGVuZDsgaXRyKyspIHsKKyAgICAgICAgc3RydWN0IFRoZW1lUGFydENhY2hlRW50cnkg
KmNlID0gKml0cjsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goY2UtPnN1cmZhY2UpOwor
ICAgICAgICBldmFzX29iamVjdF9kZWwoY2UtPm8pOworICAgICAgICBlY29yZV9ldmFzX2ZyZWUo
Y2UtPmVlKTsKKyAgICAgICAgZGVsZXRlIGNlOworICAgIH0KKyAgICBtX3BhcnRDYWNoZS5jbGVh
cigpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVTdGF0ZUZyb21Gb3JtKEV2
YXNfT2JqZWN0KiBvLCBDb250cm9sU3RhdGVzIHN0YXRlcykKK3sKKyAgICBjb25zdCBjaGFyICpz
aWduYWxzW10gPSB7IC8vIGtlZXAgaW4gc3luYyB3aXRoIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWVU
eXBlcy5oCisgICAgICAgICJob3ZlcmVkIiwKKyAgICAgICAgInByZXNzZWQiLAorICAgICAgICAi
Zm9jdXNlZCIsCisgICAgICAgICJlbmFibGVkIiwKKyAgICAgICAgImNoZWNrZWQiLAorICAgICAg
ICAicmVhZC1vbmx5IiwKKyAgICAgICAgImRlZmF1bHQiLAorICAgICAgICAid2luZG93LWluYWN0
aXZlIiwKKyAgICAgICAgImluZGV0ZXJtaW5hdGUiCisgICAgfTsKKyAgICBzaXplX3QgaSwgbGFz
dCA9IHNpemVvZihzaWduYWxzKSAvIHNpemVvZihzaWduYWxzWzBdKTsKKworICAgIGVkamVfb2Jq
ZWN0X3NpZ25hbF9lbWl0KG8sICJyZXNldCIsICIiKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBs
YXN0OyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRlcyAmICgxIDw8IGkpKQorICAgICAgICAgICAg
ZWRqZV9vYmplY3Rfc2lnbmFsX2VtaXQobywgc2lnbmFsc1tpXSwgIiIpOworICAgIH0KK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQoUmVuZGVyT2JqZWN0KiBvLCBGb3Jt
VHlwZSB0eXBlLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgVGhlbWVQYXJ0Q2FjaGVFbnRyeSogY2U7CisgICAgRWlu
YV9MaXN0KiB1cGRhdGVzOworICAgIGNhaXJvX3QqIGNhaXJvOworCisgICAgQVNTRVJUKG1fY2Fu
dmFzKTsKKyAgICBBU1NFUlQobV9lZGplKTsKKworICAgIGNlID0gY2FjaGVUaGVtZVBhcnRHZXQo
dHlwZSwgcmVjdC5zaXplKCkpOworICAgIEFTU0VSVChjZSk7CisgICAgaWYgKCFjZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXBwbHlFZGplU3RhdGVGcm9tRm9ybShjZS0+bywgY29u
dHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pKTsKKworICAgIGNhaXJvID0gaS5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQoY2Fpcm8pOworCisgICAgZWRqZV9vYmplY3RfY2Fs
Y19mb3JjZShjZS0+byk7CisgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9zaWduYWxfcHJvY2Vzcyhj
ZS0+byk7CisgICAgdXBkYXRlcyA9IGV2YXNfcmVuZGVyX3VwZGF0ZXMoZWNvcmVfZXZhc19nZXQo
Y2UtPmVlKSk7CisgICAgZXZhc19yZW5kZXJfdXBkYXRlc19mcmVlKHVwZGF0ZXMpOworCisgICAg
Y2Fpcm9fc2F2ZShjYWlybyk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNhaXJvLCBj
ZS0+c3VyZmFjZSwgcmVjdC54KCksIHJlY3QueSgpKTsKKyAgICBjYWlyb19wYWludF93aXRoX2Fs
cGhhKGNhaXJvLCAxLjApOworICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm8pOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUVmbDo6Y3Jl
YXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUVm
bChwYWdlKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVt
ZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIFJl
bmRlclRoZW1lRWZsOjpjcmVhdGUocGFnZSk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZh
bGxiYWNrID0gUmVuZGVyVGhlbWVFZmw6OmNyZWF0ZSgwKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0
dXJuIGZhbGxiYWNrOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NT
ZWxlY3Rpb25BY3RpdmUodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNp
Z25hbCwgY29uc3QgY2hhciogc291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5kZXJU
aGVtZUVmbCogdGhhdCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVm
bCAqPihkYXRhKTsKKyAgICBpbnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOworCisg
ICAgaWYgKCFlZGplX29iamVjdF9jb2xvcl9jbGFzc19nZXQobywgc291cmNlLCAmZnIsICZmZywg
JmZiLCAmZmEsICZiciwgJmJnLCAmYmIsICZiYSwgMCwgMCwgMCwgMCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRoYXQtPnNldEFjdGl2ZVNlbGVjdGlvbkNvbG9yKGZyLCBmZywgZmIsIGZhLCBi
ciwgYmcsIGJiLCBiYSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFz
c1NlbGVjdGlvbkluYWN0aXZlKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFy
KiBzaWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVu
ZGVyVGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhl
bWVFZmwgKj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYTsK
KworICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZyLCAm
ZmcsICZmYiwgJmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0aGF0LT5zZXRJbmFjdGl2ZVNlbGVjdGlvbkNvbG9yKGZyLCBmZywgZmIs
IGZhLCBiciwgYmcsIGJiLCBiYSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29s
b3JDbGFzc0ZvY3VzUmluZyh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
c2lnbmFsLCBjb25zdCBjaGFyKiBzb3VyY2UpCit7CisgICAgUmVuZGVyVGhlbWVFZmw6OlJlbmRl
clRoZW1lRWZsKiB0aGF0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1l
RWZsICo+KGRhdGEpOworICAgIGludCBmciwgZmcsIGZiLCBmYTsKKworICAgIGlmICghZWRqZV9v
YmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGhhdC0+c2V0Rm9j
dXNSaW5nQ29sb3IoZnIsIGZnLCBmYiwgZmEpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVt
ZUVmbENvbG9yQ2xhc3NCdXR0b25UZXh0KHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBzaWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVm
bDo6UmVuZGVyVGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVu
ZGVyVGhlbWVFZmwgKj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJi
LCBiYTsKKworICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwg
JmZyLCAmZmcsICZmYiwgJmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0aGF0LT5zZXRCdXR0b25UZXh0Q29sb3IoZnIsIGZnLCBmYiwg
ZmEsIGJyLCBiZywgYmIsIGJhKTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyVGhlbWVFZmxDb2xv
ckNsYXNzQ29tYm9UZXh0KHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBz
aWduYWwsIGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBSZW5kZXJUaGVtZUVmbDo6UmVuZGVy
VGhlbWVFZmwqIHRoYXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVF
ZmwgKj4oZGF0YSk7CisgICAgaW50IGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYTsKKwor
ICAgIGlmICghZWRqZV9vYmplY3RfY29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZyLCAmZmcs
ICZmYiwgJmZhLCAmYnIsICZiZywgJmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1
cm47CisKKyAgICB0aGF0LT5zZXRDb21ib1RleHRDb2xvcihmciwgZmcsIGZiLCBmYSwgYnIsIGJn
LCBiYiwgYmEpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NFbnRy
eVRleHQodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29u
c3QgY2hhciogc291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCog
dGhhdCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCAqPihkYXRh
KTsKKyAgICBpbnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOworCisgICAgaWYgKCFl
ZGplX29iamVjdF9jb2xvcl9jbGFzc19nZXQobywgc291cmNlLCAmZnIsICZmZywgJmZiLCAmZmEs
ICZiciwgJmJnLCAmYmIsICZiYSwgMCwgMCwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHRoYXQtPnNldEVudHJ5VGV4dENvbG9yKGZyLCBmZywgZmIsIGZhLCBiciwgYmcsIGJiLCBiYSk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlYXJjaFRleHQodm9p
ZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29uc3QgY2hhciog
c291cmNlKQoreworICAgIFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCogdGhhdCA9IHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVmbCAqPihkYXRhKTsKKyAgICBp
bnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOworICAgIGlmICghZWRqZV9vYmplY3Rf
Y29sb3JfY2xhc3NfZ2V0KG8sIHNvdXJjZSwgJmZyLCAmZmcsICZmYiwgJmZhLCAmYnIsICZiZywg
JmJiLCAmYmEsIDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGF0LT5zZXRT
ZWFyY2hUZXh0Q29sb3IoZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhKTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZUVmbDo6Y3JlYXRlQ2FudmFzKCkKK3sKKyAgICBBU1NFUlQoIW1fY2FudmFz
KTsKKyAgICBtX2NhbnZhcyA9IGVjb3JlX2V2YXNfYnVmZmVyX25ldygxLCAxKTsKKyAgICBBU1NF
UlQobV9jYW52YXMpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjpjcmVhdGVFZGplKCkKK3sK
KyAgICBBU1NFUlQoIW1fZWRqZSk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlID8gbV9wYWdl
LT5tYWluRnJhbWUoKSA6IDA7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUgPyBmcmFtZS0+
dmlldygpIDogMDsKKyAgICBTdHJpbmcgdGhlbWUgPSB2aWV3ID8gdmlldy0+ZWRqZVRoZW1lUmVj
dXJzaXZlKCkgOiAiIjsKKyAgICBpZiAodGhlbWUuaXNFbXB0eSgpKQorICAgICAgICBFSU5BX0xP
R19FUlIoIk5vIHRoZW1lIGRlZmluZWQsIHVuYWJsZSB0byBzZXQgUmVuZGVyVGhlbWVFZmwuIik7
CisgICAgZWxzZSB7CisgICAgICAgIG1fZWRqZSA9IGVkamVfb2JqZWN0X2FkZChlY29yZV9ldmFz
X2dldChtX2NhbnZhcykpOworICAgICAgICBpZiAoIW1fZWRqZSkKKyAgICAgICAgICAgIEVJTkFf
TE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBiYXNlIGVkamUgb2JqZWN0LiIpOworICAgICAgICBl
bHNlIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQobV9lZGplLCB0aGVtZS51dGY4KCkuZGF0YSgp
LCAid2Via2l0L2Jhc2UiKSkgeworICAgICAgICAgICAgaW50IGVyciA9IGVkamVfb2JqZWN0X2xv
YWRfZXJyb3JfZ2V0KG1fZWRqZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJtc2cgPSBl
ZGplX2xvYWRfZXJyb3Jfc3RyKGVycik7CisgICAgICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxk
IG5vdCBsb2FkICd3ZWJraXQvYmFzZScgZnJvbSB0aGVtZSAlczogJXMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoZW1lLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAgICAgICBl
dmFzX29iamVjdF9kZWwobV9lZGplKTsKKyAgICAgICAgICAgIG1fZWRqZSA9IDA7CisgICAgICAg
IH0gZWxzZSB7CisjZGVmaW5lIENPTk5FQ1QoY2MsIGZ1bmMpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlZGplX29iamVjdF9zaWdu
YWxfY2FsbGJhY2tfYWRkKG1fZWRqZSwgImNvbG9yX2NsYXNzLHNldCIsICBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQvImNjLCBmdW5jLCB0aGlz
KQorCisgICAgICAgICAgICBDT05ORUNUKCJzZWxlY3Rpb24vYWN0aXZlIiwKKyAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyVGhlbWVFZmxDb2xvckNsYXNzU2VsZWN0aW9uQWN0aXZlKTsKKyAgICAg
ICAgICAgIENPTk5FQ1QoInNlbGVjdGlvbi9pbmFjdGl2ZSIsCisgICAgICAgICAgICAgICAgICAg
IHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlbGVjdGlvbkluYWN0aXZlKTsKKyAgICAgICAgICAg
IENPTk5FQ1QoImZvY3VzX3JpbmciLCByZW5kZXJUaGVtZUVmbENvbG9yQ2xhc3NGb2N1c1Jpbmcp
OworICAgICAgICAgICAgQ09OTkVDVCgiYnV0dG9uL3RleHQiLCByZW5kZXJUaGVtZUVmbENvbG9y
Q2xhc3NCdXR0b25UZXh0KTsKKyAgICAgICAgICAgIENPTk5FQ1QoImNvbWJvL3RleHQiLCByZW5k
ZXJUaGVtZUVmbENvbG9yQ2xhc3NDb21ib1RleHQpOworICAgICAgICAgICAgQ09OTkVDVCgiZW50
cnkvdGV4dCIsIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc0VudHJ5VGV4dCk7CisgICAgICAgICAg
ICBDT05ORUNUKCJzZWFyY2gvdGV4dCIsIHJlbmRlclRoZW1lRWZsQ29sb3JDbGFzc1NlYXJjaFRl
eHQpOworI3VuZGVmIENPTk5FQ1QKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobV9lZGpl
KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplQ29sb3JzKCkKK3sKKyAgICBp
bnQgZnIsIGZnLCBmYiwgZmEsIGJyLCBiZywgYmIsIGJhOworICAgIEFTU0VSVChtX2VkamUpOwor
I2RlZmluZSBDT0xPUl9HRVQoY2xzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGVkamVfb2JqZWN0X2NvbG9yX2NsYXNzX2dldChtX2VkamUs
ICJ3ZWJraXQvImNscywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZnIsICZmZywgJmZiLCAmZmEsICZiciwgJmJnLCAmYmIsICZiYSwgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwKQorCisgICAgaWYgKENPTE9S
X0dFVCgic2VsZWN0aW9uL2FjdGl2ZSIpKSB7CisgICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yID0gQ29sb3IoZnIsIGZnLCBmYiwgZmEpOworICAgICAgICBtX2FjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvciA9IENvbG9yKGJyLCBiZywgYmIsIGJhKTsKKyAgICB9Cisg
ICAgaWYgKENPTE9SX0dFVCgic2VsZWN0aW9uL2luYWN0aXZlIikpIHsKKyAgICAgICAgbV9pbmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IENvbG9yKGZyLCBmZywgZmIsIGZhKTsKKyAg
ICAgICAgbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IENvbG9yKGJyLCBiZywg
YmIsIGJhKTsKKyAgICB9CisgICAgaWYgKENPTE9SX0dFVCgiZm9jdXNfcmluZyIpKSB7CisgICAg
ICAgIG1fZm9jdXNSaW5nQ29sb3IgPSBDb2xvcihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIC8v
IHdlYmtpdCBqdXN0IHVzZSBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkgZm9yIGRlZmF1bHQgdGhl
bWUgKHdpdGhvdXQgcGFnZSkKKyAgICAgICAgLy8gdGhpcyBpcyB1Z2x5LCBidXQgbm8gb3RoZXIg
d2F5IHRvIGRvIGl0IHVubGVzcyB3ZSBjaGFuZ2UKKyAgICAgICAgLy8gaXQgdG8gdXNlIHBhZ2Ug
dGhlbWVzIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICAgIFJlbmRlclRoZW1lOjpzZXRDdXN0
b21Gb2N1c1JpbmdDb2xvcihtX2ZvY3VzUmluZ0NvbG9yKTsKKyAgICB9CisgICAgaWYgKENPTE9S
X0dFVCgiYnV0dG9uL3RleHQiKSkgeworICAgICAgICBtX2J1dHRvblRleHRGb3JlZ3JvdW5kQ29s
b3IgPSBDb2xvcihmciwgZmcsIGZiLCBmYSk7CisgICAgICAgIG1fYnV0dG9uVGV4dEJhY2tncm91
bmRDb2xvciA9IENvbG9yKGJyLCBiZywgYmIsIGJhKTsKKyAgICB9CisgICAgaWYgKENPTE9SX0dF
VCgiY29tYm8vdGV4dCIpKSB7CisgICAgICAgIG1fY29tYm9UZXh0Rm9yZWdyb3VuZENvbG9yID0g
Q29sb3IoZnIsIGZnLCBmYiwgZmEpOworICAgICAgICBtX2NvbWJvVGV4dEJhY2tncm91bmRDb2xv
ciA9IENvbG9yKGJyLCBiZywgYmIsIGJhKTsKKyAgICB9CisgICAgaWYgKENPTE9SX0dFVCgiZW50
cnkvdGV4dCIpKSB7CisgICAgICAgIG1fZW50cnlUZXh0Rm9yZWdyb3VuZENvbG9yID0gQ29sb3Io
ZnIsIGZnLCBmYiwgZmEpOworICAgICAgICBtX2VudHJ5VGV4dEJhY2tncm91bmRDb2xvciA9IENv
bG9yKGJyLCBiZywgYmIsIGJhKTsKKyAgICB9CisgICAgaWYgKENPTE9SX0dFVCgic2VhcmNoL3Rl
eHQiKSkgeworICAgICAgICBtX3NlYXJjaFRleHRGb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmciwg
ZmcsIGZiLCBmYSk7CisgICAgICAgIG1fc2VhcmNoVGV4dEJhY2tncm91bmRDb2xvciA9IENvbG9y
KGJyLCBiZywgYmIsIGJhKTsKKyAgICB9CisjdW5kZWYgQ09MT1JfR0VUCisgICAgcGxhdGZvcm1D
b2xvcnNEaWRDaGFuZ2UoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVz
Y3JpcHRpb25GYWxsYmFjayhzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyogZGVzYykKK3sKKyAgICBkZXNj
LT5taW4uc2V0V2lkdGgoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgZGVzYy0+bWluLnNldEhlaWdo
dChMZW5ndGgoMCwgRml4ZWQpKTsKKworICAgIGRlc2MtPm1heC5zZXRXaWR0aChMZW5ndGgoMCwg
Rml4ZWQpKTsKKyAgICBkZXNjLT5tYXguc2V0SGVpZ2h0KExlbmd0aCgwLCBGaXhlZCkpOworCisg
ICAgZGVzYy0+cGFkZGluZyA9IExlbmd0aEJveCgwLCAwLCAwLCAwKTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG8sIHN0cnVjdCBU
aGVtZVBhcnREZXNjKiBkZXNjKQoreworICAgIEV2YXNfQ29vcmQgbWludywgbWluaCwgbWF4dywg
bWF4aDsKKworICAgIGVkamVfb2JqZWN0X3NpemVfbWluX2dldChvLCAmbWludywgJm1pbmgpOwor
ICAgIGlmICghbWludyAmJiAhbWluaCkKKyAgICAgICAgZWRqZV9vYmplY3Rfc2l6ZV9taW5fY2Fs
YyhvLCAmbWludywgJm1pbmgpOworCisgICAgZGVzYy0+bWluLnNldFdpZHRoKExlbmd0aChtaW53
LCBGaXhlZCkpOworICAgIGRlc2MtPm1pbi5zZXRIZWlnaHQoTGVuZ3RoKG1pbmgsIEZpeGVkKSk7
CisKKyAgICBlZGplX29iamVjdF9zaXplX21heF9nZXQobywgJm1heHcsICZtYXhoKTsKKyAgICBk
ZXNjLT5tYXguc2V0V2lkdGgoTGVuZ3RoKG1heHcsIEZpeGVkKSk7CisgICAgZGVzYy0+bWF4LnNl
dEhlaWdodChMZW5ndGgobWF4aCwgRml4ZWQpKTsKKworICAgIGlmICghZWRqZV9vYmplY3RfcGFy
dF9leGlzdHMobywgInRleHRfY29uZmluZW1lbnQiKSkKKyAgICAgICAgZGVzYy0+cGFkZGluZyA9
IExlbmd0aEJveCgwLCAwLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgRXZhc19Db29yZCBw
eCwgcHksIHB3LCBwaDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IDAsIG95ID0gMCwgb3cgPSAw
LCBvaCA9IDA7CisgICAgICAgIGludCB0LCByLCBiLCBsOworCisgICAgICAgIGlmIChtaW53ID4g
MCkKKyAgICAgICAgICAgIG93ID0gbWludzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3cg
PSAxMDA7CisgICAgICAgIGlmIChtaW5oID4gMCkKKyAgICAgICAgICAgIG9oID0gbWluaDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb2ggPSAxMDA7CisgICAgICAgIGlmIChtYXh3ID4gMCAm
JiBvdyA+IG1heHcpCisgICAgICAgICAgICBvdyA9IG1heHc7CisgICAgICAgIGlmIChtYXhoID4g
MCAmJiBvaCA+IG1heGgpCisgICAgICAgICAgICBvaCA9IG1heGg7CisKKyAgICAgICAgZXZhc19v
YmplY3RfbW92ZShvLCBveCwgb3kpOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUobywgb3cs
IG9oKTsKKyAgICAgICAgZWRqZV9vYmplY3RfY2FsY19mb3JjZShvKTsKKyAgICAgICAgZWRqZV9v
YmplY3RfbWVzc2FnZV9zaWduYWxfcHJvY2VzcyhvKTsKKyAgICAgICAgZWRqZV9vYmplY3RfcGFy
dF9nZW9tZXRyeV9nZXQobywgInRleHRfY29uZmluZW1lbnQiLCAmcHgsICZweSwgJnB3LCAmcGgp
OworCisgICAgICAgIHQgPSBweSAtIG95OworICAgICAgICBiID0gKG9oICsgb3kpIC0gKHBoICsg
cHkpOworCisgICAgICAgIGwgPSBweCAtIG94OworICAgICAgICByID0gKG93ICsgb3gpIC0gKHB3
ICsgcHgpOworCisgICAgICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhCb3godCwgciwgYiwgbCk7
CisgICAgfQorfQorCitjb25zdCBjaGFyKiBSZW5kZXJUaGVtZUVmbDo6ZWRqZUdyb3VwRnJvbUZv
cm1UeXBlKEZvcm1UeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdy
b3Vwc1tdID0geworI2RlZmluZSBXKG4pICJ3ZWJraXQvd2lkZ2V0LyJuCisgICAgICAgIFcoImJ1
dHRvbiIpLAorICAgICAgICBXKCJyYWRpbyIpLAorICAgICAgICBXKCJlbnRyeSIpLAorICAgICAg
ICBXKCJjaGVja2JveCIpLAorICAgICAgICBXKCJjb21ibyIpLAorICAgICAgICBXKCJzZWFyY2gv
ZmllbGQiKSwKKyAgICAgICAgVygic2VhcmNoL2RlY29yYXRpb24iKSwKKyAgICAgICAgVygic2Vh
cmNoL3Jlc3VsdHNfYnV0dG9uIiksCisgICAgICAgIFcoInNlYXJjaC9yZXN1bHRzX2RlY29yYXRp
b24iKSwKKyAgICAgICAgVygic2VhcmNoL2NhbmNlbF9idXR0b24iKSwKKyN1bmRlZiBXCisgICAg
ICAgIDAKKyAgICB9OworICAgIEFTU0VSVCh0eXBlID49IDApOworICAgIEFTU0VSVCgoc2l6ZV90
KXR5cGUgPCBzaXplb2YoZ3JvdXBzKSAvIHNpemVvZihncm91cHNbMF0pKTsgLy8gb3V0IG9mIHN5
bmM/CisgICAgcmV0dXJuIGdyb3Vwc1t0eXBlXTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YXBwbHlQYXJ0RGVzY3JpcHRpb25zKCkKK3sKKyAgICBFdmFzX09iamVjdCogbzsKKyAgICB1bnNp
Z25lZCBpbnQgaTsKKyAgICBjb25zdCBjaGFyKiBmaWxlOworCisgICAgQVNTRVJUKG1fY2FudmFz
KTsKKyAgICBBU1NFUlQobV9lZGplKTsKKworICAgIGVkamVfb2JqZWN0X2ZpbGVfZ2V0KG1fZWRq
ZSwgJmZpbGUsIDApOworICAgIEFTU0VSVChmaWxlKTsKKworICAgIG8gPSBlZGplX29iamVjdF9h
ZGQoZWNvcmVfZXZhc19nZXQobV9jYW52YXMpKTsKKyAgICBpZiAoIW8pIHsKKyAgICAgICAgRUlO
QV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIEVkamUgb2JqZWN0LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IEZvcm1UeXBlTGFzdDsgaSsrKSB7Cisg
ICAgICAgIEZvcm1UeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxGb3JtVHlwZT4oaSk7CisgICAgICAg
IGNvbnN0IGNoYXIqIGdyb3VwID0gZWRqZUdyb3VwRnJvbUZvcm1UeXBlKHR5cGUpOworICAgICAg
ICBtX3BhcnREZXNjc1tpXS50eXBlID0gdHlwZTsKKyAgICAgICAgaWYgKCFlZGplX29iamVjdF9m
aWxlX3NldChvLCBmaWxlLCBncm91cCkpIHsKKyAgICAgICAgICAgIGludCBlcnIgPSBlZGplX29i
amVjdF9sb2FkX2Vycm9yX2dldChvKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm1zZyA9
IGVkamVfbG9hZF9lcnJvcl9zdHIoZXJyKTsKKyAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IHNldCB0aGVtZSBncm91cCAnJXMnIG9mIGZpbGUgJyVzJzogJXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGdyb3VwLCBmaWxlLCBlcnJtc2cpOworCisgICAgICAgICAgICBhcHBs
eVBhcnREZXNjcmlwdGlvbkZhbGxiYWNrKG1fcGFydERlc2NzICsgaSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYXBwbHlQYXJ0RGVzY3JpcHRpb24obywgbV9wYXJ0RGVzY3MgKyBpKTsK
KyAgICB9CisgICAgZXZhc19vYmplY3RfZGVsKG8pOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZs
Ojp0aGVtZUNoYW5nZWQoKQoreworICAgIGNhY2hlVGhlbWVQYXJ0Rmx1c2goKTsKKworICAgIGlm
ICghbV9jYW52YXMpIHsKKyAgICAgICAgY3JlYXRlQ2FudmFzKCk7CisgICAgICAgIGlmICghbV9j
YW52YXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2VkamUpIHsK
KyAgICAgICAgY3JlYXRlRWRqZSgpOworICAgICAgICBpZiAoIW1fZWRqZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseUVkamVDb2xvcnMoKTsKKyAgICBhcHBseVBhcnRE
ZXNjcmlwdGlvbnMoKTsKK30KKworUmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKFBhZ2Uq
IHBhZ2UpCisgICAgOiBSZW5kZXJUaGVtZSgpCisgICAgLCBtX3BhZ2UocGFnZSkKKyAgICAsIG1f
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKDAsIDAsIDI1NSkKKyAgICAsIG1fYWN0aXZl
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKDI1NSwgMjU1LCAyNTUpCisgICAgLCBtX2luYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKDAsIDAsIDEyOCkKKyAgICAsIG1faW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoMjAwLCAyMDAsIDIwMCkKKyAgICAsIG1fZm9jdXNSaW5nQ29s
b3IoMzIsIDMyLCAyMjQsIDIyNCkKKyAgICAsIG1fYnV0dG9uVGV4dEJhY2tncm91bmRDb2xvcigw
LCAwLCAwLCAwKQorICAgICwgbV9idXR0b25UZXh0Rm9yZWdyb3VuZENvbG9yKDAsIDAsIDApCisg
ICAgLCBtX2NvbWJvVGV4dEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9jb21i
b1RleHRGb3JlZ3JvdW5kQ29sb3IoMCwgMCwgMCkKKyAgICAsIG1fZW50cnlUZXh0QmFja2dyb3Vu
ZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2VudHJ5VGV4dEZvcmVncm91bmRDb2xvcigwLCAw
LCAwKQorICAgICwgbV9zZWFyY2hUZXh0QmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAg
LCBtX3NlYXJjaFRleHRGb3JlZ3JvdW5kQ29sb3IoMCwgMCwgMCkKKyAgICAsIG1fY2FudmFzKDAp
CisgICAgLCBtX2VkamUoMCkKK3sKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSAm
JiBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKQorICAgICAgICB0aGVtZUNoYW5nZWQoKTsKK30K
KworUmVuZGVyVGhlbWVFZmw6On5SZW5kZXJUaGVtZUVmbCgpCit7CisgICAgY2FjaGVUaGVtZVBh
cnRGbHVzaCgpOworCisgICAgaWYgKG1fY2FudmFzKSB7CisgICAgICAgIGlmIChtX2VkamUpCisg
ICAgICAgICAgICBldmFzX29iamVjdF9kZWwobV9lZGplKTsKKyAgICAgICAgZWNvcmVfZXZhc19m
cmVlKG1fY2FudmFzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldEFjdGl2
ZVNlbGVjdGlvbkNvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3Jl
QSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKQoreworICAgIG1f
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0gQ29sb3IoZm9yZVIsIGZvcmVHLCBmb3Jl
QiwgZm9yZUEpOworICAgIG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gQ29sb3Io
YmFja1IsIGJhY2tHLCBiYWNrQiwgYmFja0EpOworICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnNldEluYWN0aXZlU2VsZWN0aW9uQ29sb3Io
aW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGlu
dCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCit7CisgICAgbV9pbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvciA9IENvbG9yKGZvcmVSLCBmb3JlRywgZm9yZUIsIGZvcmVBKTsKKyAg
ICBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gQ29sb3IoYmFja1IsIGJhY2tH
LCBiYWNrQiwgYmFja0EpOworICAgIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVFZmw6OnNldEZvY3VzUmluZ0NvbG9yKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKQoreworICAgIG1fZm9jdXNSaW5nQ29sb3IgPSBDb2xvcihyLCBnLCBiLCBhKTsKKyAg
ICAvLyB3ZWJraXQganVzdCB1c2UgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGZvciBkZWZhdWx0
IHRoZW1lICh3aXRob3V0IHBhZ2UpCisgICAgLy8gdGhpcyBpcyB1Z2x5LCBidXQgbm8gb3RoZXIg
d2F5IHRvIGRvIGl0IHVubGVzcyB3ZSBjaGFuZ2UKKyAgICAvLyBpdCB0byB1c2UgcGFnZSB0aGVt
ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICBSZW5kZXJUaGVtZTo6c2V0Q3VzdG9tRm9jdXNS
aW5nQ29sb3IobV9mb2N1c1JpbmdDb2xvcik7CisgICAgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2Uo
KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0QnV0dG9uVGV4dENvbG9yKGludCBmb3Jl
UiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0cs
IGludCBiYWNrQiwgaW50IGJhY2tBKQoreworICAgIG1fYnV0dG9uVGV4dEZvcmVncm91bmRDb2xv
ciA9IENvbG9yKGZvcmVSLCBmb3JlRywgZm9yZUIsIGZvcmVBKTsKKyAgICBtX2J1dHRvblRleHRC
YWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiYWNrUiwgYmFja0csIGJhY2tCLCBiYWNrQSk7CisgICAg
cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0
Q29tYm9UZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVB
LCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpCit7CisgICAgbV9j
b21ib1RleHRGb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3JlUiwgZm9yZUcsIGZvcmVCLCBmb3Jl
QSk7CisgICAgbV9jb21ib1RleHRCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiYWNrUiwgYmFja0cs
IGJhY2tCLCBiYWNrQSk7CisgICAgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZUVmbDo6c2V0RW50cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcs
IGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBp
bnQgYmFja0EpCit7CisgICAgbV9lbnRyeVRleHRGb3JlZ3JvdW5kQ29sb3IgPSBDb2xvcihmb3Jl
UiwgZm9yZUcsIGZvcmVCLCBmb3JlQSk7CisgICAgbV9lbnRyeVRleHRCYWNrZ3JvdW5kQ29sb3Ig
PSBDb2xvcihiYWNrUiwgYmFja0csIGJhY2tCLCBiYWNrQSk7CisgICAgcGxhdGZvcm1Db2xvcnNE
aWRDaGFuZ2UoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0U2VhcmNoVGV4dENvbG9y
KGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBp
bnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKQoreworICAgIG1fc2VhcmNoVGV4dEZvcmVn
cm91bmRDb2xvciA9IENvbG9yKGZvcmVSLCBmb3JlRywgZm9yZUIsIGZvcmVBKTsKKyAgICBtX3Nl
YXJjaFRleHRCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihiYWNrUiwgYmFja0csIGJhY2tCLCBiYWNr
QSk7CisgICAgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKworc3RhdGljIGJvb2wgc3Vw
cG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQoreworICAgIHN3aXRjaCAoYXBwZWFy
YW5jZSkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0Ogor
ICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRBcmVhUGFydDoKKyAgICBjYXNl
IFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoKKyAgICBjYXNlIFJhZGlv
UGFydDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJU
aGVtZUVmbDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoreworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworfQor
Citib29sIFJlbmRlclRoZW1lRWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzRW5hYmxlZChvKTsKK30KKworaW50IFJl
bmRlclRoZW1lRWZsOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29u
c3QKK3sKKyAgICBpZiAoIW8tPmlzQm94KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKKyAgICB8fCAgby0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVy
Qm94KG8pLT5tYXJnaW5Ub3AoKSArIHRvUmVuZGVyQm94KG8pLT5oZWlnaHQoKSAtIDM7CisKKyAg
ICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1f
cGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCkt
PnRoZW1lKCkpLT5hZGp1c3RDaGVja2JveFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBDaGVj
a0JveCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICBjb25zdCBzdHJ1Y3QgVGhl
bWVQYXJ0RGVzYyAqZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClDaGVja0JveDsKKyAgICBp
ZiAoc3R5bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisg
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxl
LT5oZWlnaHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCisgICAgICAg
IHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWlu
dFRoZW1lUGFydChvLCBDaGVja0JveCwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZSAmJiBlICYm
IGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCkpLT5h
ZGp1c3RSYWRpb1N0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBSYWRpb0J1dHRvbik7CisgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICBjb25zdCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyAq
ZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClSYWRpb0J1dHRvbjsKKyAgICBpZiAoc3R5bGUt
PndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0
eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQo
KS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCisgICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFydChv
LCBSYWRpb0J1dHRvbiwgaSwgcmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1
bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJl
bmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0QnV0
dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQnV0dG9uKTsKKworICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7CisgICAgICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIHN0eWxlLT5zZXRDb2xvciht
X2J1dHRvblRleHRGb3JlZ3JvdW5kQ29sb3IpOworICAgICAgICBzdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKG1fYnV0dG9uVGV4dEJhY2tncm91bmRDb2xvcik7CisgICAgfQorfQorCitib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBw
YWludFRoZW1lUGFydChvLCBCdXR0b24sIGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYg
ZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgp
KS0+YWRqdXN0TWVudUxpc3RTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ29tYm9Cb3gpOwor
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7
CisgICAgc3R5bGUtPnNldENvbG9yKG1fY29tYm9UZXh0Rm9yZWdyb3VuZENvbG9yKTsKKyAgICBz
dHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKG1fY29tYm9UZXh0QmFja2dyb3VuZENvbG9yKTsKK30K
KworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBDb21ib0JveCwgaSwgcmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAg
aWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+
cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5
bGUsIFRleHRGaWVsZCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS0+c2V0Q29sb3IobV9lbnRyeVRleHRGb3JlZ3Jv
dW5kQ29sb3IpOworICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9lbnRyeVRleHRCYWNr
Z3JvdW5kQ29sb3IpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBUZXh0RmllbGQs
IGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0QXJlYVN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGUpIGNvbnN0Cit7CisgICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcGFnZSAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbDo6UmVuZGVyVGhlbWVFZmwqPihlLT5kb2N1bWVudCgp
LT5wYWdlKCktPnRoZW1lKCkpLT5hZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShzZWxl
Y3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVD
b25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGREZWNvcmF0aW9uKTsKKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworfQorCitib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHJldHVybiBwYWludFRoZW1lUGFydChvLCBTZWFyY2hGaWVsZERlY29yYXRpb24sIGks
IHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9j
dW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpS
ZW5kZXJUaGVtZUVmbCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24pOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50
VGhlbWVQYXJ0KG8sIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaSwgcmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAoreworICAgIGlmICghbV9wYWdlICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFn
ZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsOjpSZW5kZXJUaGVtZUVm
bCo+KGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKSktPmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvbik7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoUFJFKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50
VGhlbWVQYXJ0KG8sIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24sIGksIHJlY3QpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdl
KCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmw6OlJlbmRlclRoZW1lRWZs
Kj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpKS0+YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRDYW5jZWxCdXR0
b24pOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNl
KFBSRSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQobywgU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24sIGksIHJlY3QpOworfQorCit2b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UgJiYg
ZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVFZmw6OlJlbmRlclRoZW1lRWZsKj4oZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgp
KS0+YWRqdXN0U2VhcmNoRmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmll
bGQpOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNl
KFBSRSk7CisgICAgc3R5bGUtPnNldENvbG9yKG1fc2VhcmNoVGV4dEZvcmVncm91bmRDb2xvcik7
CisgICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihtX3NlYXJjaFRleHRCYWNrZ3JvdW5kQ29s
b3IpOworfQorCitib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG8sIFNlYXJjaEZpZWxkLCBpLCBy
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0Cit7CisgICAgLy8gSWYgeW91IHJlbW92ZSB0aGlzIG5vdEltcGxlbWVu
dGVkKCksIHJlcGxhY2UgaXQgd2l0aCBhbiBjb21tZW50IHRoYXQgZXhwbGFpbnMgd2h5LgorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCisrKyBXZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDEwLTAyLTI1ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lv
bi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBBZGQgRUZM
IHBvcnQgZmlsZXMgdG8gcGxhdGZvcm0vZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9i
LzM1MDg3CisKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5j
cHA6IEFkZGVkLgorCiAyMDEwLTAyLTI1ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZv
Lm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFhh
biBMb3Blei4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49525</attachid>
            <date>2010-02-25 12:37:32 -0800</date>
            <delta_ts>2010-02-26 21:16:09 -0800</delta_ts>
            <desc>Patch 7/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-7.diff</filename>
            <type>text/plain</type>
            <size>13931</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0xvZ2dpbmdFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5jcHAKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUg
VGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCit7
CisgICAgTG9nTm90WWV0SW1wbGVtZW50ZWQuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1lRWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRo
ZW1lRWZsLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRU
IC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUVm
bC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6
bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZUVmbCB0aGVtZTsKKyAg
ICByZXR1cm4gJnRoZW1lOworfQorCitTY3JvbGxiYXJUaGVtZUVmbDo6flNjcm9sbGJhclRoZW1l
RWZsKCkKK3sKK30KKworaW50IFNjcm9sbGJhclRoZW1lRWZsOjpzY3JvbGxiYXJUaGlja25lc3Mo
U2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgcmV0dXJuIDA7IC8vIHdl
IHBhaW50IG9uIHRvcAorfQorCit2b2lkIFNjcm9sbGJhclRoZW1lRWZsOjpyZWdpc3RlclNjcm9s
bGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUVm
bDo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKK30KKworfQor
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDxmbG9hdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVu
c2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0
IEtVUkwgJnVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Zsb2F0IHVzZXJJZGxl
VGltZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRkxUX01BWDsKK30K
KworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxWaWV3RWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdF
ZmwuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2lu
Y2x1ZGUgPEV2YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvU2hhcmVkQnVmZmVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1NoYXJlZEJ1ZmZlckVmbC5jcHAKQEAgLTAsMCArMSw3MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogICAgICAgICAgICAgICAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiAgICAg
ICAgICAgICAgIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAg
ICAgICAgICAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRl
bnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgRklMRSogZmlsZTsKKyAg
ICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXN1bHQ7
CisKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmICghKGZpbGUgPSBmb3BlbihmaWxlUGF0aC51dGY4KCkuZGF0YSgpLCAicmIiKSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGZzdGF0KGZpbGVubyhmaWxlKSwgJmZpbGVTdGF0KSkg
eworICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5tX2J1ZmZlci5y
ZXNpemUoZmlsZVN0YXQuc3Rfc2l6ZSk7CisgICAgaWYgKHJlc3VsdC0+bV9idWZmZXIuc2l6ZSgp
ICE9IGZpbGVTdGF0LnN0X3NpemUpIHsKKyAgICAgICAgZmNsb3NlKGZpbGUpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBmcmVhZChyZXN1bHQtPm1fYnVmZmVyLmRhdGEoKSwgMSwg
ZmlsZVN0YXQuc3Rfc2l6ZSwgZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworCisgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdEYXRhRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251
bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdEYXRhRWZsLmNwcApAQCAtMCwwICsxLDg5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRl
IFRlY25vbG9naWEKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEcmFnRGF0YS5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNG
aWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERyYWdEYXRhOjph
c0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAoreworfQorCitib29sIERy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQ29sb3IoKTsKK30KKworUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IERyYWdEYXRhOjpjcmVh
dGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5KSBjb25zdAoreworICAgIHJldHVybiAw
OworfQorCitib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBEcmFnRGF0YTo6YXNVUkwo
U3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1lbnQqKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCit9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZworKysgV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxMC0wMi0yNSAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9m
dXNpb24ubW9iaT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgQWRk
IEVGTCBwb3J0IGZpbGVzIHRvIHBsYXRmb3JtL2VmbC4KKyAgICAgICAgaHR0cDovL3dlYmtpdC5v
cmcvYi8zNTA4NworCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5j
cHA6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhclRoZW1l
RWZsLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Ny
b2xsVmlld0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1No
YXJlZEJ1ZmZlckVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vZWZs
L0RyYWdEYXRhRWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDItMjUgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgWGFuIExvcGV6Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49579</attachid>
            <date>2010-02-26 06:46:55 -0800</date>
            <delta_ts>2010-02-26 21:32:49 -0800</delta_ts>
            <desc>Patch 1/1 to WebCore/page/efl</desc>
            <filename>webkit-efl-webcore_page_efl-1.diff</filename>
            <type>text/plain</type>
            <size>11133</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0Nv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0
ID0gMjsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAx
NTAwICogMTUwMDsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0
ID0gNzsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7
CisKK2NvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwor
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJh
Z0RhdGEqIGRyYWdEYXRhKQoreworICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoKSkKKyAg
ICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OworCisgICAgcmV0dXJuIERyYWdPcGVyYXRp
b25Ob25lOworfQorCitjb25zdCBJbnRTaXplJiBEcmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdl
U2l6ZSgpCit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgbWF4RHJhZ0ltYWdlU2l6ZSg0MDAs
IDQwMCk7CisKKyAgICByZXR1cm4gbWF4RHJhZ0ltYWdlU2l6ZTsKK30KKwordm9pZCBEcmFnQ29u
dHJvbGxlcjo6Y2xlYW51cEFmdGVyU3lzdGVtRHJhZygpCit7fQorCit9CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvZWZsL0ZyYW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNv
cmUvcGFnZS9lZmwvRnJhbWVFZmwuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFn
ZUZvclNlbGVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworfQpJbmRleDogV2ViQ29yZS9wYWdlL2VmbC9BY2Nlc3NpYmlsaXR5T2JqZWN0RWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGFnZS9lZmwvQWNjZXNzaWJp
bGl0eU9iamVjdEVmbC5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5o
IgorCisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFjaG1lbnQoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpJbmRleDogV2ViQ29yZS9wYWdlL2VmbC9F
dmVudEhhbmRsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9w
YWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwyMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkRWZs
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
ZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdEZWxheSA9IDAuMDsKKworc3RhdGljIGJvb2wg
aXNLZXlib2FyZE9wdGlvblRhYihLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICByZXR1cm4g
ZXZlbnQKKyAgICAgICAgJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAg
ICAgICAmJiBldmVudC0+YWx0S2V5KCkKKyAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIo
KSA9PSAiVSswMDA5IjsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJz
VG9MaW5rcyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNLZXli
b2FyZE9wdGlvblRhYihldmVudCk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxD
b250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKK3sKKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWRGcmFtZShtX2ZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmIGV2ZW50KQoreworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsKKworICAg
IGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxS
ZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldp
ZGdldCkKK3sKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQocmVuZGVyV2lk
Z2V0LT53aWRnZXQoKSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZl
bnRUb1dpZGdldChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmll
dyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVs
RXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkK
K3sKKyAgICBBU1NFUlQod2lkZ2V0KTsKKyAgICBpZiAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2
ZW50KTsKK30KKworUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkRWZsKENs
aXBib2FyZFdyaXRhYmxlLCB0cnVlKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3Vz
ZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwg
RnJhbWUqIHN1YmZyYW1lKQoreworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VQcmVzc0V2ZW50KG1ldi5ldmVudCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhv
dmVyZWROb2RlKQoreworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VN
b3ZlRXZlbnQobWV2LmV2ZW50KCksIGhvdmVyZWROb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAg
c3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYuZXZl
bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEV2ZW50SGFuZGxlcjo6YWNj
ZXNzS2V5TW9kaWZpZXJzKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpB
bHRLZXk7Cit9Cit9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NoYW5nZUxvZworKysgV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
MC0wMi0yNiAgTGVhbmRybyBQZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgQWRkIEVGTCBwb3J0IGZpbGVzIHRv
IHBhZ2UvZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisKKyAgICAgICAg
KiBXZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZsLmNwcDogQWRkZWQuCisgICAgICAg
ICogV2ViQ29yZS9wYWdlL2VmbC9GcmFtZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYkNv
cmUvcGFnZS9lZmwvQWNjZXNzaWJpbGl0eU9iamVjdEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAq
IFdlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDIt
MjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUXQgYW5k
IEd0ayBidWlsZCBmaXhlcy4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49606</attachid>
            <date>2010-02-26 11:53:02 -0800</date>
            <delta_ts>2010-02-26 21:49:29 -0800</delta_ts>
            <desc>Patch 2/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-1.diff</filename>
            <type>text/plain</type>
            <size>21785</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
L2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCkBAIC0wLDAg
KzEsNDA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29z
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJz
b3IuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxFZGplLmg+
CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0
Zm9ybUN1cnNvciBwKQoreworICAgIG1faW1wbCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHApOwor
fQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1faW1wbCA9
IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1faW1wbCk7Cit9CisKK0N1cnNvcjo6fkN1cnNv
cigpCit7CisgICAgaWYgKG1faW1wbCkgeworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbCht
X2ltcGwpOworICAgICAgICBtX2ltcGwgPSAwOworICAgIH0KK30KKworQ3Vyc29yOjpDdXJzb3Io
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKKyAgICA6IG1faW1wbCgwKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0o
Y29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZihvdGhlci5t
X2ltcGwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG1faW1wbCk7CisgICAgbV9pbXBsID0g
b3RoZXIubV9pbXBsOworICAgIHJldHVybiAqdGhpczsKK30KKworbmFtZXNwYWNlIHsKKworY2xh
c3MgQ3Vyc29ycyB7Citwcm90ZWN0ZWQ6CisgICAgQ3Vyc29ycygpCisgICAgICAgIDogUG9pbnRl
ckN1cnNvcigiY3Vyc29yL3BvaW50ZXIiKQorICAgICAgICAsIE1vdmVDdXJzb3IoImN1cnNvci9t
b3ZlIikKKyAgICAgICAgLCBDcm9zc0N1cnNvcigiY3Vyc29yL2Nyb3NzIikKKyAgICAgICAgLCBI
YW5kQ3Vyc29yKCJjdXJzb3IvaGFuZCIpCisgICAgICAgICwgSUJlYW1DdXJzb3IoImN1cnNvci9p
X2JlYW0iKQorICAgICAgICAsIFdhaXRDdXJzb3IoImN1cnNvci93YWl0IikKKyAgICAgICAgLCBI
ZWxwQ3Vyc29yKCJjdXJzb3IvaGVscCIpCisgICAgICAgICwgRWFzdFJlc2l6ZUN1cnNvcigiY3Vy
c29yL2Vhc3RfcmVzaXplIikKKyAgICAgICAgLCBOb3J0aFJlc2l6ZUN1cnNvcigiY3Vyc29yL25v
cnRoX3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9y
dGhfZWFzdF9yZXNpemUiKQorICAgICAgICAsIE5vcnRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vyc29y
L25vcnRoX3dlc3RfcmVzaXplIikKKyAgICAgICAgLCBTb3V0aFJlc2l6ZUN1cnNvcigiY3Vyc29y
L3NvdXRoX3Jlc2l6ZSIpCisgICAgICAgICwgU291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Iv
c291dGhfZWFzdF9yZXNpemUiKQorICAgICAgICAsIFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigiY3Vy
c29yL3NvdXRoX3dlc3RfcmVzaXplIikKKyAgICAgICAgLCBXZXN0UmVzaXplQ3Vyc29yKCJjdXJz
b3Ivd2VzdF9yZXNpemUiKQorICAgICAgICAsIE5vcnRoU291dGhSZXNpemVDdXJzb3IoImN1cnNv
ci9ub3J0aF9zb3V0aF9yZXNpemUiKQorICAgICAgICAsIEVhc3RXZXN0UmVzaXplQ3Vyc29yKCJj
dXJzb3IvZWFzdF93ZXN0X3Jlc2l6ZSIpCisgICAgICAgICwgTm9ydGhFYXN0U291dGhXZXN0UmVz
aXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfZWFzdF9zb3V0aF93ZXN0X3Jlc2l6ZSIpCisgICAgICAg
ICwgTm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0
aF9lYXN0X3Jlc2l6ZSIpCisgICAgICAgICwgQ29sdW1uUmVzaXplQ3Vyc29yKCJjdXJzb3IvY29s
dW1uX3Jlc2l6ZSIpCisgICAgICAgICwgUm93UmVzaXplQ3Vyc29yKCJjdXJzb3Ivcm93X3Jlc2l6
ZSIpCisgICAgICAgICwgTWlkZGxlUGFubmluZ0N1cnNvcigiY3Vyc29yL21pZGRsZV9wYW5uaW5n
IikKKyAgICAgICAgLCBFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL2Vhc3RfcGFubmluZyIpCisg
ICAgICAgICwgTm9ydGhQYW5uaW5nQ3Vyc29yKCJjdXJzb3Ivbm9ydGhfcGFubmluZyIpCisgICAg
ICAgICwgTm9ydGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL25vcnRoX2Vhc3RfcGFubmluZyIp
CisgICAgICAgICwgTm9ydGhXZXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL25vcnRoX3dlc3RfcGFu
bmluZyIpCisgICAgICAgICwgU291dGhQYW5uaW5nQ3Vyc29yKCJjdXJzb3Ivc291dGhfcGFubmlu
ZyIpCisgICAgICAgICwgU291dGhFYXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRoX2Vhc3Rf
cGFubmluZyIpCisgICAgICAgICwgU291dGhXZXN0UGFubmluZ0N1cnNvcigiY3Vyc29yL3NvdXRo
X3dlc3RfcGFubmluZyIpCisgICAgICAgICwgV2VzdFBhbm5pbmdDdXJzb3IoImN1cnNvci93ZXN0
X3Bhbm5pbmciKQorICAgICAgICAsIFZlcnRpY2FsVGV4dEN1cnNvcigiY3Vyc29yL3ZlcnRpY2Fs
X3RleHQiKQorICAgICAgICAsIENlbGxDdXJzb3IoImN1cnNvci9jZWxsIikKKyAgICAgICAgLCBD
b250ZXh0TWVudUN1cnNvcigiY3Vyc29yL2NvbnRleHRfbWVudSIpCisgICAgICAgICwgTm9Ecm9w
Q3Vyc29yKCJjdXJzb3Ivbm9fZHJvcCIpCisgICAgICAgICwgQ29weUN1cnNvcigiY3Vyc29yL2Nv
cHkiKQorICAgICAgICAsIFByb2dyZXNzQ3Vyc29yKCJjdXJzb3IvcHJvZ3Jlc3MiKQorICAgICAg
ICAsIEFsaWFzQ3Vyc29yKCJjdXJzb3IvYWxpYXMiKQorICAgICAgICAsIE5vbmVDdXJzb3IoImN1
cnNvci9ub25lIikKKyAgICAgICAgLCBOb3RBbGxvd2VkQ3Vyc29yKCJjdXJzb3Ivbm90X2FsbG93
ZWQiKQorICAgICAgICAsIFpvb21JbkN1cnNvcigiY3Vyc29yL3pvb21faW4iKQorICAgICAgICAs
IFpvb21PdXRDdXJzb3IoImN1cnNvci96b29tX291dCIpCisgICAgICAgICwgR3JhYkN1cnNvcigi
Y3Vyc29yL2dyYWIiKQorICAgICAgICAsIEdyYWJiaW5nQ3Vyc29yKCJjdXJzb3IvZ3JhYmJpbmci
KQorICAgIHsKKyAgICB9CisKKyAgICB+Q3Vyc29ycygpCisgICAgeworICAgIH0KKworcHVibGlj
OgorICAgIHN0YXRpYyBDdXJzb3JzKiBzZWxmKCk7CisgICAgc3RhdGljIEN1cnNvcnMqIHNfc2Vs
ZjsKKworICAgIEN1cnNvciBQb2ludGVyQ3Vyc29yOworICAgIEN1cnNvciBNb3ZlQ3Vyc29yOwor
ICAgIEN1cnNvciBDcm9zc0N1cnNvcjsKKyAgICBDdXJzb3IgSGFuZEN1cnNvcjsKKyAgICBDdXJz
b3IgSUJlYW1DdXJzb3I7CisgICAgQ3Vyc29yIFdhaXRDdXJzb3I7CisgICAgQ3Vyc29yIEhlbHBD
dXJzb3I7CisgICAgQ3Vyc29yIEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIE5vcnRoUmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29y
IE5vcnRoV2VzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgU291dGhSZXNpemVDdXJzb3I7Cisg
ICAgQ3Vyc29yIFNvdXRoRWFzdFJlc2l6ZUN1cnNvcjsKKyAgICBDdXJzb3IgU291dGhXZXN0UmVz
aXplQ3Vyc29yOworICAgIEN1cnNvciBXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0
aFNvdXRoUmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBFYXN0V2VzdFJlc2l6ZUN1cnNvcjsKKyAg
ICBDdXJzb3IgTm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBOb3J0
aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3I7CisgICAgQ3Vyc29yIENvbHVtblJlc2l6ZUN1cnNv
cjsKKyAgICBDdXJzb3IgUm93UmVzaXplQ3Vyc29yOworICAgIEN1cnNvciBNaWRkbGVQYW5uaW5n
Q3Vyc29yOworICAgIEN1cnNvciBFYXN0UGFubmluZ0N1cnNvcjsKKyAgICBDdXJzb3IgTm9ydGhQ
YW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBOb3J0aEVhc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1
cnNvciBOb3J0aFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1cnNvciBTb3V0aFBhbm5pbmdDdXJz
b3I7CisgICAgQ3Vyc29yIFNvdXRoRWFzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFNvdXRo
V2VzdFBhbm5pbmdDdXJzb3I7CisgICAgQ3Vyc29yIFdlc3RQYW5uaW5nQ3Vyc29yOworICAgIEN1
cnNvciBWZXJ0aWNhbFRleHRDdXJzb3I7CisgICAgQ3Vyc29yIENlbGxDdXJzb3I7CisgICAgQ3Vy
c29yIENvbnRleHRNZW51Q3Vyc29yOworICAgIEN1cnNvciBOb0Ryb3BDdXJzb3I7CisgICAgQ3Vy
c29yIENvcHlDdXJzb3I7CisgICAgQ3Vyc29yIFByb2dyZXNzQ3Vyc29yOworICAgIEN1cnNvciBB
bGlhc0N1cnNvcjsKKyAgICBDdXJzb3IgTm9uZUN1cnNvcjsKKyAgICBDdXJzb3IgTm90QWxsb3dl
ZEN1cnNvcjsKKyAgICBDdXJzb3IgWm9vbUluQ3Vyc29yOworICAgIEN1cnNvciBab29tT3V0Q3Vy
c29yOworICAgIEN1cnNvciBHcmFiQ3Vyc29yOworICAgIEN1cnNvciBHcmFiYmluZ0N1cnNvcjsK
K307CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNfc2VsZiA9IDA7CisKK0N1cnNvcnMqIEN1cnNvcnM6
OnNlbGYoKQoreworICAgIGlmICghc19zZWxmKQorICAgICAgICBzX3NlbGYgPSBuZXcgQ3Vyc29y
cygpOworCisgICAgcmV0dXJuIHNfc2VsZjsKK30KKworfQorCitjb25zdCBDdXJzb3ImIHBvaW50
ZXJDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBvaW50ZXJDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+TW92ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7
CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Q3Jvc3NDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SGFuZEN1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1
cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+V2FpdEN1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5I
ZWxwQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RSZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
Pk5vcnRoUmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhFYXN0UmVzaXplQ3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5Tb3V0aFJlc2l6ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoRWFzdFJlc2l6
ZUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFJlc2l6ZUN1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6
c2VsZigpLT5XZXN0UmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoU291dGhS
ZXNpemVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkVhc3RXZXN0UmVzaXplQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJu
IEN1cnNvcnM6OnNlbGYoKS0+Q29sdW1uUmVzaXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Um93UmVz
aXplQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1pZGRsZVBhbm5pbmdDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk1pZGRsZVBhbm5pbmdDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpz
ZWxmKCktPkVhc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoUGFubmlu
Z0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+Tm9ydGhQYW5uaW5nQ3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk5vcnRoRWFzdFBhbm5pbmdDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNv
cnM6OnNlbGYoKS0+Tm9ydGhXZXN0UGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBz
b3V0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRo
UGFubmluZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Tb3V0aEVhc3RQYW5uaW5nQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPlNvdXRoV2VzdFBhbm5pbmdDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxm
KCktPldlc3RQYW5uaW5nQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+VmVydGljYWxUZXh0Q3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3Jz
OjpzZWxmKCktPkNlbGxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvbnRleHRNZW51Q3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+Tm9Ecm9wQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNvcHlDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBy
b2dyZXNzQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICBy
ZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5BbGlhc0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBu
b25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Ob25lQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPk5vdEFsbG93ZWRDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbUlu
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5ab29tSW5DdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6
OnNlbGYoKS0+Wm9vbU91dEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5HcmFiQ3Vyc29yOworfQorCitjb25zdCBD
dXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5H
cmFiYmluZ0N1cnNvcjsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTG9jYWxp
emVkU3RyaW5nc0VmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZsLmNwcApAQCAtMCwwICsxLDQwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8u
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1N0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJTdWJtaXQiKTsKK30KKworU3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTdWJtaXQiKTsKK30KKworU3RyaW5n
IHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiUmVzZXQiKTsKK30KKworU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9TZWFyY2hhYmxlIEluZGV4Iik7Cit9CisK
K1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiQ2hvb3NlIEZpbGUiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVT
ZWxlY3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8gZmlsZSBz
ZWxlY3RlZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4gTGluayBpbiBOZXcg
X1dpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9E
aXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiX0Rvd25sb2FkIExpbmtlZCBG
aWxlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJk
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29weSBMaW5rIExvY19hdGlvbiIp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJPcGVuIF9JbWFnZSBpbiBOZXcgV2luZG93
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiU2FfdmUgSW1hZ2UgQXMiKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ29wX3kgSW1hZ2UiKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOCgiQ29weSIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJEZWxldGUiKTsKKyAgICByZXR1cm4gc3RvY2tM
YWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCit7CisgICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiU2VsZWN0IF9BbGwi
KTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfSW5zZXJ0IFVuaWNv
ZGUgQ29udHJvbCBDaGFyYWN0ZXIiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIklucHV0IF9NZXRo
b2RzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKQoreworICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkdvX0JhY2siKTsKKyAg
ICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9y
d2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRG
OCgiR29fRm9yd2FyZCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnU3RvcCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOCgiU3RvcCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiX1JlbG9hZCIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkK
K3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJDdXQi
KTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1Bhc3RlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21V
VEY4KCJQYXN0ZSIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJObyBHdWVzc2VzIEZvdW5kIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVTcGVsbGluZygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9JZ25vcmUg
U3BlbGxpbmciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmco
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfTGVhcm4gU3BlbGxpbmciKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoIl9TZWFyY2ggdGhlIFdlYiIpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgiX0xvb2sgVXAgaW4gRGljdGlvbmFyeSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnT3BlbkxpbmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfT3BlbiBM
aW5rIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiSWdub3JlIF9HcmFtbWFyIik7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChzaG93ID8gIlNob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiIDogIkhp
ZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfQ2hlY2sg
RG9jdW1lbnQgTm93Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nV2hpbGVUeXBpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJDaGVjayBT
cGVsbGluZyBXaGlsZSBfVHlwaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdGb250TWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIl9Gb250
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkKK3sKKyAgICBzdGF0aWMg
U3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KCJCb2xkIik7CisgICAgcmV0dXJu
IHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQorewor
ICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIkl0YWxpYyIp
OworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VW5kZXJsaW5lKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZy
b21VVEY4KCJVbmRlcmxpbmUiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJfT3V0bGluZSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJJbnNwZWN0IF9FbGVtZW50
Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCit7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmln
aHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpCit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgc2VhcmNoTWVudU5v
UmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8g
cmVjZW50IHNlYXJjaGVzIik7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiUmVjZW50IHNlYXJjaGVzIik7
Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJfQ2xlYXIgcmVjZW50IHNlYXJjaGVzIik7Cit9CisK
K1N0cmluZyBBWERlZmluaXRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KCJ0ZXJtIik7Cit9CisKK1N0cmluZyBBWERlZmluaXRpb25MaXN0RGVmaW5pdGlv
blRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJkZWZpbml0aW9uIik7Cit9
CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJwcmVzcyIpOworfQorCitTdHJpbmcgQVhSYWRpb0J1dHRvbkFjdGlvblZlcmIoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJzZWxlY3QiKTsKK30KKworU3RyaW5nIEFY
VGV4dEZpZWxkQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoImFj
dGl2YXRlIik7Cit9CisKK1N0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ1bmNoZWNrIik7Cit9CisKK1N0cmluZyBBWFVu
Y2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoImNoZWNrIik7Cit9CisKK1N0cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOCgianVtcCIpOworfQorCitTdHJpbmcgdW5rbm93bkZpbGVTaXpl
VGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlVua25vd24iKTsKK30KKwor
U3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJMb2FkaW5nLi4uIik7Cit9CisKK1N0cmluZyBtZWRpYUVsZW1lbnRM
aXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgi
TGl2ZSBCcm9hZGNhc3QiKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVybk1p
c21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInBhdHRlcm4gbWlz
bWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSBvdmVyZmxvdyIpOworfQor
CitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJyYW5nZSB1bmRlcmZsb3ciKTsKK30KKworU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoInN0ZXAgbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VG9vTG9uZ1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0b28gbG9uZyIp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidHlwZSBtaXNtYXRjaCIpOworfQorCitTdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgidmFsdWUgbWlzc2luZyIpOworfQorCitTdHJpbmcgQVhNZW51TGlzdFBvcHVw
QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhNZW51
TGlzdEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2VhcmNoUG9wdXBNZW51RWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1NlYXJjaFBvcHVwTWVudUVmbC5j
cHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIElu
c3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlYXJjaFBvcHVw
TWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogUG9w
dXBNZW51KGNsaWVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNlYXJj
aFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNl
YXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZl
Y3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNlYXJj
aFBvcHVwTWVudTo6ZW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjYgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxl
cyB0byBwbGF0Zm9ybS9lZmwuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzUwODcKKwor
ICAgICAgICAqIHBsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvTG9jYWxpemVkU3RyaW5nc0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2VmbC9TZWFyY2hQb3B1cE1lbnVFZmwuY3BwOiBBZGRlZC4KKwogMjAxMC0wMi0yNiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49613</attachid>
            <date>2010-02-26 12:24:54 -0800</date>
            <delta_ts>2010-02-26 22:06:08 -0800</delta_ts>
            <desc>Patch 3/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-1.diff</filename>
            <type>text/plain</type>
            <size>23434</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCkBA
IC0wLDAgKzEsMjE1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZworICogICAgICAgICAgICAoQykgMjAwOSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogICAgICAgICAgICAoQykgMjAwOSBJTmRULCBJ
bnN0aXR1dG8gTm9raWEgZGUgVGVjaG5vbG9naWEKKyAqICAgICAgICAgICAgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogICAgICAgICAgICAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJFZmwuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1
ZGUgPHN0cmluZz4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3Jv
bGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2Nyb2xsYmFyRWZsKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpKTsKK30KKworU2Ny
b2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSkKKyAg
ICAsIG1fbGFzdFBvcygwKQorICAgICwgbV9sYXN0VG90YWxTaXplKDApCisgICAgLCBtX2xhc3RW
aXNpYmxlU2l6ZSgwKQoreworICAgIFdpZGdldDo6c2V0RnJhbWVSZWN0KEludFJlY3QoMCwgMCwg
MCwgMCkpOworfQorCitTY3JvbGxiYXJFZmw6On5TY3JvbGxiYXJFZmwoKQoreworICAgIGlmICgh
ZXZhc09iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfZGVsKGV2YXNP
YmplY3QoKSk7CisgICAgc2V0RXZhc09iamVjdCgwKTsKK30KKworc3RhdGljIHZvaWQgc2Nyb2xs
YmFyRWZsRWRqZU1lc3NhZ2Uodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIEVkamVfTWVzc2Fn
ZV9UeXBlIHR5cGUsIGludCBpZCwgdm9pZCogbXNnKQoreworICAgIFNjcm9sbGJhckVmbDo6U2Ny
b2xsYmFyRWZsKiB0aGF0ID0gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwq
PihkYXRhKTsKKyAgICBFZGplX01lc3NhZ2VfRmxvYXQqIG07CisgICAgaW50IHY7CisKKyAgICBp
ZiAoIWlkKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiVW5rbm93biBtZXNzYWdlIGlkICclZCcg
ZnJvbSBzY3JvbGwgYmFyIHRoZW1lLiIsIGlkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh0eXBlICE9IEVESkVfTUVTU0FHRV9GTE9BVCkgeworICAgICAgICBFSU5BX0xPR19F
UlIoIk1lc3NhZ2UgaWQgJyVkJyBvZiBpbmNvcnJlY3QgdHlwZSBmcm9tIHNjcm9sbCBiYXIgdGhl
bWUuICIKKyAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCAnJWQnLCBnb3QgJyVkJy4iLAor
ICAgICAgICAgICAgICAgICAgICAgaWQsIEVESkVfTUVTU0FHRV9GTE9BVCwgdHlwZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtID0gc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zs
b2F0Kj4obXNnKTsKKyAgICB2ID0gbS0+dmFsICogKHRoYXQtPnRvdGFsU2l6ZSgpIC0gdGhhdC0+
dmlzaWJsZVNpemUoKSk7CisgICAgdGhhdC0+c2V0VmFsdWUodik7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyRWZsOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmlldykKK3sKKyAgICBFdmFzX09iamVjdCog
byA9IGV2YXNPYmplY3QoKTsKKyAgICBFdmFzX0Nvb3JkIHcsIGg7CisKKyAgICBXaWRnZXQ6OnNl
dFBhcmVudCh2aWV3KTsKKworICAgIGlmICghbykgeworICAgICAgICBpZiAoIXZpZXcpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbyA9IGVkamVfb2JqZWN0X2FkZCh2aWV3LT5ldmFz
KCkpOworICAgICAgICBpZiAoIW8pIHsKKyAgICAgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQg
bm90IGNyZWF0ZSBlZGplIG9iamVjdCBmb3Igdmlldz0lcCAoZXZhcz0lcCkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpZXcsIHZpZXctPmV2YXMoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZWRqZV9vYmplY3RfbWVzc2FnZV9oYW5kbGVyX3NldChvLCBz
Y3JvbGxiYXJFZmxFZGplTWVzc2FnZSwgdGhpcyk7CisgICAgICAgIHNldEV2YXNPYmplY3Qobyk7
CisgICAgfSBlbHNlIGlmICghdmlldykgeworICAgICAgICBldmFzX29iamVjdF9oaWRlKG8pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgY2hhciogZ3JvdXAgPSAob3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICA/ICJzY3JvbGxiYXIuaG9y
aXpvbnRhbCIgOiAic2Nyb2xsYmFyLnZlcnRpY2FsIjsKKyAgICBTdHJpbmcgdGhlbWUoZWRqZVRo
ZW1lUmVjdXJzaXZlKCkpOworCisgICAgaWYgKHRoZW1lLmlzRW1wdHkoKSkgeworICAgICAgICBF
SU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkIHRoZW1lICclcyc6IG5vIHRoZW1lIHBhdGggc2V0
LiIsIGdyb3VwKTsKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZShvKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghZWRqZV9vYmplY3RfZmlsZV9zZXQobywgdGhlbWUudXRmOCgp
LmRhdGEoKSwgZ3JvdXApKSB7CisgICAgICAgIGludCBlcnIgPSBlZGplX29iamVjdF9sb2FkX2Vy
cm9yX2dldChvKTsKKyAgICAgICAgY29uc3QgY2hhciogZXJybXNnID0gZWRqZV9sb2FkX2Vycm9y
X3N0cihlcnIpOworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBsb2FkIHRoZW1lICcl
cycgZnJvbSBmaWxlICclcyc6ICMlZCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIHRoZW1l
LnV0ZjgoKS5kYXRhKCksIGdyb3VwLCBlcnIsIGVycm1zZyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzZXRQbGF0Zm9ybVdpZGdldChvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKG8sIHZpZXctPmV2YXNPYmplY3QoKSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhv
KTsKKworICAgIGVkamVfb2JqZWN0X3NpemVfbWluX2dldChvLCAmdywgJmgpOworCisgICAgSW50
UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgcmVjdC5zZXRTaXplKEludFNpemUodywgaCkp
OworICAgIHNldEZyYW1lUmVjdChyZWN0KTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OnVwZGF0
ZVRodW1iUG9zaXRpb24oKQoreworICAgIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0aW9u
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyRWZsOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQorewor
ICAgIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9wb3J0aW9uKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyRWZsOjp1cGRhdGVUaHVtYlBvc2l0aW9uQW5kUHJvcG9ydGlvbigpCit7CisgICAgaWYgKCFw
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgcG9zID0gY3VycmVu
dFBvcygpOworICAgIGludCB0U2l6ZSA9IHRvdGFsU2l6ZSgpOworICAgIGludCB2U2l6ZSA9IHZp
c2libGVTaXplKCk7CisKKyAgICBpZiAobV9sYXN0UG9zID09IHBvcworICAgICAgICAmJiBtX2xh
c3RUb3RhbFNpemUgPT0gdFNpemUKKyAgICAgICAgJiYgbV9sYXN0VmlzaWJsZVNpemUgPT0gdlNp
emUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdFBvcyA9IHBvczsKKyAgICBtX2xhc3RU
b3RhbFNpemUgPSB0U2l6ZTsKKyAgICBtX2xhc3RWaXNpYmxlU2l6ZSA9IHZTaXplOworCisgICAg
RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCogbXNnID0gc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zs
b2F0X1NldCo+CisgICAgICAgIChhbGxvY2Eoc2l6ZW9mKEVkamVfTWVzc2FnZV9GbG9hdF9TZXQp
ICsgc2l6ZW9mKGZsb2F0KSkpOworICAgIG1zZy0+Y291bnQgPSAyOworCisgICAgaWYgKHRTaXpl
IC0gdlNpemUgPiAwKQorICAgICAgICBtc2ctPnZhbFswXSA9IHBvcyAvIChmbG9hdCkodFNpemUg
LSB2U2l6ZSk7CisgICAgZWxzZQorICAgICAgICBtc2ctPnZhbFswXSA9IDAuMDsKKworICAgIGlm
ICh0U2l6ZSA+IDApCisgICAgICAgIG1zZy0+dmFsWzFdID0gdlNpemUgLyAoZmxvYXQpdFNpemU7
CisgICAgZWxzZQorICAgICAgICBtc2ctPnZhbFsxXSA9IDAuMDsKKworICAgIGVkamVfb2JqZWN0
X21lc3NhZ2Vfc2VuZChwbGF0Zm9ybVdpZGdldCgpLCBFREpFX01FU1NBR0VfRkxPQVRfU0VULCAw
LCBtc2cpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7CisgICAgZnJhbWVS
ZWN0c0NoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxiYXJFZmw6OmZyYW1lUmVjdHNDaGFuZ2Vk
KCkKK3sKKyAgICBFdmFzX09iamVjdCogbyA9IHBsYXRmb3JtV2lkZ2V0KCk7CisgICAgRXZhc19D
b29yZCB4LCB5OworCisgICAgaWYgKCFwYXJlbnQoKSB8fCAhbykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgaWYgKHBhcmVudCgpLT5pc1Nj
cm9sbFZpZXdTY3JvbGxiYXIodGhpcykpCisgICAgICAgIHJlY3Quc2V0TG9jYXRpb24ocGFyZW50
KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7CisgICAgZWxz
ZQorICAgICAgICByZWN0LnNldExvY2F0aW9uKHBhcmVudCgpLT5jb250ZW50c1RvV2luZG93KHJl
Y3QubG9jYXRpb24oKSkpOworCisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHJvb3QoKS0+
ZXZhc09iamVjdCgpLCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X21vdmUobywgeCAr
IHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShvLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFNjcm9sbGJhckVmbDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworfQorCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9FdmVudExvb3BFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNwcApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCit7CisgICAgZWNv
cmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudEVmbC5jcHAKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDggRGllZ28gSGlkYWxnbyBDLiBHb256YWxlegorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IEtleU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4g
V2luZG93c0tleU1hcDsKKworc3RhdGljIEtleU1hcCBnS2V5TWFwOworc3RhdGljIFdpbmRvd3NL
ZXlNYXAgZ1dpbmRvd3NLZXlNYXA7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUtleU1hcCgpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIFN0cmlu
ZyBrZXkgPSBTdHJpbmc6OmZvcm1hdCgiRiVkIiwgaSk7CisgICAgICAgIGdLZXlNYXAuc2V0KGtl
eSwga2V5KTsKKyAgICB9CisgICAgZ0tleU1hcC5zZXQoIkFsdF9MIiwgIkFsdCIpOworICAgIGdL
ZXlNYXAuc2V0KCJJU09fTGV2ZWwzX1NoaWZ0IiwgIkFsdCIpOworICAgIGdLZXlNYXAuc2V0KCJN
ZW51IiwgIkFsdCIpOworICAgIGdLZXlNYXAuc2V0KCJTaGlmdF9MIiwgIlNoaWZ0Iik7CisgICAg
Z0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAiU2hpZnQiKTsKKyAgICBnS2V5TWFwLnNldCgiRG93biIs
ICJEb3duIik7CisgICAgZ0tleU1hcC5zZXQoIkVuZCIsICJFbmQiKTsKKyAgICBnS2V5TWFwLnNl
dCgiUmV0dXJuIiwgIkVudGVyIik7CisgICAgZ0tleU1hcC5zZXQoIktQX0VudGVyIiwgIkVudGVy
Iik7CisgICAgZ0tleU1hcC5zZXQoIkhvbWUiLCAiSG9tZSIpOworICAgIGdLZXlNYXAuc2V0KCJJ
bnNlcnQiLCAiSW5zZXJ0Iik7CisgICAgZ0tleU1hcC5zZXQoIkxlZnQiLCAiTGVmdCIpOworICAg
IGdLZXlNYXAuc2V0KCJEb3duIiwgIkRvd24iKTsKKyAgICBnS2V5TWFwLnNldCgiTmV4dCIsICJQ
YWdlRG93biIpOworICAgIGdLZXlNYXAuc2V0KCJQcmlvciIsICJQYWdlVXAiKTsKKyAgICBnS2V5
TWFwLnNldCgiUmlnaHQiLCAiUmlnaHQiKTsKKyAgICBnS2V5TWFwLnNldCgiVXAiLCAiVXAiKTsK
KyAgICBnS2V5TWFwLnNldCgiRGVsZXRlIiwgIlUrMDA3RiIpOworICAgIGdLZXlNYXAuc2V0KCJU
YWIiLCAiVSswMDA5Iik7CisgICAgZ0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsICJVKzAwMDki
KTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlV2luZG93c0tleU1hcCgpCit7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJSZXR1cm4iLCAgICAgVktfUkVUVVJOKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoIktQX1JldHVybiIsICBWS19SRVRVUk4pOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
QWx0X0wiLCAgICAgIFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiSVNPX0xldmVs
M19TaGlmdCIsIFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTWVudSIsICAgICAg
IFZLX01FTlUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfTCIsICAgIFZLX1NISUZU
KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAgICBWS19TSElGVCk7CisgICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJDb250cm9sX0wiLCAgVktfQ09OVFJPTCk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJDb250cm9sX1IiLCAgVktfQ09OVFJPTCk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJQYXVzZSIsICAgICAgVktfUEFVU0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
QnJlYWsiLCAgICAgIFZLX1BBVVNFKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkNhcHNfTG9j
ayIsICBWS19DQVBJVEFMKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlNjcm9sbF9Mb2NrIiwg
VktfU0NST0xMKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIk51bV9Mb2NrIiwgICBWS19OVU1M
T0NLKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkVzY2FwZSIsICAgICBWS19FU0NBUEUpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiVGFiIiwgICAgICAgIFZLX1RBQik7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJJU09fTGVmdF9UYWIiLCBWS19UQUIpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiQmFja1NwYWNlIiwgIFZLX0JBQ0spOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU3Bh
Y2UiLCAgICAgIFZLX1NQQUNFKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIk5leHQiLCAgICAg
ICBWS19ORVhUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlByaW9yIiwgICAgICBWS19QUklP
Uik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJIb21lIiwgICAgICAgVktfSE9NRSk7CisgICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJFbmQiLCAgICAgICAgVktfRU5EKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoIlJpZ2h0IiwgICAgICBWS19SSUdIVCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0
KCJMZWZ0IiwgICAgICAgVktfTEVGVCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJVcCIsICAg
ICAgICAgVktfVVApOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRG93biIsICAgICAgIFZLX0RP
V04pOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpbnQiLCAgICAgIFZLX1BSSU5UKTsKKyAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkluc2VydCIsICAgICBWS19JTlNFUlQpOworICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiRGVsZXRlIiwgICAgIFZLX0RFTEVURSk7CisKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoImNvbW1hIiwgICAgICAgIFZLX09FTV9DT01NQSk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJsZXNzIiwgICAgICAgICBWS19PRU1fQ09NTUEpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgicGVyaW9kIiwgICAgICAgVktfT0VNX1BFUklPRCk7CisgICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJncmVhdGVyIiwgICAgICBWS19PRU1fUEVSSU9EKTsKKyAgICBnV2luZG93c0tleU1hcC5z
ZXQoInNlbWljb2xvbiIsICAgIFZLX09FTV8xKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImNv
bG9uIiwgICAgICAgIFZLX09FTV8xKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInNsYXNoIiwg
ICAgICAgIFZLX09FTV8yKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInF1ZXN0aW9uIiwgICAg
IFZLX09FTV8yKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImdyYXZlIiwgICAgICAgIFZLX09F
TV8zKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImFzY2lpdGlsZGUiLCAgIFZLX09FTV8zKTsK
KyAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNrZXRsZWZ0IiwgIFZLX09FTV80KTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoImJyYWNlbGVmdCIsICAgIFZLX09FTV80KTsKKyAgICBnV2luZG93
c0tleU1hcC5zZXQoImJhY2tzbGFzaCIsICAgIFZLX09FTV81KTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImJhciIsICAgICAgICAgIFZLX09FTV81KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
ImJyYWNrZXRyaWdodCIsIFZLX09FTV82KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNl
cmlnaHQiLCAgIFZLX09FTV82KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImFwb3N0cm9waGUi
LCAgIFZLX09FTV83KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInF1b3RlZGJsIiwgICAgIFZL
X09FTV83KTsKKworICAgIC8vIEFscGhhYmV0CisgICAgU3RyaW5nIGFscGhhYmV0ID0gImFiY2Rl
ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IDI2OyBpKyspIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IFN0cmluZzo6Zm9ybWF0KCIlYyIsIGFs
cGhhYmV0W2ldKTsKKyAgICAgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KGtleSwgVktfQSArIGkpOwor
ICAgIH0KKworICAgIC8vIERpZ2l0cworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
MTA7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgaSk7
CisgICAgICAgIGdXaW5kb3dzS2V5TWFwLnNldChrZXksIFZLXzAgKyBpKTsKKyAgICB9CisKKyAg
ICAvLyBTaGlmdGVkIGRpZ2l0cworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZXhjbGFtIiwgICAg
VktfMSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhdCIsICAgICAgICBWS18yKTsKKyAgICBn
V2luZG93c0tleU1hcC5zZXQoIm51bWJlcnNpZ24iLCBWS18zKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImRvbGxhciIsICAgIFZLXzQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGVyY2Vu
dCIsICAgVktfNSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhc2NpaWNpcmN1bSIsIFZLXzYp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYW1wZXJzYW5kIiwgVktfNyk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJhc3RlcmlzayIsICBWS184KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
InBhcmVubGVmdCIsIFZLXzkpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGFyZW5yaWdodCIs
IFZLXzApOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgibWludXMiLCAgICAgVktfT0VNX01JTlVT
KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInVuZGVyc2NvcmUiLCBWS19PRU1fTUlOVVMpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZXF1YWwiLCAgICAgVktfT0VNX1BMVVMpOworICAgIGdX
aW5kb3dzS2V5TWFwLnNldCgicGx1cyIsICAgICAgVktfT0VNX1BMVVMpOworCisgICAgLy8gRl9Y
WAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgeworICAgICAgICBT
dHJpbmcga2V5ID0gU3RyaW5nOjpmb3JtYXQoIkYlZCIsIGkpOworICAgICAgICBnV2luZG93c0tl
eU1hcC5zZXQoa2V5LCBWS19GMSArIGkpOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBrZXlJ
ZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5nJiBrZXlOYW1lKQoreworICAgIGlmIChnS2V5
TWFwLmlzRW1wdHkoKSkKKyAgICAgICAgY3JlYXRlS2V5TWFwKCk7CisKKyAgICBpZiAoZ0tleU1h
cC5jb250YWlucyhrZXlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGdLZXlNYXAuZ2V0KGtleU5hbWUp
OworCisgICAgcmV0dXJuIGtleU5hbWU7Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVG
b3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUpCit7CisgICAgaWYgKGdXaW5kb3dzS2V5TWFw
LmlzRW1wdHkoKSkKKyAgICAgICAgY3JlYXRlV2luZG93c0tleU1hcCgpOworCisgICAgaWYgKGdX
aW5kb3dzS2V5TWFwLmNvbnRhaW5zKGtleU5hbWUpKQorICAgICAgICByZXR1cm4gZ1dpbmRvd3NL
ZXlNYXAuZ2V0KGtleU5hbWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1BsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24q
IGV2KQorICAgIDogbV90eXBlKEtleURvd24pCisgICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9k
aWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAgLCBtX3NoaWZ0S2V5KGV2
YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1f
Y3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wi
KSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJz
LCAiQWx0IikpCisgICAgLCBtX3RleHQoU3RyaW5nOjpmcm9tVVRGOChldi0+c3RyaW5nKSkKK3sK
KyAgICBTdHJpbmcga2V5TmFtZSA9IFN0cmluZyhldi0+a2V5KTsKKyAgICBtX2tleUlkZW50aWZp
ZXIgPSBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisgICAgbV93aW5kb3dz
VmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvckV2YXNLZXlOYW1lKGtleU5hbWUpOwor
CisgICAgLy8gRklYTUU6CisgICAgbV9pc0tleXBhZCA9IGZhbHNlOworICAgIG1fYXV0b1JlcGVh
dCA9IGZhbHNlOworfQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudChjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogZXYpCisgICAgOiBtX3R5cGUoS2V5VXApCisg
ICAgLCBtX21ldGFLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJN
ZXRhIikpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9k
aWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmllcl9pc19z
ZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5X21v
ZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX3RleHQoU3RyaW5n
Ojpmcm9tVVRGOChldi0+c3RyaW5nKSkKK3sKKyAgICBTdHJpbmcga2V5TmFtZSA9IFN0cmluZyhl
di0+a2V5KTsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5h
bWUoa2V5TmFtZSk7CisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29k
ZUZvckV2YXNLZXlOYW1lKGtleU5hbWUpOworCisgICAgLy8gRklYTUU6CisgICAgbV9pc0tleXBh
ZCA9IGZhbHNlOworICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOworfQorCit2b2lkIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCkK
K3sKKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIG1fdHlwZSA9IHR5cGU7CisK
KyAgICBpZiAodHlwZSA9PSBSYXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmluZygp
OworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojpj
dXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9E
cmFnSW1hZ2VFZmwuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1h
Z2VTaXplKERyYWdJbWFnZVJlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBJbnRTaXplKDAsIDApOworfQorCit2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0lt
YWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1h
Z2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1h
Z2UoQ2FjaGVkSW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtTW91c2VFdmVudEVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Q
bGF0Zm9ybU1vdXNlRXZlbnRFZmwuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgorCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1Nb3VzZUV2ZW50
OjpzZXRDbGlja0NvdW50KEV2YXNfQnV0dG9uX0ZsYWdzIGZsYWdzKQoreworICAgIGlmIChmbGFn
cyAmIEVWQVNfQlVUVE9OX1RSSVBMRV9DTElDSykKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMzsK
KyAgICBlbHNlIGlmIChmbGFncyAmIEVWQVNfQlVUVE9OX0RPVUJMRV9DTElDSykKKyAgICAgICAg
bV9jbGlja0NvdW50ID0gMjsKKyAgICBlbHNlCisgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Cit9
CisKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEV2YXNfRXZl
bnRfTW91c2VfRG93biogZXYsIEludFBvaW50IHBvcykKKyAgICA6IG1fdGltZXN0YW1wKGN1cnJl
bnRUaW1lKCkpCisgICAgLCBtX3NoaWZ0S2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+
bW9kaWZpZXJzLCAiU2hpZnQiKSkKKyAgICAsIG1fY3RybEtleShldmFzX2tleV9tb2RpZmllcl9p
c19zZXQoZXYtPm1vZGlmaWVycywgIkNvbnRyb2wiKSkKKyAgICAsIG1fYWx0S2V5KGV2YXNfa2V5
X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJzLCAiQWx0IikpCisgICAgLCBtX21ldGFLZXko
ZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJNZXRhIikpCisgICAgLCBt
X2dsb2JhbFBvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KSkKKyAg
ICAsIG1fcG9zaXRpb24oSW50UG9pbnQoZXYtPmNhbnZhcy54IC0gcG9zLngoKSwgZXYtPmNhbnZh
cy55IC0gcG9zLnkoKSkpCisgICAgLCBtX2J1dHRvbihNb3VzZUJ1dHRvbihldi0+YnV0dG9uIC0g
MSkpCisgICAgLCBtX2V2ZW50VHlwZShNb3VzZUV2ZW50UHJlc3NlZCkKK3sKKyAgICBzZXRDbGlj
a0NvdW50KGV2LT5mbGFncyk7Cit9CisKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3Vz
ZUV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2LCBJbnRQb2ludCBwb3MpCisgICAg
OiBtX3RpbWVzdGFtcChjdXJyZW50VGltZSgpKQorICAgICwgbV9zaGlmdEtleShldmFzX2tleV9t
b2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIlNoaWZ0IikpCisgICAgLCBtX2N0cmxLZXko
ZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJDb250cm9sIikpCisgICAg
LCBtX2FsdEtleShldmFzX2tleV9tb2RpZmllcl9pc19zZXQoZXYtPm1vZGlmaWVycywgIkFsdCIp
KQorICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZpZXJz
LCAiTWV0YSIpKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihJbnRQb2ludChldi0+Y2FudmFzLngs
IGV2LT5jYW52YXMueSkpCisgICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KGV2LT5jYW52YXMueCAt
IHBvcy54KCksIGV2LT5jYW52YXMueSAtIHBvcy55KCkpKQorICAgICwgbV9idXR0b24oTW91c2VC
dXR0b24oZXYtPmJ1dHRvbiAtIDEpKQorICAgICwgbV9ldmVudFR5cGUoTW91c2VFdmVudFJlbGVh
c2VkKQoreworICAgIHNldENsaWNrQ291bnQoZXYtPmZsYWdzKTsKK30KKworUGxhdGZvcm1Nb3Vz
ZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBl
diwgSW50UG9pbnQgcG9zKQorICAgIDogbV90aW1lc3RhbXAoY3VycmVudFRpbWUoKSkKKyAgICAs
IG1fc2hpZnRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0KGV2LT5tb2RpZmllcnMsICJTaGlm
dCIpKQorICAgICwgbV9jdHJsS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChldi0+bW9kaWZp
ZXJzLCAiQ29udHJvbCIpKQorICAgICwgbV9hbHRLZXkoZXZhc19rZXlfbW9kaWZpZXJfaXNfc2V0
KGV2LT5tb2RpZmllcnMsICJBbHQiKSkKKyAgICAsIG1fbWV0YUtleShldmFzX2tleV9tb2RpZmll
cl9pc19zZXQoZXYtPm1vZGlmaWVycywgIk1ldGEiKSkKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
SW50UG9pbnQoZXYtPmN1ci5jYW52YXMueCwgZXYtPmN1ci5jYW52YXMueSkpCisgICAgLCBtX3Bv
c2l0aW9uKEludFBvaW50KGV2LT5jdXIuY2FudmFzLnggLSBwb3MueCgpLCBldi0+Y3VyLmNhbnZh
cy55IC0gcG9zLnkoKSkpCisgICAgLCBtX2NsaWNrQ291bnQoMCkKKyAgICAsIG1fYnV0dG9uKE1v
dXNlQnV0dG9uKGV2LT5idXR0b25zIC0gMSkpCisgICAgLCBtX2V2ZW50VHlwZShNb3VzZUV2ZW50
TW92ZWQpCit7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCisrKyBXZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDEwLTAyLTI2ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKworICAgICAgICBBZGQgRUZMIHBvcnQgZmls
ZXMgdG8gcGxhdGZvcm0vZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZWZsL0V2ZW50TG9vcEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvRHJhZ0ltYWdlRWZsLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
ZWZsL1BsYXRmb3JtTW91c2VFdmVudEVmbC5jcHA6IEFkZGVkLgorCiAyMDEwLTAyLTI2ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49614</attachid>
            <date>2010-02-26 12:31:36 -0800</date>
            <delta_ts>2010-03-01 09:58:26 -0800</delta_ts>
            <desc>Patch 4/7 to WebCore/platform/efl</desc>
            <filename>webkit-efl-webcore_platform_efl-1.diff</filename>
            <type>text/plain</type>
            <size>25484</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIENsaXBi
b2FyZEVmbF9oCisjZGVmaW5lIENsaXBib2FyZEVmbF9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2FjaGVkSW1hZ2U7CisKK2NsYXNzIENs
aXBib2FyZEVmbCA6IHB1YmxpYyBDbGlwYm9hcmQgeworcHVibGljOgorICAgIENsaXBib2FyZEVm
bChDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGJvb2wpOworICAgIH5DbGlwYm9hcmRFZmwoKTsKKwor
ICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xlYXJBbGxEYXRh
KCk7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0OworICAg
IGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKKworICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0Owor
ICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldERyYWdJbWFn
ZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CisgICAgTm9kZSogZHJhZ0ltYWdlRWxl
bWVudCgpOworICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9p
bnQmKTsKKworICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2lu
dCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxl
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAgIHZpcnR1YWwg
dm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzRGF0YSgpOworCisgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOworfTsKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2VmbC9TY3JvbGxiYXJFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9s
b2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFNjcm9sbGJhckVmbF9oCisjZGVmaW5lIFNjcm9sbGJhckVmbF9oCisKKyNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJFZmwgOiBw
dWJsaWMgU2Nyb2xsYmFyIHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOwor
CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyRWZsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJh
bWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZU1v
dmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZU91dEV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlUHJlc3NF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFu
Z2VkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJh
ckVmbChTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb25BbmRQcm9w
b3J0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpOworCitwcml2YXRlOgorICAgIGludCBtX2xhc3RQ
b3M7CisgICAgaW50IG1fbGFzdFRvdGFsU2l6ZTsKKyAgICBpbnQgbV9sYXN0VmlzaWJsZVNpemU7
Cit9OworCit9CisKKyNlbmRpZiAvLyBTY3JvbGxiYXJFZmxfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAKQEAgLTAsMCAr
MSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIElu
Yy4gPGluZm9Ac3RhaWtvcy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3Rp
dHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudUl0ZW0uaCIKKworI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb250ZXh0TWVudUl0ZW06
OkNvbnRleHRNZW51SXRlbShQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24pCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29u
dGV4dE1lbnUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0NvbnRleHRNZW51SXRl
bTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUsIENvbnRleHRNZW51QWN0aW9u
LCBjb25zdCBTdHJpbmcmLCBDb250ZXh0TWVudSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJ
dGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworfQorCitDb250ZXh0TWVudUl0
ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gQWN0aW9uVHlwZTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06
OnNldFR5cGUoQ29udGV4dE1lbnVJdGVtVHlwZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTm9B
Y3Rpb247Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVB
Y3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIENvbnRleHRNZW51
SXRlbTo6dGl0bGUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbiBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06
OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVuYWJsZWQoYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9QYXN0ZWJvYXJkRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZWZsL1Bhc3RlYm9hcmRFZmwuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
KworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpCit7CisgICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2Fy
ZCgpOworICAgIHJldHVybiBwYXN0ZWJvYXJkOworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJk
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXN0ZWJvYXJkOjp+UGFzdGVib2Fy
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJv
b2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmLCBGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xl
YXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6Y2Fu
U21hcnRSZXBsYWNlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVu
dEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0
KEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJh
clRoZW1lRWZsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5k
VCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGJhclRoZW1lRWZsX2gKKyNkZWZpbmUgU2Nyb2xsYmFy
VGhlbWVFZmxfaAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJUaGVtZUVmbCA6IHB1YmxpYyBTY3JvbGxiYXJUaGVt
ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVFZmwoKTsKKworICAgIHZp
cnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3Vs
YXJTY3JvbGxiYXIpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9s
bGJhciogc2Nyb2xsYmFyKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcik7Cit9OworCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZWZsL0tVUkxFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvS1VSTEVmbC5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmlu
ZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAgY2hhciogZmlsZW5hbWUgPSAo
Y2hhciopbV9zdHJpbmcudXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgcGF0aCA9IFN0cmluZzo6ZnJvbVVURjgo
ZmlsZW5hbWUpOworICAgIGZyZWUoZmlsZW5hbWUpOworICAgIHJldHVybiBwYXRoOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9TeXN0ZW1U
aW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0v
ZWZsL1N5c3RlbVRpbWVFZmwuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggSU5kVC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gZWNvcmVfdGlt
ZV9nZXQoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU291bmRFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU291bmRF
ZmwuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTb3VuZC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lm
ZGVmIEhBVkVfRUNPUkVfWAorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkK
K3sKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gKERpc3BsYXkq
KSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgWEJlbGwoZGlzcGxheSwgMCk7CisjZW5kaWYK
K30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVt
RWZsLmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1ZGUgPGdsaWIuaD4g
Ly8gVE9ETzogcmVtb3ZlIG1lIGFmdGVyIGZvbGxvd2luZyBUT0RPIGlzIHNvbHZlZC4KKyNpbmNs
dWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ1N0cmluZyBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVy
biBwYXRoLnV0ZjgoKTsKK30KKworY2hhciogZmlsZW5hbWVGcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworLy8gV0FSTklORzogdGhpcyBpcyBqdXN0IHVzZWQgYnkgcGxhdGZvcm0v
bmV0d29yay9zb3VwLCB0aHVzIG11c3QgYmUgR0xJQiEhIQorLy8gVE9ETzogbW92ZSB0aGlzIHRv
IENTdHJpbmcgYW5kIHVzZSBpdCBpbnN0ZWFkIGluIGJvdGgsIGJlaW5nIG1vcmUgc3RhbmRhcmQK
KyNpZiBQTEFURk9STShXSU5fT1MpCisgICAgcmV0dXJuIGdfc3RyZHVwKHN0cmluZy51dGY4KCku
ZGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGdfdXJpX3VuZXNjYXBlX3N0cmluZyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSwgMCk7CisjZW5kaWYKK30KKworQ1N0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAg
IGNoYXIgYnVmZmVyW1BBVEhfTUFYXTsKKyAgICBjb25zdCBjaGFyKiB0bXBEaXIgPSBnZXRlbnYo
IlRNUERJUiIpOworCisgICAgaWYgKCF0bXBEaXIpCisgICAgICAgIHRtcERpciA9ICIvdG1wIjsK
KworICAgIGlmIChzbnByaW50ZihidWZmZXIsIFBBVEhfTUFYLCAiJXMvJXNYWFhYWFgiLCB0bXBE
aXIsIHByZWZpeCkgPj0gUEFUSF9NQVgpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaGFuZGxl
ID0gbWtzdGVtcChidWZmZXIpOworICAgIGlmIChoYW5kbGUgPCAwKQorICAgICAgICBnb3RvIGVu
ZDsKKworICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlcik7CisKK2VuZDoKKyAgICBoYW5kbGUgPSBp
bnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKK3Zv
aWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGlmIChpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpIHsKKyAgICAgICAgY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgaGFu
ZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICB9Cit9CisKK2ludCB3cml0ZVRv
RmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7CisgICAgc2l6ZV90IHRv
ZG8gPSBsZW5ndGg7CisgICAgd2hpbGUgKHRvZG8gPiAwKSB7CisgICAgICAgIHNzaXplX3QgYnl0
ZXNXcml0dGVuID0gd3JpdGUoaGFuZGxlLCBkYXRhLCB0b2RvKTsKKyAgICAgICAgaWYgKGJ5dGVz
V3JpdHRlbiA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUiAmJiBlcnJubyAh
PSBFQUdBSU4pCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9IGVsc2UgaWYg
KGJ5dGVzV3JpdHRlbiA+IDApIHsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGJ5
dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIGRhdGEgKz0gYnl0ZXNXcml0dGVuOworICAgICAgICAg
ICAgdG9kbyAtPSBieXRlc1dyaXR0ZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dG90YWxCeXRlc1dyaXR0ZW47Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxl
IG1vZHVsZSkKK3sKKyAgICAvLyBjYXV0aW9uLCBjbG9zaW5nIGhhbmRsZSB3aWxsIG1ha2UgbWVt
b3J5IHZhbmlzaCBhbmQgYW55IHJlbWFpbmluZworICAgIC8vIHRpbWVyLCBpZGxlciwgdGhyZWFk
cyBvciBhbnkgb3RoZXIgbGVmdC1vdmVyIHdpbGwgY3Jhc2gsCisgICAgLy8gbWF5YmUganVzdCBp
Z25vcmUgdGhpcyBpcyBhIHNhZmVyIHNvbHV0aW9uPworICAgIHJldHVybiAhZGxjbG9zZShtb2R1
bGUpOworfQorCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIGNvbnN0IGNoYXIg
KmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBpZiAoIWhvbWUpIHsKKyAgICAgICAgaG9tZSA9
IGdldGVudigiVE1QRElSIik7CisgICAgICAgIGlmICghaG9tZSkKKyAgICAgICAgICAgIGhvbWUg
PSAiL3RtcCI7CisgICAgfQorICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGhvbWUpOworfQor
CitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAgICBDU3Ry
aW5nIGNwYXRoID0gcGF0aC51dGY4KCk7CisgICAgQ1N0cmluZyBjZmlsdGVyID0gZmlsdGVyLnV0
ZjgoKTsKKyAgICBjaGFyIGZpbGVQYXRoW1BBVEhfTUFYXTsKKyAgICBjaGFyKiBmaWxlTmFtZTsK
KyAgICBzaXplX3QgZmlsZU5hbWVTcGFjZTsKKyAgICBESVIqIGRpcjsKKworICAgIGlmIChjcGF0
aC5sZW5ndGgoKSArIE5BTUVfTUFYID49IHNpemVvZihmaWxlUGF0aCkpCisgICAgICAgIHJldHVy
biBlbnRyaWVzOworICAgIC8vIGxvb3AgaW52YXJpYW50OiBkaXJlY3RvcnkgcGFydCArICcvJwor
ICAgIG1lbWNweShmaWxlUGF0aCwgY3BhdGguZGF0YSgpLCBjcGF0aC5sZW5ndGgoKSk7CisgICAg
ZmlsZU5hbWUgPSBmaWxlUGF0aCArIGNwYXRoLmxlbmd0aCgpOworICAgIGlmIChjcGF0aC5sZW5n
dGgoKSA+IDAgJiYgZmlsZVBhdGhbY3BhdGgubGVuZ3RoKCkgLSAxXSAhPSAnLycpIHsKKyAgICAg
ICAgZmlsZU5hbWVbMF0gPSAnLyc7CisgICAgICAgIGZpbGVOYW1lKys7CisgICAgfQorICAgIGZp
bGVOYW1lU3BhY2UgPSBzaXplb2YoZmlsZVBhdGgpIC0gKGZpbGVOYW1lIC0gZmlsZVBhdGgpIC0g
MTsKKworICAgIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKKyAgICBpZiAoIWRpcikKKyAg
ICAgICAgcmV0dXJuIGVudHJpZXM7CisKKyAgICBzdHJ1Y3QgZGlyZW50KiBkZTsKKyAgICB3aGls
ZSAoZGUgPSByZWFkZGlyKGRpcikpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVMZW47CisgICAgICAg
IGlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykgeworICAgICAgICAgICAgaWYgKGRlLT5kX25hbWVb
MV0gPT0gJ1wwJykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChk
ZS0+ZF9uYW1lWzFdID09ICcuJyAmJiBkZS0+ZF9uYW1lWzJdID09ICdcMCcpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZubWF0Y2goY2ZpbHRlci5k
YXRhKCksIGRlLT5kX25hbWUsIDApKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
bmFtZUxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKyAgICAgICAgaWYgKG5hbWVMZW4gPj0gZmls
ZU5hbWVTcGFjZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBtYXliZSBhc3NlcnQ/IGl0IHNo
b3VsZCBuZXZlciBoYXBwZW4gYW55d2F5Li4uCisKKyAgICAgICAgbWVtY3B5KGZpbGVOYW1lLCBk
ZS0+ZF9uYW1lLCBuYW1lTGVuICsgMSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVQYXRo
KTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKKyAgICByZXR1cm4gZW50cmllczsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDItMjYgIExl
YW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxlcyB0byBwbGF0Zm9ybS9l
ZmwuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzUwODcKKworICAgICAgICAqIHBsYXRm
b3JtL2VmbC9DbGlwYm9hcmRFZmwuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZWZsL1Nj
cm9sbGJhckVmbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJ
dGVtRWZsLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZWZsL1Bhc3RlYm9hcmRFZmwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyVGhlbWVFZmwuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZWZsL0tVUkxFZmwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9lZmwvU3lzdGVtVGltZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2VmbC9Tb3VuZEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9G
aWxlU3lzdGVtRWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDItMjYgIEpvYW5tYXJpZSBEaWdncyAg
PGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49628</attachid>
            <date>2010-02-26 13:07:10 -0800</date>
            <delta_ts>2010-03-01 09:58:30 -0800</delta_ts>
            <desc>Patch 1/3 to WebCore/platform/graphics/efl</desc>
            <filename>webkit-efl-webcore_platform_graphics_efl-1.diff</filename>
            <type>text/plain</type>
            <size>40746</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisKKyNpbmNs
dWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fZm9udF9mYWNlIGNhaXJvX2ZvbnRfZmFjZV90OyAvLyBO
T0xJTlQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOwor
Y2xhc3MgU2hhcmVkQnVmZmVyOworCitzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSA6IE5v
bmNvcHlhYmxlIHsKKyAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90
KiBmb250RmFjZSkKKyAgICA6IG1fZm9udEZhY2UoZm9udEZhY2UpCisgICAge30KKworICAgIH5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0
Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJpbmdN
b2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CisKKyAgICBjYWlyb19mb250X2ZhY2VfdCogbV9m
b250RmFjZTsKK307CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpOworfQorCisjZW5kaWYgLy8gRm9udEN1
c3RvbVBsYXRmb3JtRGF0YV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisjZGVm
aW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCisKKyNpZiBFTkFCTEUoVklERU8pCisK
KyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisKK3R5cGVkZWYgc3RydWN0IF9H
c3RFbGVtZW50IEdzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNz
YWdlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1cyBHc3RCdXM7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBTdHJpbmc7CisKK2dib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVycm9yQ2Fs
bGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwor
Z2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2
YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50
ZXIgZGF0YSk7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UgeworICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZh
dGVFcnJvckNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRl
ciBkYXRhKTsKKyAgICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJh
Y2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworICAg
IGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyog
YnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKKworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhcik7CisgICAgICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsKKworICAgICAgICBJbnRTaXpl
IG5hdHVyYWxTaXplKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKKwor
ICAgICAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nICZ1cmwpOworICAgICAgICB2b2lkIGNhbmNl
bExvYWQoKTsKKworICAgICAgICB2b2lkIHBsYXkoKTsKKyAgICAgICAgdm9pZCBwYXVzZSgpOwor
CisgICAgICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgc2Vla2luZygpIGNv
bnN0OworCisgICAgICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7CisgICAgICAgIGZsb2F0IGN1
cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2VlayhmbG9hdCk7CisgICAgICAgIHZv
aWQgc2V0RW5kVGltZShmbG9hdCk7CisKKyAgICAgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAg
ICAgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworICAgICAgICB2b2lkIHNldE11dGVkKGJvb2wp
OworCisgICAgICAgIGludCBkYXRhUmF0ZSgpIGNvbnN0OworCisgICAgICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgICAgICBmbG9hdCBtYXhUaW1l
QnVmZmVyZWQoKSBjb25zdDsKKyAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgdG90
YWxCeXRlc0tub3duKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25z
dDsKKworICAgICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAgICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJik7CisKKyAgICAgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Cisg
ICAgICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsKKyAgICAgICAgdm9pZCBzaXplQ2hhbmdlZCgpOwor
ICAgICAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7CisgICAgICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgp
OworICAgICAgICB2b2lkIGRpZEVuZCgpOworICAgICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoKTsK
KworICAgICAgICB2b2lkIHJlcGFpbnQoKTsKKyAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZWRpYVBs
YXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICAgICAgc3RhdGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworCisgICAgICAgIHN0
YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgICAgICBz
dGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgICAgIHN0YXRpYyBib29sIGlzQXZh
aWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7
CisgICAgICAgIHZvaWQgY2FuY2VsU2VlaygpOworICAgICAgICB2b2lkIGVuZFBvaW50VGltZXJG
aXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgICAgIGZsb2F0IG1heFRpbWVM
b2FkZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgp
OworCisgICAgICAgIHZvaWQgY3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICAgICAgR3N0RWxlbWVu
dCogbV9wbGF5QmluOworICAgICAgICBHc3RFbGVtZW50KiBtX3ZpZGVvU2luazsKKyAgICAgICAg
R3N0RWxlbWVudCogbV9zb3VyY2U7CisgICAgICAgIGZsb2F0IG1fcmF0ZTsKKyAgICAgICAgZmxv
YXQgbV9lbmRUaW1lOworICAgICAgICBib29sIG1faXNFbmRSZWFjaGVkOworICAgICAgICBkb3Vi
bGUgbV92b2x1bWU7CisgICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3Jr
U3RhdGU7CisgICAgICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAg
ICAgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5aW5nOworICAgICAgICBtdXRhYmxlIGJvb2wgbV9pc1N0
cmVhbWluZzsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIGJvb2wgbV92aXNpYmxl
OworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKK307Cit9CisKKyNlbmRpZgor
I2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcl9oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1NpbmtHU3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAv
ZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1ZpZGVvU2lua0dTdHJl
YW1lci5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5l
ZEhhbmQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgVmlkZW9TaW5rR1N0cmVhbWVyX2gKKyNk
ZWZpbmUgVmlkZW9TaW5rR1N0cmVhbWVyX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklERU9fU0lOSyB3ZWJraXRfdmlk
ZW9fc2lua19nZXRfdHlwZSgpCisKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTksob2JqKSBcCisg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBcCisgICAgV0VCS0lUX1RZUEVf
VklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rKSkKKworI2RlZmluZSBXRUJLSVRfVklERU9fU0lO
S19DTEFTUyhrbGFzcykgXAorICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBc
CisgICAgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rQ2xhc3MpKQorCisj
ZGVmaW5lIFdFQktJVF9JU19WSURFT19TSU5LKG9iaikgXAorICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgXAorICAgIFdFQktJVF9UWVBFX1ZJREVPX1NJTkspKQorCisjZGVm
aW5lIFdFQktJVF9JU19WSURFT19TSU5LX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksIFwKKyAgICBXRUJLSVRfVFlQRV9WSURFT19TSU5LKSkKKwor
I2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19HRVRfQ0xBU1Mob2JqKSBcCisgICAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFwKKyAgICBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBX
ZWJLaXRWaWRlb1NpbmtDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1Npbmsg
ICAgICAgIFdlYktpdFZpZGVvU2luazsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtD
bGFzcyAgIFdlYktpdFZpZGVvU2lua0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZGVv
U2lua1ByaXZhdGUgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRWaWRl
b1NpbmsgeworICAgIC8qPCBwcml2YXRlID4qLworICAgIEdzdEJhc2VTaW5rIHBhcmVudDsKKyAg
ICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWRl
b1NpbmtDbGFzcyB7CisgICAgLyo8IHByaXZhdGUgPiovCisgICAgR3N0QmFzZVNpbmtDbGFzcyBw
YXJlbnRfY2xhc3M7IC8vIE5PTElOVAorCisgICAgLyogRnV0dXJlIHBhZGRpbmcgKi8KKyAgICB2
b2lkICgqIF93ZWJraXRfcmVzZXJ2ZWQxKSh2b2lkKTsKKyAgICB2b2lkICgqIF93ZWJraXRfcmVz
ZXJ2ZWQyKSh2b2lkKTsKKyAgICB2b2lkICgqIF93ZWJraXRfcmVzZXJ2ZWQzKSh2b2lkKTsKKyAg
ICB2b2lkICgqIF93ZWJraXRfcmVzZXJ2ZWQ0KSh2b2lkKTsKKyAgICB2b2lkICgqIF93ZWJraXRf
cmVzZXJ2ZWQ1KSh2b2lkKTsKKyAgICB2b2lkICgqIF93ZWJraXRfcmVzZXJ2ZWQ2KSh2b2lkKTsK
K307CisKK0dUeXBlICAgICAgIHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05V
Q19DT05TVDsgLy8gTk9MSU5UCitHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoY2Fp
cm9fc3VyZmFjZV90ICpzdXJmYWNlKTsgLy8gTk9MSU5UCisKK3ZvaWQgd2Via2l0X3ZpZGVvX3Np
bmtfc2V0X3N1cmZhY2UoV2ViS2l0VmlkZW9TaW5rICpzaW5rLCBjYWlyb19zdXJmYWNlX3QgKnN1
cmZhY2UpOyAvLyBOT0xJTlQKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFZpZGVvU2lua0dT
dHJlYW1lcl9oCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0
Zm9ybURhdGFFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvRm9udFBsYXRmb3JtRGF0YUVmbC5jcHAKQEAgLTAsMCArMSwyMTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5o
PgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkK
KyAgICA6IG1fcGF0dGVybigwKQorICAgICwgbV9zaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSkKKyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGlj
T2JsaXF1ZShmYWxzZSkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9y
bURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZhbWlseU5h
bWUuc3RyaW5nKCkudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFt
ZVN0cmluZy5kYXRhKCk7CisgICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKKyAgICAv
LyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBmb250Y29uZmlnIHdlaWdodHMu
CisgICAgaW50IGZjd2VpZ2h0ID0gRkNfV0VJR0hUX05PUk1BTDsKKyAgICBmbG9hdCBmY3NpemUg
PSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CisgICAgaWYgKGZvbnREZXNjcmlwdGlv
bi5pdGFsaWMoKSkKKyAgICAgICAgZmNzbGFudCA9IEZDX1NMQU5UX0lUQUxJQzsKKyAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAgIGZjd2Vp
Z2h0ID0gRkNfV0VJR0hUX0JPTEQ7CisKKyAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5n
ZW5lcmljRmFtaWx5KCk7CisKKyAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVh
dGUoKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7CisgICAgc3RhdGljIGNvbnN0
IGNhaXJvX2ZvbnRfb3B0aW9uc190KiBkZWZhdWx0T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9u
c19jcmVhdGUoKTsKKyAgICBjb25zdCBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IDA7
CisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKworICAgIGlmICghRmNQYXR0ZXJuQWRk
U3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4
Kj4oZmNmYW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKKyAgICAgICAg
ZmNmYW1pbHkgPSAic2VyaWYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWls
eToKKyAgICAgICAgZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTdGFuZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmY2ZhbWlseSA9ICJzYW5z
LXNlcmlmIjsKKyAgICB9CisKKyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBG
Q19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCisg
ICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBh
dHRlcm4sIEZDX1NMQU5ULCBmY3NsYW50KSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsKKyAg
ICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJR0hULCBmY3dlaWdodCkp
CisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGREb3VibGUo
cGF0dGVybiwgRkNfUElYRUxfU0laRSwgZmNzaXplKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVy
bjsKKworICAgIEZjQ29uZmlnU3Vic3RpdHV0ZSgwLCBwYXR0ZXJuLCBGY01hdGNoUGF0dGVybik7
CisgICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJuKTsKKworICAgIEZjUmVzdWx0IGZjcmVz
dWx0OworICAgIG1fcGF0dGVybiA9IEZjRm9udE1hdGNoKDAsIHBhdHRlcm4sICZmY3Jlc3VsdCk7
CisgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBzZXQgc29tZSBkZWZhdWx0IGZvbnQ/CisgICAgaWYg
KCFtX3BhdHRlcm4pCisgICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisgICAgZm9udEZhY2UgPSBj
YWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybik7CisgICAgY2Fp
cm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250TWF0cml4
LCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSk7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisKKyAgICBp
ZiAoIW9wdGlvbnMpCisgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9uczsKKworICAgIG1f
c2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRy
aXgsICZjdG0sIG9wdGlvbnMpOworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KGZvbnRGYWNl
KTsKKworZnJlZVBhdHRlcm46CisgICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKQorICAgIDogbV9wYXR0ZXJuKDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGl0YWxp
YykKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAsIG1fc2l6ZShzaXpl
KQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUo
aXRhbGljKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgY2Fpcm9fbWF0cml4X3QgZm9u
dE1hdHJpeDsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwg
c2l6ZSk7CisgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lk
ZW50aXR5KCZjdG0pOworICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9f
Zm9udF9vcHRpb25zX2NyZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFu
ZCBkaXNhYmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBo
aWMgcXVhbGl0aWVzIGZvciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9O
T05FKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlS
T19BTlRJQUxJQVNfR1JBWSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9u
dF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWly
b19mb250X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1E
YXRhOjppbml0aWFsaXplZCA9IGZhbHNlOworCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQo
KQoreworICAgIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGluaXRpYWxpemVkKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIUZjSW5pdCgpKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ2FuJ3QgaW5pdCBmb250IGNvbmZpZyBsaWJyYXJ5XG4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6ZmluaSgpCit7CisgICAgaWYgKCFpbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAg
Ly8gRklYTUU6IG91dC1jb21tZW50IHRoZSBsaW5lIGJlbG93IGR1ZSB0byB0aGlzIGNyYXNoOgor
ICAgIC8vIEZjQ2FjaGVGaW5pOiBBc3NlcnRpb24gJ2ZjQ2FjaGVDaGFpbnNbaV0gPT0oKHZvaWQq
KTApJworICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNsZWFuaW5nIHRoZSBGb250Q2FjaGUgYnV0IHdl
IG1pZ2h0IHN0aWxsIGhhdmUKKyAgICAvLyByZWZlcmVuY2UgZnJvbSB0aGUgZnJhbWUncyBub2Rl
cyAoQ1NTKS4gVGhlIENyYXNoIGlzIGVhc2lseQorICAgIC8vIHJlcHJvZHVjYWJsZSBieSBmdWxs
eSBsb2FkaW5nIGh0dHA6Ly9wb2wuZGsKKyAgICAvLyBGY0ZpbmkoKTsKK30KKworCitGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgLy8gTk9URTogdGhlIGRlc3Ry
b3lpbmcgb2YgbV9zY2FsZWRGb250IGFuZCBtX3BhdHRlcm4gaXMKKyAgICAvLyBiZWluZyBoYW5k
bGVkIGJ5IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQorfQorCitib29sIEZvbnRQ
bGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgLy8gVE9ETzogU3VwcG9ydCBpc0Zp
eGVkUGl0Y2goKSBmb3IgY3VzdG9tIGZvbnRzLgorICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgc3BhY2luZzsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0
SW50ZWdlcihtX3BhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1h
dGNoKQorICAgICAgICByZXR1cm4gc3BhY2luZyA9PSBGQ19NT05POworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9w
YXR0ZXJuKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fcGF0dGVybiB8fCBtX3Bh
dHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKKyAgICAgICAgfHwgIW90
aGVyLm1fcGF0dGVybiB8fCBvdGhlci5tX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1Bh
dHRlcm4qPigtMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmNQYXR0ZXJu
RXF1YWwobV9wYXR0ZXJuLCBvdGhlci5tX3BhdHRlcm4pOworfQorCisjaWZuZGVmIE5ERUJVRwor
U3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvSW1hZ2VFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW1hZ2VFZmwuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURh
dGEoKQoreworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkK
K3sKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VTaGFy
ZWRCdWZmZXJGYWxsYmFjaygpCit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7
IC8vIFRPRE86IGZhbGxiYWNrIGltYWdlPworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENv
bnRlbnRzT2ZGaWxlKFN0cmluZzo6Zm9ybWF0KERBVEFfRElSICIvd2Via2l0LTEuMC9pbWFnZXMv
JXMucG5nIiwgbmFtZSkpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIHJldHVybiBidWZmZXIu
cmVsZWFzZSgpOworICAgIHJldHVybiBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXJGYWxsYmFjaygp
OworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBsb2FkUmVz
b3VyY2VTaGFyZWRCdWZmZXIobmFtZSk7CisgICAgaW1nLT5zZXREYXRhKGJ1ZmZlci5yZWxlYXNl
KCksIHRydWUpOworICAgIHJldHVybiBpbWcucmVsZWFzZSgpOworfQorCit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRmxvYXRSZWN0RWZs
LmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0
byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgRWluYV9S
ZWN0YW5nbGUmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoci54LCByLnkpKQorICAg
ICwgbV9zaXplKHIudywgci5oKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIEVpbmFfUmVj
dGFuZ2xlKCkgY29uc3QgLy8gTk9MSU5UCit7CisgICAgRWluYV9SZWN0YW5nbGUgciA9IHsoaW50
KSByb3VuZCh4KCkpLCAoaW50KSByb3VuZCh5KCkpLCAoaW50KSByb3VuZCh3aWR0aCgpKSwgKGlu
dCkgcm91bmQoaGVpZ2h0KCkpfTsKKyAgICByZXR1cm4gcjsKK30KKworfQorCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDY0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5j
bHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNs
dWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1
ZGUgPGdzdC9pbnRlcmZhY2VzL21peGVyLmg+CisjaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMveG92
ZXJsYXkuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDxsaW1pdHM+
CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitnYm9vbGVhbiBt
ZWRpYVBsYXllclByaXZhdGVFcnJvckNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBt
ZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3Nh
Z2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnI7
CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3Bh
cnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7CisgICAg
ICAgIGlmIChlcnItPmNvZGUgPT0gMykgeworICAgICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEs
ICJGaWxlIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlKj4oZGF0YSk7CisgICAgICAgICAg
ICBpZiAobXApCisgICAgICAgICAgICAgICAgbXAtPmxvYWRpbmdGYWlsZWQoKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkVycm9yOiAlZCwgJXMiLCBl
cnItPmNvZGUsICBlcnItPm1lc3NhZ2UpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Z2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRU9TQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKEdTVF9NRVNTQUdFX1RZ
UEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRU9TKSB7CisgICAgICAgIExPR19WRVJCT1NFKE1l
ZGlhLCAiRW5kIG9mIFN0cmVhbSIpOworICAgICAgICBNZWRpYVBsYXllclByaXZhdGUqIG1wID0g
cmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKKyAgICAgICAgbXAt
PmRpZEVuZCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZ2Jvb2xlYW4gbWVkaWFQ
bGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2Fn
ZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9
PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEKSB7CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0
ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOworICAg
ICAgICBtcC0+dXBkYXRlU3RhdGVzKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitn
Ym9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVCdWZmZXJpbmdDYWxsYmFjayhHc3RCdXMqIGJ1cywg
R3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoR1NUX01FU1NB
R0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcpIHsKKyAgICAgICAgZ2lu
dCBwZXJjZW50ID0gMDsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nKG1lc3Nh
Z2UsICZwZXJjZW50KTsKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJCdWZmZXJpbmcgJWQi
LCBwZXJjZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayhXZWJLaXRWaWRlb1NpbmsqLCBNZWRpYVBs
YXllclByaXZhdGUqIHBsYXllclByaXZhdGUpCit7CisgICAgcGxheWVyUHJpdmF0ZS0+cmVwYWlu
dCgpOworfQorCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYVBs
YXllclByaXZhdGUocGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lz
dGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlm
IChpc0F2YWlsYWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRU
eXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXll
clByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1fcGxheWVyKHBsYXllcikKKyAg
ICAsIG1fcGxheUJpbigwKQorICAgICwgbV92aWRlb1NpbmsoMCkKKyAgICAsIG1fc291cmNlKDAp
CisgICAgLCBtX3JhdGUoMS4wZikKKyAgICAsIG1fZW5kVGltZShudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCkpCisgICAgLCBtX2lzRW5kUmVhY2hlZChmYWxzZSkKKyAgICAsIG1fdm9s
dW1lKDAuNWYpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAg
LCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9zdGFydGVk
UGxheWluZyhmYWxzZSkKKyAgICAsIG1faXNTdHJlYW1pbmcoZmFsc2UpCisgICAgLCBtX3NpemUo
SW50U2l6ZSgpKQorICAgICwgbV92aXNpYmxlKHRydWUpCit7CisKKyAgICBzdGF0aWMgYm9vbCBn
c3RJbml0aWFsaXplZCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aGUg
YXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICAgIGlmICghZ3N0SW5pdGlhbGl6ZWQp
IHsKKyAgICAgICAgZ3N0X2luaXQoMCwgMCk7CisgICAgICAgIGdzdEluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhlIHNpemUgc2hvdWxkbid0IGJlIGZpeGVkIGhl
cmUsIHRoaXMgaXMganVzdCBhIHF1aWNrIGhhY2suCisgICAgbV9zdXJmYWNlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgNjQwLCA0ODApOworfQorCitN
ZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQoreworICAgIGlmIChtX3N1
cmZhY2UpCisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOworCisgICAg
aWYgKG1fcGxheUJpbikgeworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5Qmlu
LCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVCht
X3BsYXlCaW4pKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiTG9hZCAlcyIsIHVy
bC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6
OkxvYWRpbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGlu
ZzsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBtX3BsYXll
ci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBjcmVhdGVHU1RQbGF5QmluKHVy
bCk7CisgICAgcGF1c2UoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQor
eworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUGxheSIpOworICAgIC8vIFdoZW4gZW5kIHJlYWNo
ZWQsIHJld2luZCBmb3IgVGVzdCB2aWRlby1zZWVrLXBhc3QtZW5kLXBsYXlpbmcKKyAgICBpZiAo
bV9pc0VuZFJlYWNoZWQpCisgICAgICAgIHNlZWsoMCk7CisgICAgbV9pc0VuZFJlYWNoZWQgPSBm
YWxzZTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9Q
TEFZSU5HKTsKKyAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBhdXNlIik7
CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7
CisgICAgbV9zdGFydGVkUGxheWluZyA9IGZhbHNlOworfQorCitmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAg
cmV0dXJuIDAuMDsKKworICAgIEdzdEZvcm1hdCB0aW1lRm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1F
OworICAgIGdpbnQ2NCB0aW1lTGVuZ3RoID0gMDsKKworICAgIC8vIEZJWE1FOiBXZSB0cnkgdG8g
Z2V0IHRoZSBkdXJhdGlvbiwgYnV0IHdlIGRvIG5vdCB0cnVzdCB0aGUKKyAgICAvLyByZXR1cm4g
dmFsdWUgb2YgdGhlIHF1ZXJ5IGZ1bmN0aW9uIG9ubHk7IHRoZSBwcm9ibGVtIHdlIGFyZQorICAg
IC8vIHRyeWluZyB0byB3b3JrLWFyb3VuZCBoZXJlIGlzIHRoYXQgcGlwZWxpbmVzIGluIHN0cmVh
bSBtb2RlIG1heQorICAgIC8vIG5vdCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgdGhlIGR1cmF0aW9u
LCBidXQgc3RpbGwgcmV0dXJuIHRydWUhCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNDYzOS4KKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fcGxheUJpbiwgJnRpbWVGb3JtYXQsICZ0aW1lTGVuZ3RoKSB8fCB0aW1lTGVuZ3Ro
IDw9IDApIHsKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJUaW1lIGR1cmF0aW9uIHF1ZXJ5
IGZhaWxlZC4iKTsKKyAgICAgICAgbV9pc1N0cmVhbWluZyA9IHRydWU7CisgICAgICAgIHJldHVy
biBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CisgICAgfQorCisgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdT
KHRpbWVMZW5ndGgpKTsKKworICAgIHJldHVybiAoZmxvYXQpICh0aW1lTGVuZ3RoIC8gMTAwMDAw
MDAwMC4wKTsKKyAgICAvLyBGSVhNRTogaGFuZGxlIDMuMTQuOS41IHByb3Blcmx5Cit9CisKK2Zs
b2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlmICgh
bV9wbGF5QmluKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBOZWNlc3NhcnkgYXMgc29tZXRp
bWVzLCBnc3RyZWFtZXIgcmV0dXJuIDA6MDAgYXQgdGhlIEVPUworICAgIGlmIChtX2lzRW5kUmVh
Y2hlZCkKKyAgICAgICAgcmV0dXJuIG1fZW5kVGltZTsKKworICAgIGZsb2F0IHJldDsKKworICAg
IEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9USU1F
KTsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9wbGF5QmluLCBxdWVyeSkpIHsKKyAgICAg
ICAgZ2ludDY0IHBvc2l0aW9uOworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVl
cnksIDAsICZwb3NpdGlvbik7CisgICAgICAgIHJldCA9IChmbG9hdCkgKHBvc2l0aW9uIC8gMTAw
MDAwMDAwMC4wKTsKKyAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQb3NpdGlvbiAlIiBHU1Rf
VElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MocG9zaXRpb24pKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBvc2l0aW9uIHF1ZXJ5IGZhaWxlZC4uLiIpOworICAg
ICAgICByZXQgPSAwLjA7CisgICAgfQorICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAg
ICByZXR1cm4gcmV0OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0
aW1lKQoreworICAgIEdzdENsb2NrVGltZSBzZWMgPSAoR3N0Q2xvY2tUaW1lKSh0aW1lICogR1NU
X1NFQ09ORCk7CisKKyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1faXNTdHJlYW1pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19WRVJCT1NFKE1l
ZGlhLCAiU2VlazogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKHNlYykpOworICAg
IC8vIEZJWE1FOiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgc2Vla2VkIHBvc2l0aW9uIGlzIG5vdCBh
dmFpbGFibGU/CisgICAgaWYgKCFnc3RfZWxlbWVudF9zZWVrKCBtX3BsYXlCaW4sIG1fcmF0ZSwK
KyAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgICAgIChHc3RTZWVrRmxhZ3Mp
KEdTVF9TRUVLX0ZMQUdfRkxVU0gpLAorICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHNl
YywKKyAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgR1NUX0NMT0NLX1RJTUVfTk9ORSkp
CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiU2VlayB0byAlZiBmYWlsZWQiLCB0aW1lKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKK3sK
KyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2lzU3RyZWFt
aW5nKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fZW5kVGltZSAhPSB0aW1lKSB7CisgICAg
ICAgIG1fZW5kVGltZSA9IHRpbWU7CisgICAgICAgIEdzdENsb2NrVGltZSBzdGFydCA9IChHc3RD
bG9ja1RpbWUpKGN1cnJlbnRUaW1lKCkgKiBHU1RfU0VDT05EKTsKKyAgICAgICAgR3N0Q2xvY2tU
aW1lIGVuZCAgID0gKEdzdENsb2NrVGltZSkodGltZSAqIEdTVF9TRUNPTkQpOworICAgICAgICBM
T0dfVkVSQk9TRShNZWRpYSwgInNldEVuZFRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJ
TUVfQVJHUyhlbmQpKTsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgaGFwcGVucyB3aGVuIHRoZSBz
ZWVrZWQgcG9zaXRpb24gaXMgbm90IGF2YWlsYWJsZT8KKyAgICAgICAgaWYgKCFnc3RfZWxlbWVu
dF9zZWVrKG1fcGxheUJpbiwgbV9yYXRlLAorICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElN
RSwKKyAgICAgICAgICAgICAgICAoR3N0U2Vla0ZsYWdzKShHU1RfU0VFS19GTEFHX0ZMVVNIIHwg
R1NUX1NFRUtfRkxBR19BQ0NVUkFURSksCisgICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9T
RVQsIHN0YXJ0LAorICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBlbmQpKQorICAg
ICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJTZWVrIHRvICVmIGZhaWxlZCIsIHRpbWUpOwor
ICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnN0YXJ0RW5kUG9pbnRUaW1lcklm
TmVlZGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y2FuY2VsU2VlaygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXll
clByaXZhdGU+KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fc3RhcnRlZFBsYXlp
bmc7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCitJ
bnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlm
ICghaGFzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIGludCB4ID0g
MCwgeSA9IDA7CisgICAgaWYgKEdzdFBhZCogcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV92aWRlb1NpbmssICJzaW5rIikpIHsKKyAgICAgICAgZ3N0X3ZpZGVvX2dldF9zaXplKEdT
VF9QQUQocGFkKSwgJngsICZ5KTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNU
KHBhZCkpOworICAgIH0KKworICAgIHJldHVybiBJbnRTaXplKHgsIHkpOworfQorCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIGdpbnQgY3VycmVudFZp
ZGVvID0gLTE7CisgICAgaWYgKG1fcGxheUJpbikKKyAgICAgICAgZ19vYmplY3RfZ2V0KEdfT0JK
RUNUKG1fcGxheUJpbiksICJjdXJyZW50LXZpZGVvIiwgJmN1cnJlbnRWaWRlbywgMCk7CisgICAg
cmV0dXJuIGN1cnJlbnRWaWRlbyA+IC0xOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX3ZvbHVtZSA9IHZvbHVtZTsKKyAgICBM
T0dfVkVSQk9TRShNZWRpYSwgIlZvbHVtZSB0byAlZiIsIHZvbHVtZSk7CisgICAgc2V0TXV0ZWQo
ZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9vbCBiKQor
eworICAgIGlmICghbV9wbGF5QmluKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYikgewor
ICAgICAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QobV9wbGF5QmluKSwgInZvbHVtZSIsICZtX3Zv
bHVtZSwgMCk7CisgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChtX3BsYXlCaW4pLCAidm9s
dW1lIiwgKGRvdWJsZSkwLjAsIDApOworICAgIH0gZWxzZQorICAgICAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1QobV9wbGF5QmluKSwgInZvbHVtZSIsIG1fdm9sdW1lLCAwKTsKKworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIGlmICghcmF0
ZSkgeworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RBVEVf
UEFVU0VEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9pc1N0cmVhbWluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yYXRlID0gcmF0ZTsKKyAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIlNldCBSYXRlIHRvICVmIiwgcmF0ZSk7CisgICAgaWYgKCFnc3RfZWxlbWVudF9zZWVr
KG1fcGxheUJpbiwgcmF0ZSwKKyAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAg
ICAgIChHc3RTZWVrRmxhZ3MpKEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FD
Q1VSQVRFKSwKKyAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAo
Y3VycmVudFRpbWUoKSAqIEdTVF9TRUNPTkQpLAorICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9T
RVQsIChHc3RDbG9ja1RpbWUpIChtX2VuZFRpbWUgKiBHU1RfU0VDT05EKSkpCisgICAgICAgIExP
R19WRVJCT1NFKE1lZGlhLCAiU2V0IFJhdGUgdG8gJWYgZmFpbGVkIiwgcmF0ZSk7Cit9CisKK2lu
dCBNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAxOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
ZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30K
KworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lQnVm
ZmVyZWQiKTsKKyAgICAvLyBydHNwIHN0cmVhbXMgYXJlIG5vdCBidWZmZXJlZAorICAgIHJldHVy
biBtX2lzU3RyZWFtaW5nID8gMCA6IG1heFRpbWVMb2FkZWQoKTsKK30KKworZmxvYXQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAoreworICAgIC8vIFRPRE8KKyAg
ICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIpOworICAgIGlmIChtX2lzU3Ry
ZWFtaW5nKQorICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
OworICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAgcmV0dXJu
IG1heFRpbWVMb2FkZWQoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
TG9hZGVkKCkgY29uc3QKK3sKKyAgICAvLyBUT0RPCisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJt
YXhUaW1lTG9hZGVkIik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZHVyYXRp
b24oKTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgImJ5
dGVzTG9hZGVkIik7CisgICAgLyppZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgZmxvYXQgZHVyID0gZHVyYXRpb24oKTsKKyAgICBmbG9hdCBtYXhUaW1lID0gbWF4VGltZUxv
YWRlZCgpOworICAgIGlmICghZHVyKQorICAgICAgICByZXR1cm4gMDsqLworICAgIHJldHVybiAx
OyAvLyB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lIC8gZHVyOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZTo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlc0tub3duIik7CisgICAgcmV0dXJu
IHRvdGFsQnl0ZXMoKSA+IDA7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90
YWxCeXRlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBMT0dfVkVSQk9T
RShNZWRpYSwgInRvdGFsQnl0ZXMiKTsKKyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8v
IERvIHNvbWV0aGluZyB3aXRoIG1fc291cmNlIHRvIGdldCB0aGUgdG90YWwgYnl0ZXMgb2YgdGhl
IG1lZGlhCisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y2FuY2VsTG9hZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit7CisgICAgLy8gVGhlcmUgaXMgbm8gKGtub3du
KSB3YXkgdG8gZ2V0IHN1Y2ggbGV2ZWwgb2YgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAvLyB0aGUg
c3RhdGUgb2YgR1N0cmVhbWVyLCB0aGVyZWZvcmUsIHdoZW4gaW4gUEFVU0VEIHN0YXRlLAorICAg
IC8vIHdlIGFyZSBzdXJlIHdlIGNhbiBkaXNwbGF5IHRoZSBmaXJzdCBmcmFtZSBhbmQgZ28gdG8g
cGxheQorCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBt
X25ldHdvcmtTdGF0ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRl
ID0gbV9yZWFkeVN0YXRlOworICAgIEdzdFN0YXRlIHN0YXRlOworICAgIEdzdFN0YXRlIHBlbmRp
bmc7CisKKyAgICBpZiAoIW1fcGxheUJpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbiwKKyAg
ICAgICAgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOworCisgICAgc3dpdGNo
IChyZXQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzoKKyAgICAgICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwKKyAgICAgICAgICAgIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKworICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NU
QVRFX1JFQURZKSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNF
RCkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0
YTsKKworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisKKyAg
ICAgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbiwgInNvdXJjZSIsICZtX3NvdXJjZSwgMCk7Cisg
ICAgICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIm1f
c291cmNlIGlzIDAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X0FTWU5DOgorICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkFzeW5jOiBTdGF0ZTogJXMsIHBl
bmRpbmc6ICVzIiwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRl
KSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKyAg
ICAgICAgLy8gQ2hhbmdlIGluIHByb2dyZXNzCisgICAgICAgIHJldHVybjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6CisgICAgICAgIExPR19W
RVJCT1NFKE1lZGlhLCAiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsCisgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksCisgICAgICAgICAgICBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIGlmIChzdGF0ZSA9
PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RB
VEVfUEFVU0VEKQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVD
dXJyZW50RGF0YTsKKworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2Fk
aW5nOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBMT0dfVkVSQk9TRShN
ZWRpYSwgIkVsc2UgOiAlZCIsIHJldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm
IChzZWVraW5nKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZzsKKworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKKyAg
ICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJOZXR3b3JrIFN0YXRlIENoYW5nZWQgZnJvbSAldSB0
byAldSIsCisgICAgICAgICAgICBvbGROZXR3b3JrU3RhdGUsIG1fbmV0d29ya1N0YXRlKTsKKyAg
ICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgaWYgKG1f
cmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKSB7CisgICAgICAgIExPR19WRVJCT1NFKE1lZGlh
LCAiUmVhZHkgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1IiwKKyAgICAgICAgICAgIG9sZFJl
YWR5U3RhdGUsIG1fcmVhZHlTdGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hh
bmdlZCgpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWRTdGF0ZUNo
YW5nZWQoKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmF0ZUNoYW5nZWQoKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2l6ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0aW1lQ2hhbmdlZCgpCit7CisgICAgdXBk
YXRlU3RhdGVzKCk7CisgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp2b2x1bWVDaGFuZ2VkKCkKK3sKKyAgICBtX3BsYXllci0+dm9sdW1l
Q2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkKK3sKKyAg
ICBtX2lzRW5kUmVhY2hlZCA9IHRydWU7CisgICAgcGF1c2UoKTsKKyAgICB0aW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZGluZ0ZhaWxlZCgpCit7CisgICAg
aWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpOZXR3b3JrRXJyb3IpIHsKKyAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOworICAgICAgICBt
X3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0
YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBzaXplOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV92aXNp
YmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQor
eworICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE86IG1f
c2l6ZSB2cyByZWN0PworICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENB
SVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCByZWN0LngoKSwg
cmVjdC55KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIG1fc3VyZmFj
ZSwgMCwgMCk7CisgICAgY2Fpcm9fZmlsbChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKQoreworICAgIC8vIEZJWE1FOiBxdWVyeSB0aGUgZW5naW5lIHRvIHNlZSB3
aGF0IHR5cGVzIGFyZSBzdXBwb3J0ZWQKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHR5cGVz
LmFkZChTdHJpbmcoInZpZGVvL3gtdGhlb3JhK29nZyIpKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIEZJWE1FOiBxdWVyeSB0aGUg
ZW5naW5lIHRvIHNlZSB3aGF0IHR5cGVzIGFyZSBzdXBwb3J0ZWQKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0eXBlID09ICJ2aWRlby94LXRoZW9yYStvZ2ciID8gKGNvZGVjcy5p
c0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJsKQoreworICAgIEFTU0VS
VCghbV9wbGF5QmluKTsKKyAgICBtX3BsYXlCaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InBsYXliaW4iLCAicGxheSIpOworCisgICAgR3N0QnVzKiBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0
X2J1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluKSk7CisgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dh
dGNoKGJ1cyk7CisgICAgZ19zaWduYWxfY29ubmVjdChidXMsICJtZXNzYWdlOjplcnJvciIsIEdf
Q0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoYnVzLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyhtZWRpYVBsYXll
clByaXZhdGVFT1NDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLCAi
bWVzc2FnZTo6c3RhdGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlU3Rh
dGVDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLCAibWVzc2FnZTo6
YnVmZmVyaW5nIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVCdWZmZXJpbmdDYWxsYmFj
ayksIHRoaXMpOworICAgIGdzdF9vYmplY3RfdW5yZWYoYnVzKTsKKworICAgIGdfb2JqZWN0X3Nl
dChHX09CSkVDVChtX3BsYXlCaW4pLCAidXJpIiwgdXJsLnV0ZjgoKS5kYXRhKCksIDApOworCisg
ICAgR3N0RWxlbWVudCogYXVkaW9TaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnY29u
ZmF1ZGlvc2luayIsIDApOworICAgIG1fdmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3
KG1fc3VyZmFjZSk7CisKKyAgICBnX29iamVjdF9zZXQobV9wbGF5QmluLCAiYXVkaW8tc2luayIs
IGF1ZGlvU2luaywgMCk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbiwgInZpZGVvLXNpbmsi
LCBtX3ZpZGVvU2luaywgMCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fdmlkZW9TaW5rLCAi
cmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRD
YWxsYmFjayksIHRoaXMpOworCisgICAgc2V0Vm9sdW1lKG1fdm9sdW1lKTsKK30KKworfQorCisj
ZW5kaWYKKwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDIt
MjYgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxlcyB0byBwbGF0
Zm9ybS9ncmFwaGljcy9lZmwuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzUwODcKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1Zp
ZGVvU2lua0dTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvRm9udFBsYXRmb3JtRGF0YUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2VmbC9JbWFnZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9GbG9hdFJlY3RFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9lZmwvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisKIDIwMTAt
MDItMjYgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CiAgCiAg
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49629</attachid>
            <date>2010-02-26 13:07:46 -0800</date>
            <delta_ts>2010-03-01 09:58:47 -0800</delta_ts>
            <desc>Patch 2/3 to WebCore/platform/graphics/efl</desc>
            <filename>webkit-efl-webcore_platform_graphics_efl-2.diff</filename>
            <type>text/plain</type>
            <size>29819</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL1NpbXBsZUZvbnREYXRhRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL1NpbXBsZUZvbnREYXRhRWZsLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4K
KyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQoKQoreworICAgIGNhaXJvX2ZvbnRfZXh0ZW50c190IGZvbnRFeHRlbnRzOworICAgIGNhaXJv
X3RleHRfZXh0ZW50c190IHRleHRFeHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2V4dGVu
dHMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAmZm9udEV4dGVudHMpOworICAgIG1fYXNj
ZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250RXh0ZW50cy5hc2NlbnQpOworICAgIG1fZGVzY2Vu
dCA9IHN0YXRpY19jYXN0PGludD4oZm9udEV4dGVudHMuZGVzY2VudCk7CisgICAgbV9saW5lU3Bh
Y2luZyA9IHN0YXRpY19jYXN0PGludD4oZm9udEV4dGVudHMuaGVpZ2h0KTsKKyAgICAvLyBUaGVy
ZSBzZWVtcyB0byBiZSBzb21lIHJvdW5kaW5nIGVycm9yIGluIGNhaXJvIChvciBpbiBob3cgd2UK
KyAgICAvLyB1c2UgY2Fpcm8pIHdpdGggc29tZSBmb250cywgbGlrZSBEZWphVnUgU2FucyBNb25v
LCB3aGljaCBtYWtlcworICAgIC8vIGNhaXJvIHJlcG9ydCBhIGhlaWdodCBzbWFsbGVyIHRoYW4g
YXNjZW50ICsgZGVzY2VudCwgd2hpY2ggaXMKKyAgICAvLyB3cm9uZyBhbmQgY29uZnVzZXMgV2Vi
Q29yZSdzIGxheW91dCBzeXN0ZW0uIFdvcmthcm91bmQgdGhpcworICAgIC8vIHdoaWxlIHdlIGZp
Z3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgorICAgIGlmIChtX2xpbmVTcGFjaW5nIDwgbV9hc2Nl
bnQgKyBtX2Rlc2NlbnQpCisgICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVz
Y2VudDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9wbGF0Zm9ybURhdGEu
bV9zY2FsZWRGb250LCAieCIsICZ0ZXh0RXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0gdGV4dEV4
dGVudHMuaGVpZ2h0OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX3BsYXRm
b3JtRGF0YS5tX3NjYWxlZEZvbnQsICIgIiwgJnRleHRFeHRlbnRzKTsKKyAgICBtX3NwYWNlV2lk
dGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0RXh0ZW50cy54X2FkdmFuY2UpOworICAgIG1fbGlu
ZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKKyAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDog
MC5mOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAg
IGlmICghaXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLm1fcGF0
dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9wbGF0Zm9ybURhdGEubV9wYXR0ZXJuKSkgewor
ICAgICAgICAgICAgRmNQYXR0ZXJuRGVzdHJveShtX3BsYXRmb3JtRGF0YS5tX3BhdHRlcm4pOwor
ICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEubV9wYXR0ZXJuID0gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpIHsKKyAgICAgICAgICAgIGNh
aXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCA9IDA7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKK30KKworU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERh
dGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmKmZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqIHBkYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1p
bHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEo
KnBkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jv
b2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9z
Y2FsZWRfZm9udF9sb2NrX2ZhY2UobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsKKworICAg
IGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIUZjRnJlZVR5cGVDaGFySW5kZXgoZmFj
ZSwgY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3Vu
bG9ja19mYWNlKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91
bmxvY2tfZmFjZShtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7Cit9CisK
K2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CisKKyAg
ICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0
X2V4dGVudHNfdCBleHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMo
bV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisKKyAg
ICBmbG9hdCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2Zv
bnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UpCisgICAgICAgIHcgPSAoZmxvYXQpZXh0ZW50cy54
X2FkdmFuY2U7CisgICAgcmV0dXJuIHc7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9t
YXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
KCkKK3sKKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKK30KKworRm9u
dFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGlu
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAg
ICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMp
OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRhKQoreworICAgIHN0YXRp
Y19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQorCitGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVm
ZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOworCisgICAgaW50IGVycm9y
OworCisgICAgc3RhdGljIEZUX0xpYnJhcnkgbGlicmFyeSA9IDA7CisgICAgaWYgKCFsaWJyYXJ5
KSB7CisgICAgICAgIGVycm9yID0gRlRfSW5pdF9GcmVlVHlwZSgmbGlicmFyeSk7CisgICAgICAg
IGlmIChlcnJvcikgeworICAgICAgICAgICAgbGlicmFyeSA9IDA7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZUX0ZhY2UgZmFjZTsKKyAgICBlcnJvciA9
IEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZUX0J5
dGUqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpLCAwLCAmZmFjZSk7CisgICAgaWYg
KGVycm9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJ1ZmZlci0+cmVmKCk7CisgICAgY2Fp
cm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3Jf
ZnRfZmFjZShmYWNlLCAwKTsKKworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3QgYnVm
ZmVyS2V5OworICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRhKGZvbnRGYWNlLCAmYnVm
ZmVyS2V5LCBidWZmZXIsIHJlbGVhc2VEYXRhKTsKKworICAgIHJldHVybiBuZXcgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShmb250RmFjZSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAt
MCwwICsxLDEzNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBm
b250IGltcGxlbWVudGF0aW9uLgorICogSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlv
bmUgb3RoZXIgdGhhbiBGb250TWFjLmNwcCwKKyAqIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9o
CisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisjaW5jbHVk
ZSA8Y2Fpcm8tZnQuaD4KKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KKyNlbGlm
IGRlZmluZWQoVVNFX1BBTkdPKQorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKyNlbHNl
CisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIEZv
bnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorI2lmIGRlZmlu
ZWQoVVNFX0ZSRUVUWVBFKQorICAgICAgICA6IG1fcGF0dGVybihoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkpCisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICAgICAgOiBtX2NvbnRleHQo
MCkKKyAgICAgICAgLCBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQorI2Vsc2UK
KyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCisgICAgICAgICwg
bV9zY2FsZWRGb250KDApCisgICAgICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisj
aWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCisgICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxpZiBk
ZWZpbmVkKFVTRV9QQU5HTykKKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2Zv
bnQoMCkKKyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRp
ZgorICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQorICAgICAgICB7IH0KKworICAgIEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkpOworCisgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFj
ZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworCisgICAgfkZvbnRQbGF0Zm9y
bURhdGEoKTsKKworICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5p
KCk7CisKKyAgICBib29sIGlzRml4ZWRQaXRjaCgpOworICAgIGZsb2F0IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVy
biBtX3N5bnRoZXRpY0JvbGQ7IH0KKyAgICBib29sIHN5bnRoZXRpY09ibGlxdWUoKSBjb25zdCB7
IHJldHVybiBtX3N5bnRoZXRpY09ibGlxdWU7IH0KKworICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IHNjYWxlZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZEZvbnQ7IH0KKworICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9
IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPiho
YXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworI2lmIGRlZmluZWQo
VVNFX0ZSRUVUWVBFKQorICAgICAgICByZXR1cm4gbV9wYXR0ZXJuID09IGhhc2hUYWJsZURlbGV0
ZWRGb250VmFsdWUoKTsKKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQorICAgICAgICByZXR1cm4g
bV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsKKyNlbmRpZgorICAgIH07CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYK
KworI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQorICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOwor
I2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgc3RhdGljIFBhbmdvRm9udE1hcCogbV9mb250
TWFwOworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBtX2hhc2hUYWJsZTsKKworICAgIFBhbmdvQ29u
dGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCogbV9mb250OworI2Vsc2UKKyNlcnJvciAi
TXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCisgICAgZmxvYXQgbV9zaXplOwor
ICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOworICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwor
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKKyAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXplZDsKKworcHJpdmF0ZToKKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKKyAgICBz
dGF0aWMgRmNQYXR0ZXJuICpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSk7IH0KKyNlbGlmIGRlZmluZWQoVVNFX1BBTkdP
KQorICAgIHN0YXRpYyBQYW5nb0ZvbnQgKmhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKTsgfQorI2VuZGlmCit9OworfQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRDYWNoZUVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9Gb250Q2FjaGVFZmwuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgor
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRD
YWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBpZiAoIUZvbnRQbGF0Zm9ybURhdGE6OmluaXQo
KSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3
IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwg
Zm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIHJl
dHVybiBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlw
dGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKSk7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pCit7CisgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVy
IHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9y
IG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhv
dXQgY2hhbmdpbmcgYW55IHByZWZzLgorICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIo
IlRpbWVzIE5ldyBSb21hbiIpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIHRpbWVzU3RyKTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJh
aXRzTWFza3MpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1E
YXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JY29uRWZsLmNwcApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRl
Y25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSWNvbi5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCisgICAg
OiBtX2ljb24oMCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJY29uOjp+SWNvbigp
Cit7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qKgorICog
U0VDVElPTjp3ZWJraXQtdmlkZW8tc2luaworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHU3RyZWFt
ZXIgdmlkZW8gc2luaworICoKKyAqICNXZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3RyZWFtZXIgc2lu
ayBlbGVtZW50IHRoYXQgc2VuZHMKKyAqIGRhdGEgdG8gYSAjY2Fpcm9fc3VyZmFjZV90LgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxh
dGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsCisgICAgICAgIEdTVF9QQURfU0lO
SywgR1NUX1BBRF9BTFdBWVMsCisgICAgICAgIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQ
U19SR0J4ICI7IiBHU1RfVklERU9fQ0FQU19CR1J4KSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9T
VEFUSUMod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQg
d2Via2l0X3ZpZGVvX3NpbmtfZGVidWcKKworc3RhdGljIEdzdEVsZW1lbnREZXRhaWxzIHdlYmtp
dFZpZGVvU2lua0RldGFpbHMgPQorICAgIEdTVF9FTEVNRU5UX0RFVEFJTFMoKGdjaGFyKikgIldl
YktpdCB2aWRlbyBzaW5rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnY2hhciopICJTaW5r
L1ZpZGVvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChnY2hhciopICJTZW5kcyB2aWRlbyBk
YXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIChnY2hhciopICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPiIp
OworCitlbnVtIHsKKyAgICBSRVBBSU5UX1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05BTAorfTsK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU1VSRkFDRQorfTsKKworc3RhdGljIGd1
aW50IHdlYmtpdFZpZGVvU2lua1NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitzdHJ1
Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgeworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZTsKKyAgICBHQXN5bmNRdWV1ZSogYXN5bmNRdWV1ZTsKKyAgICBnYm9vbGVhbiByZ2JPcmRlcmlu
ZzsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgZnBzTjsKKyAgICBp
bnQgZnBzRDsKKyAgICBpbnQgcGFyTjsKKyAgICBpbnQgcGFyRDsKK307CisKKyNkZWZpbmUgX2Rv
X2luaXQoYmxhKSBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3Np
bmtfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndlYmtpdCB2aWRlbyBzaW5rIikKKworR1NUX0JPSUxFUlBMQVRFX0ZVTEwoV2ViS2l0
VmlkZW9TaW5rLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3ZpZGVvX3NpbmssCisgICAg
ICAgICAgICAgICAgICAgICBHc3RCYXNlU2luaywKKyAgICAgICAgICAgICAgICAgICAgIEdTVF9U
WVBFX0JBU0VfU0lOSywKKyAgICAgICAgICAgICAgICAgICAgIF9kb19pbml0KTsKKworc3RhdGlj
IHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2Jhc2VfaW5pdChncG9pbnRlciBnX2NsYXNzKQorewor
ICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MoZ19j
bGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRD
bGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5rdGVtcGxhdGUpKTsKKyAgICBn
c3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyhlbGVtZW50Q2xhc3MsICZ3ZWJraXRWaWRlb1Np
bmtEZXRhaWxzKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2luaXQoV2Vi
S2l0VmlkZW9TaW5rKiBzaW5rLCBXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7CisgICAg
V2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdjsKKworICAgIHNpbmstPnByaXYgPSBwcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkss
IFdlYktpdFZpZGVvU2lua1ByaXZhdGUpOworICAgIHByaXYtPmFzeW5jUXVldWUgPSBnX2FzeW5j
X3F1ZXVlX25ldygpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5rX2lk
bGVfZnVuYyhncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdF
QktJVF9WSURFT19TSU5LKGRhdGEpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYg
PSBzaW5rLT5wcml2OworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworCisgICAgaWYgKCFwcml2LT5h
c3luY1F1ZXVlKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBidWZmZXIgPSAoR3N0QnVm
ZmVyKilnX2FzeW5jX3F1ZXVlX3RyeV9wb3AocHJpdi0+YXN5bmNRdWV1ZSk7CisgICAgaWYgKCFi
dWZmZXIgfHwgR19VTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworCisgICAgLy8gVE9ETzogY29uc2lkZXIgcHJpdi0+cmdiT3JkZXJpbmc/Cisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBzcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgQ0FJUk9fRk9STUFUX1JHQjI0LCBwcml2LT53
aWR0aCwgcHJpdi0+aGVpZ2h0LCAoNCAqIHByaXYtPndpZHRoICsgMykgJiB+Myk7CisKKyAgICAv
LyBUT0RPOiBXZSBjb3B5IHRoZSBkYXRhIHR3aWNlIHJpZ2h0IG5vdy4gVGhpcyBjb3VsZCBiZSBl
YXNpbHkgaW1wcm92ZWQuCisgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUocHJpdi0+c3Vy
ZmFjZSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0Up
OworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgc3JjLCAwLCAwKTsKKyAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3koc3JjKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHBy
aXYtPndpZHRoLCBwcml2LT5oZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIGNhaXJv
X2Rlc3Ryb3koY3IpOworCisgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworCisgICAgZ19z
aWduYWxfZW1pdChzaW5rLCB3ZWJraXRWaWRlb1NpbmtTaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVE
XSwgMCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCit3
ZWJraXRfdmlkZW9fc2lua19yZW5kZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhi
c2luayk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisK
KyAgICBnX2FzeW5jX3F1ZXVlX3B1c2gocHJpdi0+YXN5bmNRdWV1ZSwgZ3N0X2J1ZmZlcl9yZWYo
YnVmZmVyKSk7CisgICAgZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfSElHSF9JRExFLCB3ZWJr
aXRfdmlkZW9fc2lua19pZGxlX2Z1bmMsIHNpbmssIDApOworCisgICAgcmV0dXJuIEdTVF9GTE9X
X09LOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzKEdz
dEJhc2VTaW5rKiBic2luaywgR3N0Q2FwcyogY2FwcykKK3sKKyAgICBXZWJLaXRWaWRlb1Npbmsq
IHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhic2luayk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJp
dmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmU7Cisg
ICAgZ2Jvb2xlYW4gcmV0OworICAgIGNvbnN0IEdWYWx1ZSogZnBzOworICAgIGNvbnN0IEdWYWx1
ZSogcGFyOworICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpbnQgcmVkTWFzazsKKworICAg
IEdzdENhcHMqIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdChnc3Rfc3RhdGljX3Bh
ZF90ZW1wbGF0ZV9nZXRfY2Fwcygmc2lua3RlbXBsYXRlKSwgY2Fwcyk7CisKKyAgICBpZiAoZ3N0
X2NhcHNfaXNfZW1wdHkoaW50ZXJzZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg
ICAgZ3N0X2NhcHNfdW5yZWYoaW50ZXJzZWN0aW9uKTsKKworICAgIHN0cnVjdHVyZSA9IGdzdF9j
YXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CisKKyAgICByZXQgPSBnc3Rfc3RydWN0dXJlX2dl
dF9pbnQoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpOworICAgIHJldCAmPSBnc3Rfc3RydWN0
dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCk7CisgICAgZnBzID0gZ3N0
X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RydWN0dXJlLCAiZnJhbWVyYXRlIik7CisgICAgcmV0ICY9
ICEhZnBzOworCisgICAgcGFyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoc3RydWN0dXJlLCAi
cGl4ZWwtYXNwZWN0LXJhdGlvIik7CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgcHJpdi0+d2lkdGggPSB3aWR0aDsKKyAgICBwcml2LT5oZWlnaHQgPSBoZWln
aHQ7CisKKyAgICAvKiBXZSBkb250IHlldCB1c2UgZnBzIG9yIHBpeGVsIGFzcGVjdCBpbnRvIGJ1
dCBoYW5keSB0byBoYXZlICovCisgICAgcHJpdi0+ZnBzTiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rp
b25fbnVtZXJhdG9yKGZwcyk7CisgICAgcHJpdi0+ZnBzRCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rp
b25fZGVub21pbmF0b3IoZnBzKTsKKworICAgIGlmIChwYXIpIHsKKyAgICAgICAgcHJpdi0+cGFy
TiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yKHBhcik7CisgICAgICAgIHByaXYt
PnBhckQgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yKHBhcik7CisgICAgfSBl
bHNlCisgICAgICAgIHByaXYtPnBhck4gPSBwcml2LT5wYXJEID0gMTsKKworICAgIGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJyZWRfbWFzayIsICZyZWRNYXNrKTsKKyAgICBwcml2
LT5yZ2JPcmRlcmluZyA9IChyZWRNYXNrID09IHN0YXRpY19jYXN0PGludD4oMHhmZjAwMDAwMCkp
OworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lu
a19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsg
PSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBzaW5rLT5wcml2OworCisgICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOworICAgICAgICBwcml2LT5zdXJm
YWNlID0gMDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+YXN5bmNRdWV1ZSkgeworICAgICAgICBn
X2FzeW5jX3F1ZXVlX3VucmVmKHByaXYtPmFzeW5jUXVldWUpOworICAgICAgICBwcml2LT5hc3lu
Y1F1ZXVlID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5k
aXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfdmlkZW9fc2lua19maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5r
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2lu
ayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0
ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNl
IFBST1BfU1VSRkFDRToKKyAgICAgICAgaWYgKHByaXYtPnN1cmZhY2UpCisgICAgICAgICAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3kocHJpdi0+c3VyZmFjZSk7CisgICAgICAgIHByaXYtPnN1cmZh
Y2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgoY2Fpcm9fc3VyZmFjZV90KilnX3ZhbHVlX2dl
dF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVv
X3NpbmtfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5r
ID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcF9pZCkgewor
ICAgIGNhc2UgUFJPUF9TVVJGQUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVl
LCBzaW5rLT5wcml2LT5zdXJmYWNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Vi
a2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5w
cml2OworCisgICAgZ19hc3luY19xdWV1ZV9sb2NrKHByaXYtPmFzeW5jUXVldWUpOworCisgICAg
LyogUmVtb3ZlIGFsbCByZW1haW5pbmcgb2JqZWN0cyBmcm9tIHRoZSBxdWV1ZSAqLworICAgIHdo
aWxlIChHc3RCdWZmZXIqIGJ1ZmZlciA9IChHc3RCdWZmZXIqKWdfYXN5bmNfcXVldWVfdHJ5X3Bv
cF91bmxvY2tlZChwcml2LT5hc3luY1F1ZXVlKSkKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihi
dWZmZXIpOworCisgICAgZ19hc3luY19xdWV1ZV91bmxvY2socHJpdi0+YXN5bmNRdWV1ZSk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2Ns
YXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIEdzdEJhc2VTaW5r
Q2xhc3MqIGdzdGJhc2VTaW5rQ2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lu
a1ByaXZhdGUpKTsKKworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3Zp
ZGVvX3Npbmtfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3Byb3BlcnR5OworCisgICAgZ29iamVjdENsYXNzLT5kaXNw
b3NlID0gd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X3ZpZGVvX3NpbmtfZmluYWxpemU7CisKKyAgICBnc3RiYXNlU2lua0NsYXNz
LT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0YmFzZVNpbmtDbGFz
cy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlU2lua0Ns
YXNzLT5zdG9wID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcDsKKyAgICBnc3RiYXNlU2lua0NsYXNz
LT5zZXRfY2FwcyA9IHdlYmtpdF92aWRlb19zaW5rX3NldF9jYXBzOworCisgICAgd2Via2l0Vmlk
ZW9TaW5rU2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQt
cmVxdWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDApOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLCBQUk9QX1NVUkZBQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19wb2lu
dGVyKCJzdXJmYWNlIiwgInN1cmZhY2UiLCAiVGFyZ2V0IGNhaXJvX3N1cmZhY2VfdCoiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRF
KSkpOworfQorCisvKioKKyAqIHdlYmtpdF92aWRlb19zaW5rX25ldzoKKyAqIEBzdXJmYWNlOiBh
ICNjYWlyb19zdXJmYWNlX3QKKyAqCisgKiBDcmVhdGVzIGEgbmV3IEdTdHJlYW1lciB2aWRlbyBz
aW5rIHdoaWNoIHVzZXMgQHN1cmZhY2UgYXMgdGhlIHRhcmdldAorICogZm9yIHNpbmtpbmcgYSB2
aWRlbyBzdHJlYW0gZnJvbSBHU3RyZWFtZXIuCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHc3RF
bGVtZW50IGZvciB0aGUgbmV3bHkgY3JlYXRlZCB2aWRlbyBzaW5rCisgKi8KK0dzdEVsZW1lbnQq
Cit3ZWJraXRfdmlkZW9fc2lua19uZXcoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAg
IHJldHVybiAoR3N0RWxlbWVudCopZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJREVPX1NJTkss
ICJzdXJmYWNlIiwgc3VyZmFjZSwgMCk7Cit9CisKK3ZvaWQKK3dlYmtpdF92aWRlb19zaW5rX3Nl
dF9zdXJmYWNlKFdlYktpdFZpZGVvU2luayogc2luaywgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
KQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2
ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9W
SURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKTsKKyAgICBpZiAocHJpdi0+c3VyZmFj
ZSkKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHByaXYtPnN1cmZhY2UpOworICAgIHBy
aXYtPnN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKTsKK30KSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCisrKyBX
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAyLTI2ICBMZWFuZHJvIFBl
cmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWS4KKworICAgICAgICBBZGQgRUZMIHBvcnQgZmlsZXMgdG8gcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9lZmwvU2ltcGxlRm9udERhdGFFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250UGxhdGZvcm1EYXRhLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250Q2FjaGVFZmwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9WaWRlb1NpbmtHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKwogMjAxMC0wMi0yNiAgSmFya2tvIFNha2tpbmVuICA8amFya2tvLnNha2tpbmVu
QHRpZXRvLmNvbT4KICAKICAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49630</attachid>
            <date>2010-02-26 13:08:21 -0800</date>
            <delta_ts>2010-03-01 09:58:53 -0800</delta_ts>
            <desc>Patch 3/3 to WebCore/platform/graphics/efl</desc>
            <filename>webkit-efl-webcore_platform_graphics_efl-3.diff</filename>
            <type>text/plain</type>
            <size>8994</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVm
bC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAwIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGb250Ojpj
YW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRSZWN0IEZv
bnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgSW50
UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HbHlwaFBhZ2VUcmVlTm9kZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9u
dWxsCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HbHlwaFBhZ2VUcmVlTm9kZUVm
bC5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkds
eXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3Ro
IHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBo
YXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3Vw
cG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5tX3NjYWxlZEZv
bnQpOworICAgIGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBo
YXZlR2x5cGhzID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBi
dWZmZXJbaV0pOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRh
Rm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAg
ICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9f
ZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm1fc2Nh
bGVkRm9udCk7CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9k
ZXYvbnVsbAorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3Bw
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5v
a2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisjaW5j
bHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50OjpJbnRQb2lu
dChjb25zdCBFdmFzX1BvaW50JiBwKQorICAgIDogbV94KHAueCkKKyAgICAsIG1feShwLnkpCit7
Cit9CisKK0ludFBvaW50OjpvcGVyYXRvciBFdmFzX1BvaW50KCkgY29uc3QgLy8gTk9MSU5UCit7
CisgICAgRXZhc19Qb2ludCBwID0geyB4KCksIHkoKSB9OworICAgIHJldHVybiBwOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRSZWN0RWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0lu
dFJlY3RFZmwuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0g
SW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBFaW5h
X1JlY3RhbmdsZSYgcikKKyAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoci54LCByLnkpKQorICAg
ICwgbV9zaXplKHIudywgci5oKQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBFaW5hX1JlY3Rh
bmdsZSgpIGNvbnN0IC8vIE5PTElOVAoreworICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7IHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9OworICAgIHJldHVybiByOworfQorCit9CisKSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCisrKyBX
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAyLTI2ICBMZWFuZHJvIFBl
cmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWS4KKworICAgICAgICBBZGQgRUZMIHBvcnQgZmlsZXMgdG8gcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsLgorICAgICAgICBodHRwOi8vd2Via2l0Lm9yZy9iLzM1MDg3CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HbHlwaFBhZ2VUcmVlTm9kZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRQb2ludEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbnRSZWN0RWZsLmNwcDogQWRkZWQuCisKIDIwMTAtMDIt
MjYgIEphcmtrbyBTYWtraW5lbiAgPGphcmtrby5zYWtraW5lbkB0aWV0by5jb20+CiAgCiAgICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
</data>

          </attachment>
      

    </bug>

</bugzilla>