<?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>69826</bug_id>
          
          <creation_ts>2011-10-11 03:26:24 -0700</creation_ts>
          <short_desc>[Chromium] Implement font shaping with font-feature-settings on Mac</short_desc>
          <delta_ts>2012-06-12 21:32:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67933</dependson>
    
    <dependson>79336</dependson>
    
    <dependson>88332</dependson>
          <blocked>63796</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>adele</cc>
    
    <cc>behdad</cc>
    
    <cc>caryclark</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>efidler</cc>
    
    <cc>eoconnor</cc>
    
    <cc>evan</cc>
    
    <cc>hyatt</cc>
    
    <cc>ian</cc>
    
    <cc>jamesr</cc>
    
    <cc>jdaggett</cc>
    
    <cc>mike</cc>
    
    <cc>mitz</cc>
    
    <cc>ned</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481548</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-10-11 03:26:24 -0700</bug_when>
    <thetext>Support font-feature-settings CSS property. This bug entry is for Chromium mac port.

Chromium mac port shares FontPlatformData class with other mac ports and it uses CoreText to shape text. A difficult point is that CoreText doesn&apos;t provide interfaces to use OpenType features. To support the property, I&apos;m planning to introduce Harfbuzz as a complex text shaper. Chromium Linux port uses Harfbuzz so we can reuse or merge the existing code. Firefox also uses Harfbuzz.

I think there are three options (Using Skia is premised):
1. add Harfbuzz as an optional shaper
2. replace CoreText with Harfbuzz
3. fork FontPlatformData and use Harfbuzz as complex text shaper

In #1, I&apos;m planning to use Harfbuzz if and only if font-feature-settings properties are set. This approach minimizes the impact of layout result. This will require to modify FontComplexTextMac.cpp. This might be undesirable for other ports which don&apos;t want to add an extra dependency or won&apos;t want to support the property.

If we take option #2, I will implement methods of Font class for complex text (e.g. Font::drawComplexText) into FontSkia.cpp by Harfbuzz and stop linking FontComplexTextMac.cpp. This might require only a slight change in FontPlatformData to hold information about Harfbuzz. This approach also has an additional advantage that we can integrate FontSkia.cpp with FontLinux.cpp partially (we can&apos;t integrate them completely because they use different FontPlatformData implementation). A disadvantage of this approach is rendering results for complex text would differ from the current implementation.

The advantage of #3 is that we can completely share font related code between Chromium Linux and Chromium Mac Skia ports. However this will require a lot of things to implement and could impact rendering results.

Comments and suggestions are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532822</commentid>
    <comment_count>1</comment_count>
    <who name="John Daggett">jdaggett</who>
    <bug_when>2012-01-09 22:35:05 -0800</bug_when>
    <thetext>You&apos;re going to need CoreText when dealing with AAT fonts for Indic, I don&apos;t think OSX ships with OpenType fonts for Indic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532828</commentid>
    <comment_count>2</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-09 22:48:52 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; You&apos;re going to need CoreText when dealing with AAT fonts for Indic, I don&apos;t think OSX ships with OpenType fonts for Indic.

Thank you for the useful information. I didn&apos;t know that. I understand that we need keep CoreText in any cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543877</commentid>
    <comment_count>3</comment_count>
      <attachid>124271</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-27 01:06:04 -0800</bug_when>
    <thetext>Created attachment 124271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543879</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 01:07:48 -0800</bug_when>
    <thetext>Attachment 124271 did not pass style-queue:

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

Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzCoreText.cpp:33:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 13 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>543881</commentid>
    <comment_count>5</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-27 01:09:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=124271) [details]
&gt; Patch

According to comment #1, only option we can take is adding HarfBuzz-ng as a secondary shaper and use it only for -webkit-font-feature-settings is specified. I uploaded a proposed patch. This implementation would be eventually used on Chromium Linux. However, for now, I don&apos;t want to use it on Linux because there are some rendering and performance issues when drawing complex text. (That&apos;s an another reason why we use HarfBuzz-ng just only for supporting -webkit-font-feature-settings)

This patch won&apos;t build for now. I uploaded the patch set which is required to build chromium with this patch at: https://chromiumcodereview.appspot.com/9223010.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543886</commentid>
    <comment_count>6</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-27 01:21:04 -0800</bug_when>
    <thetext>*** Bug 67933 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543888</commentid>
    <comment_count>7</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-27 01:21:52 -0800</bug_when>
    <thetext>*** Bug 64930 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544209</commentid>
    <comment_count>8</comment_count>
      <attachid>124271</attachid>
    <who name="Evan Martin">evan</who>
    <bug_when>2012-01-27 11:26:36 -0800</bug_when>
    <thetext>Comment on attachment 124271
Patch

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

It appears that AAT are just TrueType extensions.  Would it be simpler to implement the AAT extensions in Harfbuzz-NG instead?

&gt; Source/WebCore/ChangeLog:7
&gt; +        Chromium mac port uses it as secondary text shaper to support  OpenType features.

typo: one space before OpenType

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:49
&gt; +    DEFINE_STATIC_LOCAL(HarfBuzzFaceCache, s_harfbuzzFaceCache, ());

Does this cache ever get smaller?  (That is, does this slowly leak memory?)

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39
&gt;&gt; +typedef _hb_face_t hb_face_t;
&gt; 
&gt; hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

I think this is ok, since you&apos;re forward-declaring.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:150
&gt; +    // for characters like &apos;\n&apos; otherwise.

Isn&apos;t this code copy and pasted from other code?  Can we somehow refactor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544811</commentid>
    <comment_count>9</comment_count>
      <attachid>124480</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-29 18:07:24 -0800</bug_when>
    <thetext>Created attachment 124480
Patch (just fixed a typo and a style error)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544812</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 18:09:38 -0800</bug_when>
    <thetext>Attachment 124480 did not pass style-queue:

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

Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 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>544813</commentid>
    <comment_count>11</comment_count>
      <attachid>124271</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-29 18:11:58 -0800</bug_when>
    <thetext>Comment on attachment 124271
Patch

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

&gt; Would it be simpler to implement the AAT extensions in Harfbuzz-NG instead?

I know next to nothing about AAT format so I can&apos;t estimate how difficult to add AAT extension to HarfBuzz-ng. According to &lt;http://fontforge.sourceforge.net/gposgsub.html&gt;, some advanced layout features are interchangeable between OpenType and AAT, but others have essentially no common ground. FireFox doesn&apos;t use HarfBuzz when the font has &apos;mort&apos; table or &apos;morx&apos; table and the font doesn&apos;t have &apos;GSUB&apos; nor &apos;GPOS&apos;. I guess adding AAT extension isn&apos;t so easy.

Behdad, do you have any ideas?

&gt;&gt; Source/WebCore/ChangeLog:7
&gt;&gt; +        Chromium mac port uses it as secondary text shaper to support  OpenType features.
&gt; 
&gt; typo: one space before OpenType

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzCoreText.cpp:33
&gt;&gt; +#include &quot;CoreText/CoreText.h&quot;
&gt; 
&gt; You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]

Done. (and renamed the file to HarfBuzzFaceCoreText.cpp)

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:49
&gt;&gt; +    DEFINE_STATIC_LOCAL(HarfBuzzFaceCache, s_harfbuzzFaceCache, ());
&gt; 
&gt; Does this cache ever get smaller?  (That is, does this slowly leak memory?)

An hb_face_t object in this cache will be destroyed (and the cache get smaller) when all FontPlatformData objects which are associated with the hb_face_object are removed from FontCache. The FontCache class controls number of FontPlatformData in the cache. This means memory leak doesn&apos;t occur as long as FontCache handles the FontPlatformData cache appropriately.

&gt;&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39
&gt;&gt;&gt; +typedef _hb_face_t hb_face_t;
&gt;&gt; 
&gt;&gt; hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; I think this is ok, since you&apos;re forward-declaring.

Left it as is.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41
&gt;&gt; +typedef _hb_font_t hb_font_t;
&gt; 
&gt; hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:150
&gt;&gt; +    // for characters like &apos;\n&apos; otherwise.
&gt; 
&gt; Isn&apos;t this code copy and pasted from other code?  Can we somehow refactor?

Actually, this code comes from getNormalizedTextRun() which lives in ComplexTextControllerHarfBuzz.cpp, but I made some minor change:
- Don&apos;t create TextRun. I think we only need normalized buffer here.
- Don&apos;t convert mirrored characters. HarfBuzz-ng handles mirrored characters itself.

I just copied the code because (1) the code is a bit different, (2) there is no good place to share the code, (3) ComplexTextControllerHarfBuzz.cpp should be deprecated eventually. Should I share the code between ComplexTextControllerHarfBuzz.cpp and HarfBuzzShaper.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546609</commentid>
    <comment_count>12</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-31 16:21:04 -0800</bug_when>
    <thetext>Any suggestions/comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546615</commentid>
    <comment_count>13</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2012-01-31 16:27:27 -0800</bug_when>
    <thetext>I am still anxious about how much code was cut&apos;n&apos;pasted.  Is the plan to manually copy any further changes made to this code into the other file as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546650</commentid>
    <comment_count>14</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-31 16:59:28 -0800</bug_when>
    <thetext>Thanks for the comment.

(In reply to comment #13)
&gt; I am still anxious about how much code was cut&apos;n&apos;pasted.  Is the plan to manually copy any further changes made to this code into the other file as well?

HarfBuzzShaper.cpp is based on ComplexTextControllerHarfBuzz.cpp and following methods are almost the same (but a bit different):
- normalizeSpaces() and normalizeSpacesAndMirrorChars()
- HarfBuzzShaper::setNormalizedBuffer() and ComplexTextController::getNormalizedTextRun()
- HarfBuzzShaper::isWordEnd() and ComplexTextController::isWordBreak()
- HarfBuzzShaper::setPadding() and ComplexTextController::setPadding(()
- HarfBuzzShaper::determineWordBreakSpacing() and ComplexTextController::determineWordBreakSpacing()

No further code won&apos;t be copy and pasted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551069</commentid>
    <comment_count>15</comment_count>
    <who name="Behdad Esfahbod">behdad</who>
    <bug_when>2012-02-07 09:50:00 -0800</bug_when>
    <thetext>FWIW I do plan to eventually add AAT morx support to HarfBuzz.  But &quot;eventually&quot; is the key word here...  I&apos;ll take a look to get a better estimate of how much work is involved...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551533</commentid>
    <comment_count>16</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-07 16:19:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; FWIW I do plan to eventually add AAT morx support to HarfBuzz.  But &quot;eventually&quot; is the key word here...  I&apos;ll take a look to get a better estimate of how much work is involved...

Thanks for comments. That&apos;s great to hear.

I&apos;m waiting for review or further comments...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561296</commentid>
    <comment_count>17</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-21 15:39:53 -0800</bug_when>
    <thetext>Hi Evan,

Could you please take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561299</commentid>
    <comment_count>18</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2012-02-21 15:44:13 -0800</bug_when>
    <thetext>My concern is that a bug fix in ComplexTextControllerHarfbuzz will need to be manually copied over.  Like the code in setNormalizedBuffer() has seen a number of changes over time and probably will see more in the future.

But if you think this way is best, it LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561310</commentid>
    <comment_count>19</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-21 15:57:45 -0800</bug_when>
    <thetext>Thank you for review.

(In reply to comment #18)
&gt; My concern is that a bug fix in ComplexTextControllerHarfbuzz will need to be manually copied over.  Like the code in setNormalizedBuffer() has seen a number of changes over time and probably will see more in the future.
&gt; 
&gt; But if you think this way is best, it LGTM

I&apos;ll think about whether these functions can be shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568239</commentid>
    <comment_count>20</comment_count>
      <attachid>129617</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-29 19:36:48 -0800</bug_when>
    <thetext>Created attachment 129617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568250</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 19:43:26 -0800</bug_when>
    <thetext>Attachment 129617 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 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>568264</commentid>
    <comment_count>22</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-29 19:57:07 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=129617) [details]
&gt; Patch

I added HarfBuzzShaperBase class to share functions. Revised the patch to follow the change.

Evan, could you take another look if possible?

Tony, could you tell me if Evan can&apos;t review the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568769</commentid>
    <comment_count>23</comment_count>
      <attachid>129617</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-01 10:41:29 -0800</bug_when>
    <thetext>Comment on attachment 129617
Patch

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

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:35
&gt; +#include &quot;hb.h&quot;

Should we use &lt;hb.h&gt; to make it more clear that this header is not part of webkit?  That seems to be what we do for icu includes.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:44
&gt; +typedef pair&lt;hb_face_t*, unsigned&gt; FaceCacheEntry;

Using a struct would make the code less confusing.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:63
&gt; +        ++(result.get()-&gt;second.second);

I think you can remove the .get() since operator-&gt; is defined on the iterator.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:75
&gt; +    ASSERT(result.get()-&gt;second.second &gt; 0);
&gt; +    --(result.get()-&gt;second.second);
&gt; +    if (!(result.get()-&gt;second.second)) {
&gt; +        hb_face_destroy(result.get()-&gt;second.first);

Ditto.

&gt; Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp:57
&gt;  FloatRect Font::selectionRectForComplexText(const TextRun&amp; run, const FloatPoint&amp; point, int h,
&gt;                                              int from, int to) const
&gt;  {
&gt; +#if PLATFORM(CHROMIUM)
&gt; +    if (preferHarfBuzz(this)) {

This feels really invasive.  Maybe mitz or hyatt have an idea on how to make this less invasive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569162</commentid>
    <comment_count>24</comment_count>
      <attachid>129617</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-01 18:53:07 -0800</bug_when>
    <thetext>Comment on attachment 129617
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:35
&gt;&gt; +#include &quot;hb.h&quot;
&gt; 
&gt; Should we use &lt;hb.h&gt; to make it more clear that this header is not part of webkit?  That seems to be what we do for icu includes.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:44
&gt;&gt; +typedef pair&lt;hb_face_t*, unsigned&gt; FaceCacheEntry;
&gt; 
&gt; Using a struct would make the code less confusing.

Will use a struct.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.cpp:63
&gt;&gt; +        ++(result.get()-&gt;second.second);
&gt; 
&gt; I think you can remove the .get() since operator-&gt; is defined on the iterator.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp:57
&gt;&gt; +    if (preferHarfBuzz(this)) {
&gt; 
&gt; This feels really invasive.  Maybe mitz or hyatt have an idea on how to make this less invasive.

Agree, but I couldn&apos;t come up with an idea to avoid ifdefs without code duplications. Suggestions are really welcomed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571149</commentid>
    <comment_count>25</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-05 16:24:29 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp:57
&gt; &gt;  FloatRect Font::selectionRectForComplexText(const TextRun&amp; run, const FloatPoint&amp; point, int h,
&gt; &gt;                                              int from, int to) const
&gt; &gt;  {
&gt; &gt; +#if PLATFORM(CHROMIUM)
&gt; &gt; +    if (preferHarfBuzz(this)) {
&gt; 
&gt; This feels really invasive.  Maybe mitz or hyatt have an idea on how to make this less invasive.

Any suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571210</commentid>
    <comment_count>26</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-05 17:02:28 -0800</bug_when>
    <thetext>How much does HarfBuzzShaper overlap with the ComplexTextController implementation in ComplexTextControllerHarfBuzz?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571243</commentid>
    <comment_count>27</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-05 17:23:37 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; How much does HarfBuzzShaper overlap with the ComplexTextController implementation in ComplexTextControllerHarfBuzz?

Their function is the same, but ComplexTextControllerHarfBuzz uses old HarfBuzz, while HarfBuzzShaper uses new HarfBuzz (so called HarfBuzz-ng). The common code lives in HarfBuzzShaperBase class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573538</commentid>
    <comment_count>28</comment_count>
      <attachid>130756</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-07 20:24:24 -0800</bug_when>
    <thetext>Created attachment 130756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573542</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 20:27:56 -0800</bug_when>
    <thetext>Attachment 130756 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 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>573545</commentid>
    <comment_count>30</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-07 20:32:37 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=130756) [details]
&gt; Patch

To reduce #ifdefs, I added a new file called FontComplexTextCommon.cpp and moved some methods of Font class into the file. The name of moved methods are added &quot;Common&quot; suffix. On mac port, original methods  just call xxxCommon(). How about this approach? There is extra function calls, but I think it unlikely affects performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574656</commentid>
    <comment_count>31</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-08 23:17:12 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #28)
&gt; &gt; Created an attachment (id=130756) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; To reduce #ifdefs, I added a new file called FontComplexTextCommon.cpp and moved some methods of Font class into the file. The name of moved methods are added &quot;Common&quot; suffix. On mac port, original methods  just call xxxCommon(). How about this approach? There is extra function calls, but I think it unlikely affects performance.

This looks to me much worse than attachment 129617.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574663</commentid>
    <comment_count>32</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-08 23:31:47 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; This looks to me much worse than attachment 129617 [details].

Ok. I drop the patch. Do you have any ideas to make the patch less invasive without forking? I would really appreciate if I could hear suggestions. I agree that attachment 129617 patch wasn&apos;t good, but I&apos;d like to add this feature and I couldn&apos;t come up with other ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574669</commentid>
    <comment_count>33</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-08 23:34:18 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; This looks to me much worse than attachment 129617 [details] [details].
&gt; 
&gt; Ok. I drop the patch. Do you have any ideas to make the patch less invasive without forking? I would really appreciate if I could hear suggestions. I agree that attachment 129617 [details] patch wasn&apos;t good

I didn’t object to attachment 129617.

&gt; but I&apos;d like to add this feature and I couldn&apos;t come up with other ideas.

Have you considered using Core Text, which is OS X’s text engine, rather than using HarfBuzz?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574683</commentid>
    <comment_count>34</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-08 23:56:37 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; This looks to me much worse than attachment 129617 [details] [details] [details].
&gt; &gt; 
&gt; &gt; Ok. I drop the patch. Do you have any ideas to make the patch less invasive without forking? I would really appreciate if I could hear suggestions. I agree that attachment 129617 [details] [details] patch wasn&apos;t good
&gt; 
&gt; I didn’t object to attachment 129617 [details].

I see. Thank you for comments!

&gt; &gt; but I&apos;d like to add this feature and I couldn&apos;t come up with other ideas.
&gt; 
&gt; Have you considered using Core Text, which is OS X’s text engine, rather than using HarfBuzz?

Does CoreText support OpenType features? If so, I&apos;m happy to try it. Using CoreText should have less impact for the current implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574691</commentid>
    <comment_count>35</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-09 00:08:52 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #32)
&gt; &gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; &gt; This looks to me much worse than attachment 129617 [details] [details] [details] [details].
&gt; &gt; &gt; 
&gt; &gt; &gt; Ok. I drop the patch. Do you have any ideas to make the patch less invasive without forking? I would really appreciate if I could hear suggestions. I agree that attachment 129617 [details] [details] [details] patch wasn&apos;t good
&gt; &gt; 
&gt; &gt; I didn’t object to attachment 129617 [details] [details].
&gt; 
&gt; I see. Thank you for comments!
&gt; 
&gt; &gt; &gt; but I&apos;d like to add this feature and I couldn&apos;t come up with other ideas.
&gt; &gt; 
&gt; &gt; Have you considered using Core Text, which is OS X’s text engine, rather than using HarfBuzz?
&gt; 
&gt; Does CoreText support OpenType features? If so, I&apos;m happy to try it. Using CoreText should have less impact for the current implementation.

Core Text’s API is in terms of AAT features, which it maps internally to OpenType features. Check out &lt;ATS/SFNTLayoutTypes.h&gt; to see what’s supported. I believe that it’s possible to access even some features beyond what’s included in that header (anything the standard Typography panel in OS X can do). I can try asking the appropriate people at Apple about specifics if you’re interested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575207</commentid>
    <comment_count>36</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-09 14:07:50 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Core Text’s API is in terms of AAT features, which it maps internally to OpenType features. Check out &lt;ATS/SFNTLayoutTypes.h&gt; to see what’s supported. I believe that it’s possible to access even some features beyond what’s included in that header (anything the standard Typography panel in OS X can do). I can try asking the appropriate people at Apple about specifics if you’re interested.

Thank you so much for the information!

If my understanding correct, we need to have reverse-mapping(OpenType-AAT mapping) because page authors can specify arbitrary OpenType feature to font-feature-settings. Is it possible to have such mapping or an API which converts an OpenType feature to  corresponding AAT feature? We can guess such OpenType-AAT mapping for some features (like http://en.wikipedia.org/wiki/List_of_typographic_features), but such guess is likely to fail. If WebKit can have OpenType-AAT mapping, I&apos;ll try to implement this feature with CoreText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575296</commentid>
    <comment_count>37</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-09 15:21:58 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; If my understanding correct, we need to have reverse-mapping(OpenType-AAT mapping) because page authors can specify arbitrary OpenType feature to font-feature-settings.

True (it is kind of unfortunate, in my opinion, that this CSS feature is tailored specifically for OpenType).

&gt; Is it possible to have such mapping or an API which converts an OpenType feature to  corresponding AAT feature?

I don’t think OS X has this sort of API. We would have to put this knowledge in WebCore.

&gt; We can guess such OpenType-AAT mapping for some features (like http://en.wikipedia.org/wiki/List_of_typographic_features), but such guess is likely to fail. If WebKit can have OpenType-AAT mapping, I&apos;ll try to implement this feature with CoreText.

I am going to ask a Core Text expert for advice here, so that we don’t have to make bad guesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575320</commentid>
    <comment_count>38</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-09 16:12:11 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; If my understanding correct, we need to have reverse-mapping(OpenType-AAT mapping) because page authors can specify arbitrary OpenType feature to font-feature-settings.
&gt; 
&gt; True (it is kind of unfortunate, in my opinion, that this CSS feature is tailored specifically for OpenType).

Agreed, but as the spec says, the property provides low-level feature settings control and OpenType looks reasonable choice to me because major OS/platform can handle it.

&gt; &gt; Is it possible to have such mapping or an API which converts an OpenType feature to  corresponding AAT feature?
&gt; 
&gt; I don’t think OS X has this sort of API. We would have to put this knowledge in WebCore.

I see.

&gt; &gt; We can guess such OpenType-AAT mapping for some features (like http://en.wikipedia.org/wiki/List_of_typographic_features), but such guess is likely to fail. If WebKit can have OpenType-AAT mapping, I&apos;ll try to implement this feature with CoreText.
&gt; 
&gt; I am going to ask a Core Text expert for advice here, so that we don’t have to make bad guesses.

Thank you so much for your help. I&apos;d appreciate if the CoreText expert could give us advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575349</commentid>
    <comment_count>39</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-09 16:54:14 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; If my understanding correct, we need to have reverse-mapping(OpenType-AAT mapping) because page authors can specify arbitrary OpenType feature to font-feature-settings.
&gt; &gt; 
&gt; &gt; True (it is kind of unfortunate, in my opinion, that this CSS feature is tailored specifically for OpenType).
&gt; 
&gt; Agreed, but as the spec says, the property provides low-level feature settings control and OpenType looks reasonable choice to me because major OS/platform can handle it.

I’d also like us to see implementing more of the higher-level properties (I’ve started on kerning and ligatures in &lt;http://trac.webkit.org/r104696&gt; and &lt;http://trac.webkit.org/r104786&gt;). I think they are more author-friendly.

&gt; 
&gt; &gt; &gt; Is it possible to have such mapping or an API which converts an OpenType feature to  corresponding AAT feature?
&gt; &gt; 
&gt; &gt; I don’t think OS X has this sort of API. We would have to put this knowledge in WebCore.
&gt; 
&gt; I see.
&gt; 
&gt; &gt; &gt; We can guess such OpenType-AAT mapping for some features (like http://en.wikipedia.org/wiki/List_of_typographic_features), but such guess is likely to fail. If WebKit can have OpenType-AAT mapping, I&apos;ll try to implement this feature with CoreText.
&gt; &gt; 
&gt; &gt; I am going to ask a Core Text expert for advice here, so that we don’t have to make bad guesses.
&gt; 
&gt; Thank you so much for your help. I&apos;d appreciate if the CoreText expert could give us advice.

I just learned that that person might not be available for a week. While I think it would be great to do this with Core Text (which would also benefit Apple’s OS X WebKit), I want to repeat that I have no objection to attachment 129617 (though I am not the right person to review it), if you would like to go that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575366</commentid>
    <comment_count>40</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-09 17:22:22 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; (In reply to comment #37)
&gt; &gt; &gt; (In reply to comment #36)
&gt; &gt; &gt; &gt; If my understanding correct, we need to have reverse-mapping(OpenType-AAT mapping) because page authors can specify arbitrary OpenType feature to font-feature-settings.
&gt; &gt; &gt; 
&gt; &gt; &gt; True (it is kind of unfortunate, in my opinion, that this CSS feature is tailored specifically for OpenType).
&gt; &gt; 
&gt; &gt; Agreed, but as the spec says, the property provides low-level feature settings control and OpenType looks reasonable choice to me because major OS/platform can handle it.
&gt; 
&gt; I’d also like us to see implementing more of the higher-level properties (I’ve started on kerning and ligatures in &lt;http://trac.webkit.org/r104696&gt; and &lt;http://trac.webkit.org/r104786&gt;). I think they are more author-friendly.

That&apos;s great to hear. Thank you for heads-up. My original plan was implementing low-level property first, then implementing the higher-level properties. If there are some areas which I can do, I&apos;m happy to do it.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; Is it possible to have such mapping or an API which converts an OpenType feature to  corresponding AAT feature?
&gt; &gt; &gt; 
&gt; &gt; &gt; I don’t think OS X has this sort of API. We would have to put this knowledge in WebCore.
&gt; &gt; 
&gt; &gt; I see.
&gt; &gt; 
&gt; &gt; &gt; &gt; We can guess such OpenType-AAT mapping for some features (like http://en.wikipedia.org/wiki/List_of_typographic_features), but such guess is likely to fail. If WebKit can have OpenType-AAT mapping, I&apos;ll try to implement this feature with CoreText.
&gt; &gt; &gt; 
&gt; &gt; &gt; I am going to ask a Core Text expert for advice here, so that we don’t have to make bad guesses.
&gt; &gt; 
&gt; &gt; Thank you so much for your help. I&apos;d appreciate if the CoreText expert could give us advice.
&gt; 
&gt; I just learned that that person might not be available for a week. While I think it would be great to do this with Core Text (which would also benefit Apple’s OS X WebKit), I want to repeat that I have no objection to attachment 129617 [details] (though I am not the right person to review it), if you would like to go that way.

I&apos;m in no hurry. I&apos;d like to wait and see whether I can implement the property with CoreText. I may go this way if using CoreText looks difficult to me, though.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587377</commentid>
    <comment_count>41</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-03-25 16:52:37 -0700</bug_when>
    <thetext>Hi mitz,

(In reply to comment #39)

&gt; I just learned that that person might not be available for a week. While I think it would be great to do this with Core Text (which would also benefit Apple’s OS X WebKit), I want to repeat that I have no objection to attachment 129617 [details] (though I am not the right person to review it), if you would like to go that way.

Any updates on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594840</commentid>
    <comment_count>42</comment_count>
    <who name="Ian Storm Taylor">ian</who>
    <bug_when>2012-04-03 13:44:02 -0700</bug_when>
    <thetext>Also curious about progress on this. Any updates?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604180</commentid>
    <comment_count>43</comment_count>
      <attachid>137568</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-04-17 11:34:31 -0700</bug_when>
    <thetext>Created attachment 137568
rebased to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604185</commentid>
    <comment_count>44</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-04-17 11:37:35 -0700</bug_when>
    <thetext>Hi Tony,

It seems that we can&apos;t get information about the mapping in near future, so I&apos;d like to use HarfBuzz-ng for now. Could you take another look for the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604188</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 11:39:13 -0700</bug_when>
    <thetext>Attachment 137568 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:39:  hb_face_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzFace.h:41:  hb_font_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 14 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>626647</commentid>
    <comment_count>46</comment_count>
      <attachid>137568</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-17 09:52:05 -0700</bug_when>
    <thetext>Comment on attachment 137568
rebased to ToT

The changes to FontComplexTextMac.cpp are unfortunate, but I can&apos;t think of a better way to do this.  If a future version of CoreText supports these OpenType features, I&apos;m sure bashi would be happy to convert this to CoreText so Apple Mac will also benefit.

bashi: Please watch the page cyclers when you land.  In particular, watch the intl1 and intl2 bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641089</commentid>
    <comment_count>47</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-06-04 18:31:41 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 137568 [details])
&gt; The changes to FontComplexTextMac.cpp are unfortunate, but I can&apos;t think of a better way to do this.  If a future version of CoreText supports these OpenType features, I&apos;m sure bashi would be happy to convert this to CoreText so Apple Mac will also benefit.
&gt; 
&gt; bashi: Please watch the page cyclers when you land.  In particular, watch the intl1 and intl2 bots.

Thanks. I&apos;m going to land the patch. I&apos;ll watch the page cyclers. I&apos;m happy to replace this with CoreText if we can implement the feature with a future version of CoreText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641090</commentid>
    <comment_count>48</comment_count>
      <attachid>145674</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-06-04 18:32:41 -0700</bug_when>
    <thetext>Created attachment 145674
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641279</commentid>
    <comment_count>49</comment_count>
      <attachid>145674</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 01:15:59 -0700</bug_when>
    <thetext>Comment on attachment 145674
Patch for landing

Clearing flags on attachment: 145674

Committed r119467: &lt;http://trac.webkit.org/changeset/119467&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641281</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 01:16:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641570</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-05 08:14:00 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 88332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641595</commentid>
    <comment_count>52</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-05 08:40:04 -0700</bug_when>
    <thetext>http://build.chromium.org/p/chromium/buildstatus?builder=Mac&amp;number=14990

RESULT Chromium: Chromium= 8728 bytes
RESULT Chromium-__TEXT: __TEXT= 4096 bytes
RESULT Chromium-__DATA: __DATA= 4096 bytes
RESULT Chromium-__OBJC: __OBJC= 0 bytes
RESULT ChromiumFramework: ChromiumFramework= 64977912 bytes
RESULT ChromiumFramework-__TEXT: __TEXT= 61120512 bytes
RESULT ChromiumFramework-__DATA: __DATA= 1794048 bytes
RESULT ChromiumFramework-__OBJC: __OBJC= 131072 bytes
RESULT Chromium.app: Chromium.app= 91017216 bytes
RESULT chrome-si: initializers= 28 files

program finished with exit code 0
elapsedTime=0.193812

http://build.chromium.org/p/chromium/builders/Mac/builds/14989/steps/sizes/logs/stdio

RESULT Chromium: Chromium= 8728 bytes
RESULT Chromium-__TEXT: __TEXT= 4096 bytes
RESULT Chromium-__DATA: __DATA= 4096 bytes
RESULT Chromium-__OBJC: __OBJC= 0 bytes
RESULT ChromiumFramework: ChromiumFramework= 64875308 bytes
RESULT ChromiumFramework-__TEXT: __TEXT= 61018112 bytes
RESULT ChromiumFramework-__DATA: __DATA= 1794048 bytes
RESULT ChromiumFramework-__OBJC: __OBJC= 131072 bytes
RESULT Chromium.app: Chromium.app= 90914816 bytes
RESULT chrome-si: initializers= 20 files

program finished with exit code 0
elapsedTime=0.066987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641596</commentid>
    <comment_count>53</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-05 08:40:25 -0700</bug_when>
    <thetext>http://build.chromium.org/f/chromium/perf/mac-release/sizes/report.html?history=150&amp;rev=-1&amp;graph=chrome-si</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641610</commentid>
    <comment_count>54</comment_count>
    <who name="Behdad Esfahbod">behdad</who>
    <bug_when>2012-06-05 08:58:01 -0700</bug_when>
    <thetext>I&apos;ll work on this upstream today to reduce those.  Would one be tolerated?  Though, perhaps I can make most of the initializers conditional on HB_NO_MT, such that NO_MT case does not use initializers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641683</commentid>
    <comment_count>55</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-06-05 10:24:19 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; I&apos;ll work on this upstream today to reduce those.  Would one be tolerated?

Can you give an example of something you can&apos;t put in a static function using a macro like DEFINE_STATIC_LOCAL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641962</commentid>
    <comment_count>56</comment_count>
    <who name="Behdad Esfahbod">behdad</who>
    <bug_when>2012-06-05 15:50:03 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; I&apos;ll work on this upstream today to reduce those.  Would one be tolerated?
&gt; 
&gt; Can you give an example of something you can&apos;t put in a static function using a macro like DEFINE_STATIC_LOCAL?

For various reasons HarfBuzz cannot link to libstdc++.  Static local variables with initializers need libstdc++ to do the thread-safe initialization.

No worries though, I fixed all but one already, and fixing the last one.  Tomorrow bashi can do a new roll that has zero initializers, lazy or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642949</commentid>
    <comment_count>57</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-06-06 16:50:43 -0700</bug_when>
    <thetext>Behdad fixed the problem on upstream so I&apos;d like to check whether the patch doesn&apos;t increase the number of static initializers. Does anyone know how can I do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642980</commentid>
    <comment_count>58</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-06-06 17:09:50 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; Behdad fixed the problem on upstream so I&apos;d like to check whether the patch doesn&apos;t increase the number of static initializers. Does anyone know how can I do it?

The script for getting the number of static initializers is at:
http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/chromium/sizes.py?view=log

You can run that on the chromium binary.  The bots step running the command is:
http://build.chromium.org/p/chromium/builders/Mac/builds/15045/steps/sizes/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647441</commentid>
    <comment_count>59</comment_count>
      <attachid>147183</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-06-12 16:07:07 -0700</bug_when>
    <thetext>Created attachment 147183
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647651</commentid>
    <comment_count>60</comment_count>
      <attachid>147183</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 21:32:46 -0700</bug_when>
    <thetext>Comment on attachment 147183
Patch for landing

Clearing flags on attachment: 147183

Committed r120156: &lt;http://trac.webkit.org/changeset/120156&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647652</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 21:32:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124271</attachid>
            <date>2012-01-27 01:06:04 -0800</date>
            <delta_ts>2012-01-29 18:11:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69826-20120127180602.patch</filename>
            <type>text/plain</type>
            <size>67122</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ4NmQzZWMxYWM5MWFl
MTY0NDViOWYwNDE1MjVlZGNiNzRhMTUyMi4uODE3YWVjMWM0OTY2NGZmODllMmFkNDMzNjNmYTY1
OTY1ZDNjYzhhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAxLTI3ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIEFkZCBIYXJmQnV6ei1uZyB0ZXh0IHNoYXBlci4KKyAgICAgICAgQ2hyb21pdW0g
bWFjIHBvcnQgdXNlcyBpdCBhcyBzZWNvbmRhcnkgdGV4dCBzaGFwZXIgdG8gc3VwcG9ydCAgT3Bl
blR5cGUgZmVhdHVyZXMuCisgICAgICAgIEhhcmZCdXp6LW5nIGlzIG9ubHkgdXNlZCB3aGVuIC13
ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzIGlzIHNwZWNpZmllZCBhbmQKKyAgICAgICAgY29y
cmVzcG9uZGluZyBmb250IGlzIG5vdCBhbiBBQVQgZm9udC4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIGNzczMvZm9udC1mZWF0
dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sIHNob3VsZCBwYXNzIG9uIENocm9taXVtIG1hYyBw
b3J0LgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZGVkIGhhcmZidXp6
LW5nIGRlcGVuZGVuY2llcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIGhhcmZidXp6
LW5nIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
aDoKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOiBBZGRlZCBtX2hhcmZidXp6RmFjZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KTog
Q29weSBtX2hhcmZidXp6RmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OnBsYXRmb3JtRGF0YUFzc2lnbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjppc0FBVEZvbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZidXp6RmFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6Q29yZVRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhIb3Jp
em9udGFsQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6cmVs
ZWFzZVRhYmxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNvcmVUZXh0R2V0VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpGYWNlQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpGYWNlOjp+SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJm
QnV6ekZhY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFyZmJ1enpQb3NpdGlvblRvRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6
SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJD
b3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVy
SW5kZXhGb3JYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFs
aXplU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXROb3JtYWxp
emVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNo
YXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNDb2RlcG9pbnRTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6elNoYXBlcjo6aXNXb3JkRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpzZXRQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpkZXRl
cm1pbmVXb3JkQnJlYWtTcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJmQnV6
elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNG
b3JIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6b2Zmc2V0
Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlv
blJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
U2hhcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6elNo
YXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6dG90YWxXaWR0aCk6Cisg
ICAgICAgIChIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
SGFyZkJ1enpSdW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
SGFyZkJ1enpSdW46OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpIYXJmQnV6elJ1bjo6bnVtQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6
elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUdseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6cnRsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlZmVySGFyZkJ1enopOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6IFVzZSBIYXJmQnV6elNoYXBlciBpZiBm
b250LWZlYXR1cmUtc2V0dGluZ3MgZXhpc3RzLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0NvbXBsZXhUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQpOiBEaXR0by4KKwogMjAxMi0wMS0yNiAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjEwNTQ4Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAK
aW5kZXggNjg4NGI0MWFmMWQxOWM5YzQ0NTdlZDAxN2M0YmE5MTFmMTgyNDhjNy4uOWM2YThjMzgw
NDhmNjFjODA1YmI0OWE3OTliYWQzYTg0MThkZDcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAKQEAgLTIxMiw2ICsyMTIsNyBAQAogICAgICAgICAgICcuLi9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMnLAogICAgICAgICAgICcuLi9wbGF0Zm9ybS9tYWMnLAogICAgICAgICAg
ICcuLi9wbGF0Zm9ybS90ZXh0L21hYycsCisgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nJywKICAgICAgICAgXSwKICAgICAgIH1dLAogICAgICAgWydPUz09Im1hYyIg
YW5kIHVzZV9za2lhPT0xJywgewpAQCAtMTU0MSw2ICsxNTQyLDcgQEAKICAgICAgICAgICBdLAog
ICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAnd2Via2l0X3N5c3RlbV9p
bnRlcmZhY2UnLAorICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwOmhhcmZidXp6LW5nJywKICAgICAgICAgICBdLAogICAg
ICAgICAgICdhY3Rpb25zJzogWwogICAgICAgICAgICAgewpAQCAtMTYyMSw2ICsxNjIzLDExIEBA
CiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lXFwu
Y3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
Tm9uZVxcLmgkJ10sCiAKKyAgICAgICAgICAgICMgTWFjIHVzZXMgSGFyZkJ1enotbmcuCisgICAg
ICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpDb3JlVGV4dFxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VcXC4oY3BwfGgpJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hh
cGVyXFwuKGNwcHxoKSQnXSwKKwogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9jaHJvbWUvanVu
a1xcLnR4dCQnXSwKICAgICAgICAgICBdLAogICAgICAgICB9LHsgIyBPUyE9Im1hYyIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBjNDJjZWIyYjBjZTZiMDk0ZDFkYmQyYmI3YzBmNjY0MjRjYzVmYmQzLi5j
NjY1ZmNiZDRkMjQwNmE2M2Y4ODUxYjlmNDMzMGU4NTIzMGJlY2RkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0zNDMyLDYgKzM0MzIsMTEgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6Q29yZVRleHQuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2Uu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpT
aGFwZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29s
b3JNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDcwNWM1ODg5NzE0NWRmOGIyYzJmYTQ0
Mjc3MDExZjg5MGUzNmU3ZmMuLjUwNGIzMTNhNDEzNGY5ODdlNTQ5ZTM1OTc4ZDUzMTI4NmE3ODFi
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmgKQEAgLTcyLDYgKzcyLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZv
bnQqIENURm9udFJlZjsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAj
aW5jbHVkZSAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIgIAorI2luY2x1ZGUgIkhhcmZCdXp6
RmFjZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0yMzYsNiArMjM3LDEwIEBA
IHB1YmxpYzoKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2FsZWRGb250OyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBPUyhEQVJXSU4pCisgICAgSGFyZkJ1enpGYWNlKiBoYXJmYnV6ekZhY2UoKTsKKyNlbmRpZgor
CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewogI2lmIFBMQVRGT1JNKFdJTikgJiYg
IVVTRShDQUlSTykKQEAgLTMzMiw2ICszMzcsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9udD4g
bV9pbk1lbW9yeUZvbnQ7CisgICAgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7
CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc0NvbG9yQml0bWFwRm9udDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQppbmRleCA3YjEzNjA4ODM0M2FlMDg0ZTJlNGFlNDA3YmJlMDg5YWQ4Njdj
NDc0Li44OGQzZjUyMDFiYTU2MTkzYjE1YmNjMzkzYmE1ZGRjYTk5NjI5NWY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC04NCw2ICs4NCw3IEBAIHZvaWQgRm9udFBsYXRmb3Jt
RGF0YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogCiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBtX2luTWVtb3J5Rm9udCA9IGYu
bV9pbk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBmLm1faGFyZmJ1enpGYWNlOwog
I2VuZGlmCiB9CiAKQEAgLTEwMCw2ICsxMDEsNyBAQCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBG
b250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRAog
ICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1Mo
REFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsKKyAgICBtX2hh
cmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKICAgICByZXR1cm4gKnRoaXM7
CiB9CkBAIC0yNzYsNiArMjc4LDM3IEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZv
bnQoKSBjb25zdAogICAgIHJldHVybiBtX0NURm9udC5nZXQoKTsKIH0KIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCitzdGF0aWMgYm9vbCBpc0FBVEZvbnQoQ1RGb250UmVm
IGN0Rm9udCkKK3sKKyAgICBDRkRhdGFSZWYgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250
LCBrQ1RGb250VGFibGVNb3J0LCBrQ1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJs
ZSkgeworICAgICAgICBDRlJlbGVhc2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCBrQ1RGb250VGFibGVNb3J4
LCBrQ1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJsZSkgeworICAgICAgICBDRlJl
bGVhc2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitIYXJmQnV6ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgp
Cit7CisgICAgQ1RGb250UmVmIGZvbnQgPSBjdEZvbnQoKTsKKyAgICAvLyBIYXJmQnV6eiBjYW4n
dCBoYW5kbGUgQUFUIGZvbnQKKyAgICBpZiAoaXNBQVRGb250KGZvbnQpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmICghbV9oYXJmYnV6ekZhY2UpIHsKKyAgICAgICAgdWludDY0X3QgdW5p
cXVlSUQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZm9udCk7CisgICAgICAgIG1faGFy
ZmJ1enpGYWNlID0gSGFyZkJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1E
YXRhKj4odGhpcyksIHVuaXF1ZUlEKTsKKyAgICB9CisgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNl
LmdldCgpOworfQorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiBTdHJpbmcgRm9udFBsYXRmb3Jt
RGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpDb3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekNvcmVUZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hOTVhNGM1NjQyOTRjMjVmZWMzMDNmMTZjMmQ3ZmQzMjgyZjNkNjBh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3JlVGV4dC9Db3JlVGV4dC5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKKyNpbmNsdWRlICJI
YXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRl
ICJoYi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGZs
b2F0VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30KKworc3RhdGljIGhi
X2Jvb2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2Nv
ZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9j
b2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZv
bnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9u
dCgpOworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAgICBDR0dseXBoIGNnR2x5cGhzWzRd
OworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0
ZXJzKGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxlbmd0aCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250
X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR0dseXBoIGNnR2x5cGgg
PSBnbHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBo
cyhjdEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZjZ0dseXBoLCAwLCAxKTsK
KyAgICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oYWR2YW5jZSk7Cit9CisKK3N0YXRp
YyBoYl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2
b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhi
X3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9p
ZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4
dGVudHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVy
cHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIENH
UmVjdCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7CisgICAgaWYgKENURm9u
dEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0
aW9uLCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0TnVsbCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9u
KGNnUmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gLWZsb2F0VG9IYXJm
QnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAgZXh0ZW50cy0+d2lkdGggPSBmbG9h
dFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0aCk7CisgICAgZXh0ZW50cy0+aGVp
Z2h0ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4
dEdldEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpD
b3JlVGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhhcmZidXp6Q29yZVRleHRGb250RnVu
Y3MpIHsKKyAgICAgICAgaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3Nf
Y3JlYXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZmJ1enpD
b3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRH
bHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRf
Z2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhv
cml6b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9l
eHRlbnRzX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhFeHRlbnRzLCAw
LCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmYnV6ekNvcmVU
ZXh0Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZidXp6Q29yZVRleHRGb250RnVu
Y3M7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURhdGEodm9pZCogdXNlckRhdGEpCit7
CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPih1c2Vy
RGF0YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhh
cmZidXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9p
ZCogdXNlckRhdGEpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odXNlckRhdGEpOworICAgIENURm9udFJl
ZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEtPmN0Rm9udCgpOworICAgIENGRGF0YVJlZiBjZkRhdGEg
PSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCB0YWcsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9u
cyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hh
ciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIo
Y2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChjZkRh
dGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9NRU1PUllfTU9ERV9SRUFET05M
WSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxfX0NGRGF0YSo+KGNmRGF0YSkp
LCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNyZWF0
ZUZhY2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJs
ZXMoaGFyZmJ1enpDb3JlVGV4dEdldFRhYmxlLCBtX3BsYXRmb3JtRGF0YSwgMCk7CisgICAgQVNT
RVJUKGZhY2UpOworICAgIHJldHVybiBmYWNlOworfQorCitoYl9mb250X3QqIEhhcmZCdXp6RmFj
ZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUo
bV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6ekNvcmVUZXh0R2V0
Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBjb25zdCBmbG9hdCBzaXplID0g
bV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKKyAgICBoYl9mb250X3NldF9wcGVtKGZvbnQsIHNpemUs
IHNpemUpOworICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8IDE2KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKKyAg
ICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVybiBmb250OworfQorCitH
bHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5j
ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVybiBDR1NpemVNYWtlKHdp
ZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpGYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWRkYmFiYjIyYmRhOTY3N2E1NTg3MTBhNTE3OTJmYjVi
YWExNDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgorCisjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xh
c3MsIHdoaWNoIHByb3ZpZGVzIHRoZSBjYWNoZSBtZWNoYW5pc20gZm9yCisvLyBXZWJLaXQncyBm
b250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhh
cmZCdXp6CisvLyB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2Zh
Y2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCisvLyB1bmRlcmxpbmcgZm9udCBkYXRhIChl
LmcuIENURm9udFJlZiwgRlRGYWNlKS4KK3R5cGVkZWYgcGFpcjxoYl9mYWNlX3QqLCB1bnNpZ25l
ZD4gRmFjZUNhY2hlRW50cnk7Cit0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEZhY2VDYWNoZUVu
dHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6RmFjZUNhY2hlOworCitzdGF0aWMgSGFyZkJ1enpG
YWNlQ2FjaGUqIGhhcmZidXp6RmFjZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEhhcmZCdXp6RmFjZUNhY2hlLCBzX2hhcmZidXp6RmFjZUNhY2hlLCAoKSk7CisgICAgcmV0dXJu
ICZzX2hhcmZidXp6RmFjZUNhY2hlOworfQorCitIYXJmQnV6ekZhY2U6OkhhcmZCdXp6RmFjZShG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAgIDog
bV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQorICAgICwgbV91bmlxdWVJRCh1bmlxdWVJRCkK
K3sKKyAgICBIYXJmQnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNl
Q2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKKyAgICBpZiAocmVzdWx0ID09IGhhcmZidXp6RmFj
ZUNhY2hlKCktPmVuZCgpKSB7CisgICAgICAgIG1fZmFjZSA9IGNyZWF0ZUZhY2UoKTsKKyAgICAg
ICAgQVNTRVJUKG1fZmFjZSk7CisgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnNldChtX3Vu
aXF1ZUlELCBGYWNlQ2FjaGVFbnRyeShtX2ZhY2UsIDEpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOworICAgICAgICBtX2ZhY2UgPSByZXN1
bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICB9Cit9CisKK0hhcmZCdXp6RmFjZTo6fkhhcmZC
dXp6RmFjZSgpCit7CisgICAgSGFyZkJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhh
cmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJRCk7CisgICAgQVNTRVJUKHJlc3VsdCAh
PSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+
c2Vjb25kLnNlY29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7
CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSkgeworICAgICAgICBoYl9m
YWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgICAgICBoYXJmYnV6
ekZhY2VDYWNoZSgpLT5yZW1vdmUobV91bmlxdWVJRCk7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYzI2YjFiMWYy
MGMzZmZhNzliODhmYjY4ZDk5Y2FkNzkyZjQ4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaApAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6ekZhY2VfaAorI2RlZmluZSBIYXJmQnV6ekZhY2Vf
aAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IF9oYl9mYWNlX3Q7Cit0eXBl
ZGVmIF9oYl9mYWNlX3QgaGJfZmFjZV90Oworc3RydWN0IF9oYl9mb250X3Q7Cit0eXBlZGVmIF9o
Yl9mb250X3QgaGJfZm9udF90OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQ
bGF0Zm9ybURhdGE7CisKK2NsYXNzIEhhcmZCdXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhh
cmZCdXp6RmFjZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZCdXp6RmFj
ZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVl
SUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhcmZCdXp6RmFjZShwbGF0
Zm9ybURhdGEsIHVuaXF1ZUlEKSk7CisgICAgfQorICAgIH5IYXJmQnV6ekZhY2UoKTsKKworICAg
IGhiX2ZvbnRfdCogY3JlYXRlRm9udCgpOworCitwcml2YXRlOgorICAgIEhhcmZCdXp6RmFjZShG
b250UGxhdGZvcm1EYXRhKiwgdWludDY0X3QpOworCisgICAgaGJfZmFjZV90KiBjcmVhdGVGYWNl
KCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKKyAgICB1aW50NjRf
dCBtX3VuaXF1ZUlEOworICAgIGhiX2ZhY2VfdCogbV9mYWNlOworfTsKKworfQorCisjZW5kaWYg
Ly8gSGFyZkJ1enpGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMmY4YTgxYzVhN2NhZDFlYjQ4Y2I4MTBkMzM3OWQ3Yjc3MjNlYTM0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpTaGFwZXIuY3BwCkBAIC0wLDAgKzEsNDc4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiU3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2lu
Y2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQo
aGJfcG9zaXRpb25fdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bHVlKSAvICgxIDw8IDE2KTsKK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJm
QnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
aGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQorICAgIDogbV9udW1DaGFyYWN0ZXJzKG51bUNo
YXJhY3RlcnMpCisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCit7CisgICAgbV9udW1HbHlw
aHMgPSBoYl9idWZmZXJfZ2V0X2xlbmd0aChoYXJmYnV6ekJ1ZmZlcik7CisgICAgbV9nbHlwaHMu
cmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBtX2FkdmFuY2VzLnJlc2l6ZShtX251bUdseXBocyk7
CisgICAgbV9vZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9nbHlwaFRvQ2hhcmFj
dGVySW5kZXgucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBtX2xvZ0NsdXN0ZXJzLnJlc2l6ZSht
X251bUNoYXJhY3RlcnMpOworCisgICAgaGJfZ2x5cGhfaW5mb190KiBpbmZvcyA9IGhiX2J1ZmZl
cl9nZXRfZ2x5cGhfaW5mb3MoaGFyZmJ1enpCdWZmZXIsIDApOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX251bUdseXBoczsgKytpKQorICAgICAgICBtX2dseXBoVG9DaGFyYWN0ZXJJ
bmRleFtpXSA9IGluZm9zW2ldLmNsdXN0ZXI7CisKKyAgICAvLyBGaWxsIGxvZ2ljYWwgY2x1c3Rl
cnMKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgbV9udW1HbHlw
aHMpIHsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gaW5kZXggKyAxOworICAgICAgICB3
aGlsZSAobmV4dEluZGV4IDwgbV9udW1HbHlwaHMgJiYgaW5mb3NbaW5kZXhdLmNsdXN0ZXIgPT0g
aW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyKQorICAgICAgICAgICAgKytuZXh0SW5kZXg7CisgICAg
ICAgIGlmIChydGwoKSkgeworICAgICAgICAgICAgaW50IG5leHRDbHVzdGVyID0gbmV4dEluZGV4
IDwgbV9udW1HbHlwaHMgPyBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIgOiAtMTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGogPSBpbmZvc1tpbmRleF0uY2x1c3RlcjsgaiA+IG5leHRDbHVzdGVyOyAt
LWopCisgICAgICAgICAgICAgICAgbV9sb2dDbHVzdGVyc1tqXSA9IGluZGV4OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgbmV4dENsdXN0ZXIgPSBuZXh0SW5kZXggPCBt
X251bUdseXBocyA/IGluZm9zW25leHRJbmRleF0uY2x1c3RlciA6IG1fbnVtQ2hhcmFjdGVyczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqIDwg
bmV4dENsdXN0ZXI7ICsraikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5k
ZXg7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBuZXh0SW5kZXg7CisgICAgfQorfQorCit2
b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6c2V0R2x5cGhBbmRQb3NpdGlvbnModW5z
aWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGFk
dmFuY2UpCit7CisgICAgbV9nbHlwaHNbaW5kZXhdID0gZ2x5cGhJZDsKKyAgICBtX29mZnNldHNb
aW5kZXhdLnNldCh4LCB5KTsKKyAgICBtX2FkdmFuY2VzW2luZGV4XSA9IGFkdmFuY2U7Cit9CisK
K2ludCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0
aW9uKGludCB0YXJnZXRYKQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFy
Z2V0WCkgPD0gbV93aWR0aCk7CisgICAgaW50IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBwcmV2
QWR2YW5jZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyAr
K2kpIHsKKyAgICAgICAgZmxvYXQgY3VycmVudEFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldIC8gMi4w
OworICAgICAgICBpbnQgbmV4dFggPSBjdXJyZW50WCArIHJvdW5kZihwcmV2QWR2YW5jZSArIGN1
cnJlbnRBZHZhbmNlKTsKKyAgICAgICAgaWYgKGN1cnJlbnRYIDw9IHRhcmdldFggJiYgdGFyZ2V0
WCA8PSBuZXh0WCkKKyAgICAgICAgICAgIHJldHVybiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleFtp
XSArIChydGwoKSA/IDEgOiAwKTsKKyAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAg
cHJldkFkdmFuY2UgPSBjdXJyZW50QWR2YW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRsKCkg
PyAwIDogbV9udW1DaGFyYWN0ZXJzOworfQorCitpbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQoreworICAgIEFTU0VSVChv
ZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOworICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSBtX2xv
Z0NsdXN0ZXJzW29mZnNldF07CisgICAgQVNTRVJUKGdseXBoSW5kZXggPCBtX251bUdseXBocyk7
CisgICAgZmxvYXQgcG9zaXRpb24gPSBtX29mZnNldHNbZ2x5cGhJbmRleF0ueCgpOworICAgIGlm
IChydGwoKSkKKyAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tnbHlwaEluZGV4XTsKKyAg
ICByZXR1cm4gcm91bmRmKHBvc2l0aW9uKTsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplU3Bh
Y2VzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkK
K3sKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICAv
LyBJdGVyYXRlIGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlmIG5l
ZWRlZC4KKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKKyAgICAgICAgVUNoYXIzMiBj
aGFyYWN0ZXI7CisgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAg
VTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICAg
ICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hhcmFj
dGVyID0gJyAnOworICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2Uo
Y2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOworICAg
ICAgICBVMTZfQVBQRU5EKGRlc3RpbmF0aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIs
IGVycm9yKTsKKyAgICAgICAgQVNTRVJUKCFlcnJvcik7CisgICAgICAgIHBvc2l0aW9uID0gbmV4
dFBvc2l0aW9uOworICAgIH0KK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Tm9ybWFsaXpl
ZEJ1ZmZlcigpCit7CisgICAgLy8gTm9ybWFsaXplIHRoZSB0ZXh0IHJ1biBpbiB0d28gd2F5czoK
KyAgICAvLyAxKSBDb252ZXJ0IHRoZSB8b3JpZ2luYWxSdW58IHRvIE5GQyBub3JtYWxpemVkIGZv
cm0gaWYgY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzCisgICAgLy8gKFUrMDMwMC4uKSBhcmUg
dXNlZCBpbiB0aGUgcnVuLiBUaGlzIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5IHNpbmNlIG1vc3Qg
T3BlblR5cGUKKyAgICAvLyBmb250cyAoZS5nLiwgQXJpYWwpIGRvbid0IGhhdmUgc3Vic3RpdHV0
aW9uIHJ1bGVzIGZvciB0aGUgZGlhY3JpdGljYWwgbWFya3MgaW4KKyAgICAvLyB0aGVpciBHU1VC
IHRhYmxlcy4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIGljdTo6
Tm9ybWFsaXplcjo6aXNOb3JtYWxpemVkKFVOT1JNX05GQykgQVBJIGhlcmUgc2luY2UKKyAgICAv
LyB0aGUgQVBJIHJldHVybnMgRkFMU0UgKD0gbm90IG5vcm1hbGl6ZWQpIGZvciBjb21wbGV4IHJ1
bnMgdGhhdCBkb24ndCByZXF1aXJlIE5GQworICAgIC8vIG5vcm1hbGl6YXRpb24gKGUuZy4sIEFy
YWJpYyB0ZXh0KS4gVW5sZXNzIHRoZSBydW4gY29udGFpbnMgdGhlIGRpYWNyaXRpY2FsIG1hcmtz
LAorICAgIC8vIEhhcmZCdXp6IHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcgZm9yIHVzIHVzaW5nIHRo
ZSBHU1VCIHRhYmxlLgorICAgIC8vIDIpIENvbnZlcnQgc3BhY2luZyBjaGFyYWN0ZXJzIGludG8g
cGxhaW4gc3BhY2VzLCBhcyBzb21lIGZvbnRzIHdpbGwgcHJvdmlkZSBnbHlwaHMKKyAgICAvLyBm
b3IgY2hhcmFjdGVycyBsaWtlICdcbicgb3RoZXJ3aXNlLgorCisgICAgLy8gQ29udmVydCB0byBO
RkMgZm9ybSBpZiB0aGUgdGV4dCBoYXMgZGlhY3JpdGljYWwgbWFya3MuCisgICAgaWN1OjpVbmlj
b2RlU3RyaW5nIG5vcm1hbGl6ZWRTdHJpbmc7CisgICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVS
T19FUlJPUjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ydW4ubGVuZ3RoKCk7ICsraSkg
eworICAgICAgICBVQ2hhciBjaCA9IG1fcnVuW2ldOworICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0
Q29kZShjaCkgPT0gVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgeworICAgICAg
ICAgICAgaWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG1fcnVu
LmNoYXJhY3RlcnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cnVuLmxlbmd0aCgpKSwgVU5PUk1fTkZDLCAwIC8qIG5vIG9wdGlvbnMgKi8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3RyaW5nLCBlcnJvcik7Cisg
ICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKKyAgICAgICAgICAgICAgICBub3JtYWxp
emVkU3RyaW5nLnJlbW92ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBOb3JtYWxpemUgc3BhY2VzLgorICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VUZXh0
OworICAgIGlmIChub3JtYWxpemVkU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBtX25vcm1h
bGl6ZWRCdWZmZXJMZW5ndGggPSBtX3J1bi5sZW5ndGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9
IG1fcnVuLmNoYXJhY3RlcnMoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25vcm1hbGl6ZWRC
dWZmZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5nLmxlbmd0aCgpOworICAgICAgICBzb3VyY2VU
ZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKKyAgICB9CisKKyAgICBtX25vcm1h
bGl6ZWRCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhclttX25vcm1hbGl6ZWRCdWZmZXJM
ZW5ndGggKyAxXSk7CisgICAgbm9ybWFsaXplU3BhY2VzKHNvdXJjZVRleHQsIG1fbm9ybWFsaXpl
ZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKK30KKworSGFyZkJ1enpT
aGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
bikKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9ydW4ocnVuKQorICAgICwgbV9zdGFydElu
ZGV4T2ZDdXJyZW50UnVuKDApCisgICAgLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4oMCkK
KyAgICAsIG1faGFyZmJ1enpCdWZmZXIoMCkKKyAgICAsIG1fd29yZFNwYWNpbmdBZGp1c3RtZW50
KGZvbnQtPndvcmRTcGFjaW5nKCkpCisgICAgLCBtX2xldHRlclNwYWNpbmcoZm9udC0+bGV0dGVy
U3BhY2luZygpKQoreworICAgIHNldE5vcm1hbGl6ZWRCdWZmZXIoKTsKKyAgICBzZXRGb250RmVh
dHVyZXMoKTsKKyAgICBzZXRQYWRkaW5nKHJ1bi5leHBhbnNpb24oKSk7Cit9CisKK0hhcmZCdXp6
U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIoKQoreworICAgIGlmIChtX2hhcmZidXp6QnVmZmVyKQor
ICAgICAgICBoYl9idWZmZXJfZGVzdHJveShtX2hhcmZidXp6QnVmZmVyKTsKK30KKwordm9pZCBI
YXJmQnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1cmVzKCkKK3sKKyAgICBGb250RmVhdHVyZVNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCkuZmVhdHVyZVNldHRpbmdz
KCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQg
bnVtRmVhdHVyZXMgPSBzZXR0aW5ncy0+c2l6ZSgpOworICAgIG1fZmVhdHVyZXMucmVzaXplKG51
bUZlYXR1cmVzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsr
aSkgeworICAgICAgICBjb25zdCBVQ2hhciogdGFnID0gc2V0dGluZ3MtPmF0KGkpLnRhZygpLmNo
YXJhY3RlcnMoKTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS50YWcgPSBIQl9UQUcodGFnWzBdLCB0
YWdbMV0sIHRhZ1syXSwgdGFnWzNdKTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS52YWx1ZSA9IHNl
dHRpbmdzLT5hdChpKS52YWx1ZSgpOworICAgICAgICBtX2ZlYXR1cmVzW2ldLnN0YXJ0ID0gMDsK
KyAgICAgICAgbV9mZWF0dXJlc1tpXS5lbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpOwor
ICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNDb2RlcG9pbnRTcGFjZShVQ2hhciBjaGFyYWN0ZXIp
Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCc7Cit9
CisKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6OmlzV29yZEVuZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAg
ICAvLyBUaGlzIGNvdWxkIHJlZmVyIGEgaGlnaC1zdXJyb2dhdGUsIGJ1dCBzaG91bGQgd29yay4K
KyAgICByZXR1cm4gaW5kZXggJiYgaXNDb2RlcG9pbnRTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJb
aW5kZXhdKSAmJiAhaXNDb2RlcG9pbnRTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbaW5kZXggLSAx
XSk7Cit9CisKKy8vIHNldFBhZGRpbmcgc2V0cyBhIG51bWJlciBvZiBwaXhlbHMgdG8gYmUgZGlz
dHJpYnV0ZWQgYWNyb3NzIHRoZSBUZXh0UnVuLgorLy8gV2ViS2l0IHVzZXMgdGhpcyB0byBqdXN0
aWZ5IHRleHQuCit2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRQYWRkaW5nKGludCBwYWRkaW5nKQor
eworICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7CisgICAgbV9wYWRFcnJvciA9IDA7CisgICAgaWYg
KCFtX3BhZGRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHdlIGhhdmUgcGFkZGlu
ZyB0byBkaXN0cmlidXRlLCB0aGVuIHdlIHRyeSB0byBnaXZlIGFuIGVxdWFsCisgICAgLy8gYW1v
dW50IHRvIGVhY2ggc3BhY2UuIFRoZSBsYXN0IHNwYWNlIGdldHMgdGhlIHNtYWxsZXIgYW1vdW50
LCBpZgorICAgIC8vIGFueS4KKyAgICB1bnNpZ25lZCBudW1Xb3JkRW5kcyA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGlzV29yZEVuZChpKSkKKyAgICAgICAgICAgIG51bVdvcmRFbmRzKys7Cisg
ICAgfQorCisgICAgaWYgKG51bVdvcmRFbmRzKQorICAgICAgICBtX3BhZFBlcldvcmRCcmVhayA9
IG1fcGFkZGluZyAvIG51bVdvcmRFbmRzOworICAgIGVsc2UKKyAgICAgICAgbV9wYWRQZXJXb3Jk
QnJlYWsgPSAwOworfQorCitpbnQgSGFyZkJ1enpTaGFwZXI6OmRldGVybWluZVdvcmRCcmVha1Nw
YWNpbmcoKQoreworICAgIGludCB3b3JkQnJlYWtTcGFjaW5nID0gbV93b3JkU3BhY2luZ0FkanVz
dG1lbnQ7CisKKyAgICBpZiAobV9wYWRkaW5nID4gMCkgeworICAgICAgICBpbnQgdG9QYWQgPSBy
b3VuZGYobV9wYWRQZXJXb3JkQnJlYWsgKyBtX3BhZEVycm9yKTsKKyAgICAgICAgbV9wYWRFcnJv
ciArPSBtX3BhZFBlcldvcmRCcmVhayAtIHRvUGFkOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
cGFkZGluZyA8IHRvUGFkKQorICAgICAgICAgICAgdG9QYWQgPSBtX3BhZGRpbmc7CisgICAgICAg
IG1fcGFkZGluZyAtPSB0b1BhZDsKKyAgICAgICAgd29yZEJyZWFrU3BhY2luZyArPSB0b1BhZDsK
KyAgICB9CisgICAgcmV0dXJuIHdvcmRCcmVha1NwYWNpbmc7Cit9CisKK2Jvb2wgSGFyZkJ1enpT
aGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBtX3RvdGFsV2lk
dGggPSAwOworICAgIHdoaWxlIChzZXR1cEhhcmZCdXp6UnVuKCkpIHsKKyAgICAgICAgaWYgKCFz
aGFwZUhhcmZCdXp6UnVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNl
dEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIpOworICAgIH0KKworICAg
IGlmICghbV9oYXJmYnV6elJ1bnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJmQnV6elJ1
bigpCit7CisgICAgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuICs9IG1fbnVtQ2hhcmFjdGVyc09m
Q3VycmVudFJ1bjsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdGV4dCB0byB0YWtlIHRo
ZSBsYXJnZXN0IHJhbmdlIHRoYXQgc3RheXMgd2l0aGluCisgICAgLy8gYSBzaW5nbGUgZm9udC4K
KyAgICBpbnQgZW5kT2ZSdW5JbmRleCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCAtIG1fc3Rh
cnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Ig
aXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50
UnVuLCAwLCBlbmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKKyAgICBVQ2hhcjMyIGNoYXJh
Y3RlcjsKKyAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICBpZiAoIWl0ZXJhdG9y
LmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9
IFVfWkVST19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNjcmlwdF9n
ZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJFKGVycm9y
Q29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBV
U0NSSVBUX0lOSEVSSVRFRCkKKyAgICAgICAgY3VycmVudFNjcmlwdCA9IFVTQ1JJUFRfQ09NTU9O
OworICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuY29u
c3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJM
ZW5ndGgpKSB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBt
X2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsK
KyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRT
Y3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJv
ckNvZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY3VycmVudFNj
cmlwdCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQgfHwg
bmV4dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAgICAgIGN1
cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisgICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0b3IuY3Vy
cmVudENoYXJhY3RlcigpOworCisgICAgaWYgKCFtX2hhcmZidXp6QnVmZmVyKSB7CisgICAgICAg
IG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7CisgICAgICAgIGhiX2J1ZmZl
cl9zZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3VfZ2V0X3VuaWNvZGVf
ZnVuY3MoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9yZXNldChtX2hhcmZidXp6
QnVmZmVyKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6QnVmZmVyLCBoYl9p
Y3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7CisKKyAgICAvLyBXZWJLaXQgYWx3
YXlzIHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3VsYXRpb24uCisgICAg
Ly8gV2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0
IHRvIFJUTCBzbyB0aGF0CisgICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRoIGNhbGN1bGF0aW9u
LgorICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24o
bV9oYXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7CisKKyAgICAvLyBEZXRlcm1pbmUg
d2hldGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KKyAg
ICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2Ft
ZSBjYXNlLCBiZWNhdXNlIGEKKyAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBz
IG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50CisgICAgLy8gRm9udERhdGEsIHNvIHdl
IG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KKyAgICBpZiAo
bV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZmZXJbbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKKyAgICAgICAgU3RyaW5nIHVwcGVyVGV4dCA9IFN0
cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4s
IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgICAgIHVwcGVyVGV4dC5tYWtlVXBw
ZXIoKTsKKyAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250RGF0YTsK
KyAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVyLCB1cHBlclRleHQu
Y2hhcmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVtQ2hhcmFj
dGVyc09mQ3VycmVudFJ1bik7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRm
MTYobV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydElu
ZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVtQ2hh
cmFjdGVyc09mQ3VycmVudFJ1bik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYXJm
QnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bigpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJm1fY3VycmVudEZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0gcGxhdGZv
cm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBoYl9mb250X3QqIGhhcmZidXp6Rm9udCA9IGZhY2UtPmNyZWF0ZUZvbnQoKTsK
KyAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQsIG1faGFyZmJ1enpCdWZmZXIsIG1fZmVhdHVyZXMu
c2l6ZSgpID4gMCA/IG1fZmVhdHVyZXMuZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXplKCkpOwor
ICAgIGhiX2ZvbnRfZGVzdHJveShoYXJmYnV6ekZvbnQpOworICAgIG1faGFyZmJ1enpSdW5zLmFw
cGVuZChIYXJmQnV6elJ1bjo6Y3JlYXRlKG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgbV9y
dW4uZGlyZWN0aW9uKCksIG1faGFyZmJ1enpCdWZmZXIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgaGJfZ2x5cGhfaW5mb190KiBnbHlwaElu
Zm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhtX2hhcmZidXp6QnVmZmVyLCAwKTsKKyAg
ICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9nZXRfZ2x5
cGhfcG9zaXRpb25zKG1faGFyZmJ1enpCdWZmZXIsIDApOworICAgIEhhcmZCdXp6UnVuKiBjdXJy
ZW50UnVuID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLmdldCgpOworCisgICAgdW5zaWduZWQgbnVt
R2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgZmxvYXQgdG90YWxBZHZhbmNl
ID0gMDsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGds
eXBoUG9zaXRpb25zWzBdLnhfb2Zmc2V0KTsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WSA9IC1oYXJm
YnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1swXS55X29mZnNldCk7CisgICAgLy8g
SGFyZkJ1enogcmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVyLiBXZSBu
ZWVkIG5vdCB0byBmbGlwIHRoZW0gZm9yIFJUTC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0gbnVtR2x5
cGhzOworICAgICAgICB1aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBvaW50Owor
ICAgICAgICBmbG9hdCBvZmZzZXRYID0gbmV4dE9mZnNldFg7CisgICAgICAgIGZsb2F0IG9mZnNl
dFkgPSBuZXh0T2Zmc2V0WTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZidXp6UG9zaXRp
b25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7CisgICAgICAgIG5leHRPZmZz
ZXRYID0gcnVuRW5kID8gMCA6IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25z
W2kgKyAxXS54X29mZnNldCk7CisgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8gMCA6IC1o
YXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZzZXQpOwor
CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJbmRleE9m
Q3VycmVudFJ1biArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBpc0NsdXN0
ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSAr
IDFdLmNsdXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSBpc0NsdXN0ZXJFbmQgPyBtX2xl
dHRlclNwYWNpbmcgOiAwOworCisgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNXb3JkRW5k
KGN1cnJlbnRDaGFyYWN0ZXJJbmRleCkpCisgICAgICAgICAgICBzcGFjaW5nICs9IGRldGVybWlu
ZVdvcmRCcmVha1NwYWNpbmcoKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9udERhdGEtPmlz
WmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRSdW4tPnNl
dEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChn
bHlwaEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBtX2N1
cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAsIDApKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSArPSBzcGFjaW5nOwor
ICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgdG90YWxB
ZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisgICAgICAgIGlmIChnbHlwaEJ1
ZmZlcikgeworICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWCA9IGFkdmFuY2UgKyBuZXh0
T2Zmc2V0WCAtIG9mZnNldFg7CisgICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VZID0gbmV4
dE9mZnNldFkgLSBvZmZzZXRZOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwg
bV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFkdmFuY2VY
LCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbEFkdmFuY2UgKz0g
YWR2YW5jZTsKKyAgICB9CisgICAgY3VycmVudFJ1bi0+c2V0V2lkdGgodG90YWxBZHZhbmNlID4g
MC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsKKyAgICBtX3RvdGFsV2lkdGggKz0gY3VycmVudFJ1
bi0+d2lkdGgoKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlvbihm
bG9hdCB0YXJnZXRYKQoreworICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOworICAgIGludCBj
dXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hhcmFjdGVy
c1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGludCBpID0g
bV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGNo
YXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAg
ICAgICAgICAgaW50IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgo
KTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4
dFgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRo
aW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4
ID0gbV9oYXJmYnV6elJ1bnNbaV0tPmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKHRhcmdldFgg
LSBjdXJyZW50WCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0ZhciArIGlu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hh
cmZidXp6UnVucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG5leHRYID0gY3VycmVu
dFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRleEZvclhQ
b3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgpOworICAgICAgICAgICAgICAgIHJldHVybiBjaGFy
YWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXJhY3Rl
cnNTb0ZhciArPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAgICAgICAg
ICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjaGFy
YWN0ZXJzU29GYXI7Cit9CisKK0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVj
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykK
K3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CisgICAgaW50IGN1cnJlbnRYID0gMDsK
KyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIs
IHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hhcmZidXp6UnVucy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFyZmJ1enpSdW5zW2ldLT5udW1D
aGFyYWN0ZXJzKCk7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgZnJv
bSA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBmcm9tWCA9IG1faGFyZmJ1enpSdW5zW2ld
LT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICh0b1ggPT0gLTEg
JiYgdG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICB0b1ggPSBtX2hh
cmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmIChm
cm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3Vy
cmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAgLy8gVGhl
IHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQuCisgICAg
aWYgKGZyb21YID09IC0xKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKHRvWCA9PSAtMSkK
KyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisgICAgQVNT
RVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJvbVggPCB0b1gpCisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9Y
IC0gZnJvbVgsIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gs
IHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxMjZlZmFmNzE3NDlk
NTc4NDVmMmMxYzQ5ZjI3MjM5ZmRjYTI1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6elNoYXBlcl9oCisjZGVmaW5lIEhhcmZCdXp6U2hh
cGVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHVuaWNv
ZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udDsKK2NsYXNzIFNp
bXBsZUZvbnREYXRhOworCitjbGFzcyBIYXJmQnV6elNoYXBlciB7CitwdWJsaWM6CisgICAgSGFy
ZkJ1enpTaGFwZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mKTsKKyAgICB+SGFyZkJ1enpT
aGFwZXIoKTsKKworICAgIGJvb2wgc2hhcGUoR2x5cGhCdWZmZXIqID0gMCk7CisgICAgZmxvYXQg
dG90YWxXaWR0aCgpIHsgcmV0dXJuIG1fdG90YWxXaWR0aDsgfQorICAgIGludCBvZmZzZXRGb3JQ
b3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25z
dCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0byk7CisKK3ByaXZhdGU6
CisgICAgY2xhc3MgSGFyZkJ1enpSdW4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NPd25QdHI8SGFyZkJ1enpSdW4+IGNyZWF0ZSh1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3QqIGJ1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIYXJmQnV6elJ1bihudW1DaGFyYWN0ZXJzLCBk
aXJlY3Rpb24sIGJ1ZmZlcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRHbHlwaEFu
ZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQpOworICAgICAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lk
dGggPSB3aWR0aDsgfQorCisgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihp
bnQgdGFyZ2V0WCk7CisgICAgICAgIGludCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zm
c2V0KTsKKworICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1DaGFyYWN0ZXJzOyB9CisgICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtR2x5cGhzOyB9CisgICAgICAgIGZsb2F0IHdpZHRoKCkgeyByZXR1cm4gbV93
aWR0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFyZkJ1enpSdW4odW5zaWduZWQgbnVt
Q2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiwgaGJfYnVmZmVyX3QqKTsKKyAgICAgICAgYm9vbCBy
dGwoKSB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBSVEw7IH0KKworICAgICAgICBzaXplX3QgbV9u
dW1DaGFyYWN0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUdseXBoczsKKyAgICAgICAgVGV4
dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1f
Z2x5cGhzOworICAgICAgICBWZWN0b3I8ZmxvYXQsIDI1Nj4gbV9hZHZhbmNlczsKKyAgICAgICAg
VmVjdG9yPEZsb2F0UG9pbnQsIDI1Nj4gbV9vZmZzZXRzOworICAgICAgICBWZWN0b3I8dWludDE2
X3QsIDI1Nj4gbV9sb2dDbHVzdGVyczsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1f
Z2x5cGhUb0NoYXJhY3RlckluZGV4OworICAgICAgICBmbG9hdCBtX3dpZHRoOworICAgIH07CisK
KyAgICB2b2lkIHNldE5vcm1hbGl6ZWRCdWZmZXIoKTsKKyAgICB2b2lkIHNldEZvbnRGZWF0dXJl
cygpOworICAgIGJvb2wgaXNXb3JkRW5kKHVuc2lnbmVkIGluZGV4KTsKKyAgICBpbnQgZGV0ZXJt
aW5lV29yZEJyZWFrU3BhY2luZygpOworICAgIHZvaWQgc2V0UGFkZGluZyhpbnQpOworCisgICAg
Ym9vbCBzZXR1cEhhcmZCdXp6UnVuKCk7CisgICAgYm9vbCBzaGFwZUhhcmZCdXp6UnVuKCk7Cisg
ICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKik7CisK
KyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0LCBm
bG9hdCk7CisKKyAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgT3duQXJyYXlQdHI8VUNoYXI+
IG1fbm9ybWFsaXplZEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5n
dGg7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwg
ND4gbV9mZWF0dXJlczsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW47Cisg
ICAgdW5zaWduZWQgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuOworICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBtX2N1cnJlbnRGb250RGF0YTsKKyAgICBoYl9idWZmZXJfdCogbV9oYXJmYnV6
ekJ1ZmZlcjsKKyAgICBWZWN0b3I8T3duUHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZmJ1enpS
dW5zOworCisgICAgaW50IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OworICAgIGludCBtX2xldHRl
clNwYWNpbmc7CisgICAgZmxvYXQgbV9wYWRkaW5nOworICAgIGZsb2F0IG1fcGFkUGVyV29yZEJy
ZWFrOworICAgIGZsb2F0IG1fcGFkRXJyb3I7CisgICAgZmxvYXQgbV90b3RhbFdpZHRoOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21w
bGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcAppbmRleCBjM2RkYTE1NWE0ZjdmYTUzNTlkMjdkNjFhYjUxNTBm
Y2M1YTg5ZmI4Li5hNzI2ZGMzNGMyZmFlMmRmNWZiNmUzYjRkMjZhZTExMjE0NWUzYjEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhU
ZXh0TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcApAQCAtMzQsMTMgKzM0LDMyIEBACiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
c3RhdGljIGJvb2wgcHJlZmVySGFyZkJ1enooY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uID0gZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpICYmIGRlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpLT5zaXplKCkgPiAwOworfQorI2VuZGlmCisKIEZsb2F0UmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgaWYgKHByZWZlckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZC
dXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkp
CisgICAgICAgICAgICByZXR1cm4gc2hhcGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGgsIGZyb20s
IHRvKTsKKyAgICB9CisjZW5kaWYKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKICAgICBmbG9hdCBi
ZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwpAQCAtODIsNiArMTAxLDE2
IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICBpZiAocHJlZmVySGFyZkJ1enoodGhpcykpIHsKKyAgICAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKKyAgICAgICAg
ICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBwb2ludCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKICAgICAvLyBUaGlz
IGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9y
IGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAKQEAgLTEwOSw2ICsx
MzgsMTMgQEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFIKIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBj
b25zdAogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0
aGlzKSkgeworICAgICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAg
ICAgaWYgKHNoYXBlci5zaGFwZSgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYXBlci50b3RhbFdp
ZHRoKCk7CisgICAgfQorI2VuZGlmCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIodGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxv
dykgewogICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBtYXg8aW50PihnbHlwaE92ZXJmbG93
LT50b3AsIGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBo
T3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwpA
QCAtMTIxLDYgKzE1NywxMyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbgogCiBpbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgaWYgKHByZWZlckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisg
ICAgICAgICAgICByZXR1cm4gc2hhcGVyLm9mZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0KKyNl
bmRpZgogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAg
ICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDEzYzY2OTE5MDNmYjY3MTg2OGI5NWI1OGNhMmNiNzZkYTk2OTll
MGQuLjFhZjI3MmUwNGM3NjA3MjhhNjZjZDhiODJmYTE5YzA0YjJjNWZhNzUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxMi0wMS0yNyAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnQgZm9udCBzaGFwaW5nIHdpdGgg
Zm9udC1mZWF0dXJlLXNldHRpbmdzIG9uIE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MjYKKworICAgICAgICBBZGRlZCB0aGUgZXhwZWN0YXRp
b24gZm9yIHNzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVh
dHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6IFJlbW92ZWQgY3NzMy9mb250
LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwuCisKIDIwMTItMDEtMjYgIFl1em8gRnVq
aXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdl
ZCB0ZXN0IGV4cGVjdGF0aW9uIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhw
ZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1m
ZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ4MmZi
OTU0MzlhMThhNWFhOGJiMjQzY2FjMGViYWNkYjhmNjNlYgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy
YWwgMTQ5ODEKemNtZUh0ZDAzTllue1JDVSlvSDB2cyg9Zk4pejJ5QEFlRFdLe1hgS0VRMStiKUQ0
UE08KkFUbSkybSk0RjZhPWFtCnprUyZvVlZKRUV1UTR4X2Y1U0Exb0owWE19TFh2WW8lcnxxK29O
czJYWXYjOzk9ZXFpYm1vfGtyQEI2Jj57a3duNQp6ZWZ5JD9AdmhKSmV+IVVtY0ExPHZ2Y2gwS0s4
VjQ1PG5UfFEhWTVoYktWRkJ3NmhxSENnbklnMUAkP1N+IShweT8KelVjSWNOc29gLSYpQVE4SEUw
PDR0WUczdXh5NmtueiElTV5LcX1SOUtNKlJONmFTWX1sIz5ENzVvNSk5OztoMlc+Cnp1cEhGfD96
eip5LVB4bzQ/Qkt6Zk9MeGAzSm1wcE95SCNuPXd9KEdETkBsQzJoZ0tYYkphUDJFdElrZStIQytw
YAp6Tnx3QS1kZ3BoUTc7LXtsZzNza0FQZGA9c1JYU25sQD1JWTNIbiFYP0NhXkVlSjxoMy1NWWJv
cV8jNXl5VD1RNiEKemhOYSNIQmBVPFVrS29JSDY2YzJmMSV0VWtsbCRuT0ZxcGZeODJIZlpAQ3xz
RGZxeSFQIUpPOW80P1pUUz9lSjx6CnpsO1hXVkJoZ1o5VE92SFAlOHlmQzZabmszTiQycmRCNEgh
eCk4dGE7WThBSF80bj1kPW8yP15hWGlmfUxhWS1gbgp6dkV7d3xxQVJYR1QoeDRhckhPVzReS1Ek
dSpyQzRRaikkdkx0aEd2TioyX1VrZ3ZkNTRGcjhUJEZrSShBejIrRVcKemdTJUJSPXI+UFlRP29O
QUhlR1dnUGpINTdmOz4rK1J5O01Jc2tyPnxyYkJKOzYoYmBteVJ2TjNsKD0hWEdDNGheCnpkbTs/
aXJzSlM/THpifGBFMSU0YlgqRF5UdiZWaDJFN1BNZUNwOzBxSG1xZX51K3BRdytWQU4obkc9IVh6
Qk1MOwp6dndDUEg8Y2I2fDkhbiUocDw4U0k8TSpGRDtXb0xtZitxSmlKZ3NpN3FIU3lgUHFZPXxu
b051Q20yWm19NHpyKUQKem95LWtkWVMqZkU5Qjd+MUI0KWE2K01rLX1GeXZwOGpoPWNPRysjU09e
fXx3MSNkS1BxeG9qKj1jQkQha0tEVmQhCnpgMzhJU1piKigjc3R9TCRGVlNnbWphaFJpWnJCd1dV
X34xcGBOcGE4TDJ5XnBzTnV4KVZkKVNweHwtYnVWJCVzYgp6YXgxNWlLVlA0M25QKFcodUVEND4h
SU5xeXZiNUtSTGY5PWI/c3M7NHtIWU5oazJmLU1pUTU/T0Ike1BUeT89YVcKej09I2ZEbDlEe09m
PUloQWYtNF51NzhXI2NDOUA/QHhMbFohdS09Xn4rflkxPiUqK3AmZTg8WlpaUkF+UEReYSg8Cnor
TVhxKUFYPXlBbFNuRXojcFUpIzM8VmgqOE5KUWNRV2VLO0UlWmxDPUNIRl9UVVNyRylJNDklTn1v
N1dxKURhdAp6ckY2SDM7ZyluQkRENkZVXkAwPHsmdnJCQFFebUR3cFpCOW5rK0YyU2heR2V2WTk0
bjVtXnhKbHhZbHUtX0ArJXcKekBJNV9ubj8zS30tP2NLR2hOSlRmYV55NiFPbVYpbSE2a31aIUxM
eVUqO3FHUDk2cCt6dFRtRVUre21Taj9ffnNeCnprZFc4Y0hxVE5vR0ptNzJJcTdfQWY9aURRcklU
WmkkbDtlZW00JHIyelc1MUYwRj5CPUVQcytvVzZZWSRNb2slSQp6T304Xnd6fFpgWjU+aXZVSSFg
bFFEemwxIypQcHVsUWJHOUtwcVA0UTBIK1ojJGxyVU1YeXZYK3dxSUo2a05XVi0Kel5sfHFNKTlq
dmN0ZE5jRWFgZXRnQUJraXFTSXZeQEhLUkNWTnZhbC16ZXVhUHhrU3p6Vj5kNClDYTh4QHkhfmQt
CnphUSU7O2U4LXdeK29uN0VsN150djZjMlRVRjxrODw9aE4tb09jYUMqeDRLVnQ9dlRnNlpSWnpt
RnMoXyt4VSNNdwp6VyY7VlF2LTVifE41UCRFV20qRjJJZCtSSDlyKmJXd2F9XmUoKCFyOSZlVWVi
IWJlfHE9cjNKKGptc3FuSH5PaEsKej1icWwpdnFzRyNBeGwoJF82bFYhdUVme09JbH56aiNpZE5G
b1VyM1UxRClsTEdfcCNSbmdTXis9LT92ZWBwWnVtCnpKRDJvNzNZPm1HVkA9QENvSD03O0cqe0ph
KGZSbUg4YC1DPE5AYjZLTGA+P1hCa2dVMFpKVD8jYjd6ZlcqMF84fQp6PWwwUEZYMSZPaUx1ME8x
ODRGQylod1ZiTikqZkIrYj1NM0dFVlJnQm1YN2V9RGxNMDE4TEg4MV5LdmBvQmZyMVQKelhqKTdz
OHtIQ0AlV19FJVkyRHstUjI/dXBSKilVd1NIWT9CP0gqR1FqdyUhQFJhKCl3YithVU1BKSlpaFMr
IyhuCnpuaUBEPGtOKVNFXnslbU0yI0k5fDxJTWcoQn0mPGIxOWU9c3cxIzt7UjtPWmFIYip4c0Yq
UjtFVXk/ViFeM3Q4cAp6V1E8TWFyPXxjRFh3K0tGUTNuSChwd18tNyl5KSlaazBsJkZiamFnUG54
ZE0yVStGcmthQmE5elByPkdqYEtxOFkKelBqRXRvd3piJF83dn1GMElVM0p2NH4jbz89dWxzJjxM
PSR4VHUyQ3ZXZ2lHeWUwYE11XkpsdzFDK0chXkcteXZnCnozS3tEJVElJlgpTUV1VDU/fmNmc3FD
IUJ9b2VIcmhUVHxvP3hRakwhWSZ1cExHKnsxVTNpQHJ3JmdLJHdsYXNDVQp6bns7T3EzdzQhZkhC
Y21OPzsyKGMmKyU+Q1Fae1JrR0l0XzdGdlNxUipfQF9tNFl4WWVRPyZoeW5ZNjkoM1Z7YEEKeiZM
YzZ8dnNQMWBKbFNqU0tLeX0peklwdzNpTVRIbmAyRjxhbmFQQk5tMDFTZXc9aFJxI3g/WlA5ZUQj
P2JSK2tWCnpUQlp6Q2RTe2stZFktIWFIbGZeOy1Ve3V0ZkE+Kn5KMHAhVCM7aGoxWFh+QVBTTko3
RXZQRCVMITIrQW9oVEZUMwp6WUVHQUEyaD1Ia0RqX2RSUzBLYlRFTyhpfjJfSypYV0hzbGY4YWpt
ITlyRHg1STZUcmd6YyREY2hOSEpGdH4+UT4Kejxhb05oNTtlY3BCUDRGMTspOzF8Z049SyZTOT1Z
aD9pMjVoVDs0X3AhTylLRUNQIU91UUdIQGhiXzwjLXIlVFU+CnpwelRoaz0qflFRYXBhdGBxaCgq
MnZrWDk8K2w1P3g5aEk2dGV2STZsRV5KJUgpcVpQUUNZR0c7N1pIPHVpS3VJegp6S2c0M19UQ2A3
SWE0eXxsSHFGVz9FJG1JOV5SSX44U0VrcjhOa2R5Rj4/aWZPNFY3fm5yNE83XlVuZkxOejUtbTcK
ejFxNDh+KFghTm1iJm84fDI9VDB+JG5GQG4hclFmUDxrd25wQj80JUkpeF5vZlYyOzB1ZHhuM1lY
TlNSPiVOR2lVCnpgYzFzI3omJGgwWDZfUVErOXg7SHhDKVl6IyZUZ2NfWmdwbHZHK141ZTlYMD47
NU94N3RQPGdTOTA3TXh0Q3hwIQp6bTxiN31vPSFNYjlUTnZBYylfd09LMnV4VSkmSnZQI0t4ZX1r
X0gzbiVjaWcmKVZYO2N7KzZ8eDhRdTNOaG8zQTUKeklyKkxfblhheno2VEV1NWFwa35aRk4wQ1lQ
U0h+LWdFXnw5dUtyWF5yUkx6dVJPaklgbSlkVn0wfkpTaDluZFUmCnomU0I3bURePDhiWU1QYmwk
RGUrMjleU2YmPEFffHUmQFp+N1F4X3dMMDlSOT4xNDN1WnMtQHFec2QqVWZIOzR7Mwp6UlV+QG5N
dHlAV0NLdnFiWXYwWX4+RkZtKUR5SE95TWJuWnN7dj1rVUJOekZ7NTdXUFdFTzd5OT1YX2crdmV7
M2MKej9sU2V4IS1ycDFOTX5BPTRoMExTelRFez9AUFozJkRhMl9MKTRKQjApKjZATE1LXmd4O3JY
ayQjWUBibyZpdzhOCnpZTSFSNlpEeSpDSFdoT29ybF5lZmx6NmwwQzNhPHwmfGx7YlZwZEQqXjJt
Kj0ldzxjX3ZaVyQxJT8rQXhrS3tDKAp6enVvQGlNIVJzNSNfSHhReGUjaSRAUTA2ZzdETyNnNVJj
fT9layV1fndGc3UqNSZyQ1dybmAhc3VAYX0hMSlIOCMKei1PZGxfZDNNUGN7K0xnNiRUVGcpS1Zq
Uk42bld8cCk2bHpFe3Z8Y2B1a0U9OGRTd3BmaGp6KjkqUFEkYHl8dW59CnpCQld7S2ZzOCp0Tnd1
a2VPb1JSV3JNUTA9JHVmM3FfdztoTnJLKjBAK0RKXmRZOCk+cSY4bSVZemNiJnN1enRSLQp6PGF1
Zm5vP3FhWnFFcTA1UzR6S0Jud3NjNEdRVFJEPz5Eb1J1T0srYURXfVZ5UmpeLUxxdWpBfUNoc29l
dSQmbSgKelBJUHUtPyNvX017eTZuR2dWNmduSEYmWnpFJkxJSUI3MSp1NGVSeWx0fnp3M3k3IytC
UmpmRVo1eXRzYiEyS1M1Cnp4QThYdGg3bzJmaj5JTTdCfkFOaSFvXykpT0dTOWY+SkBnaE1xcj8r
QkFSPkNGVF8rWUM9JTdMeWgjaD9iRT50OQp6PzNNQVo/KFJfVnthMHtXQmF4bm8zQ3BoenIjPype
WTRuPTlYUXBCemBBZ2h0V2dhb2pZSUI4NTgxQFJWTVArKT0KeiUyWXlzO2RFamA9c1RVc3J4SX1z
S2x3N05lMj8mcDlZcEh4Ri1ueTNNXjFleVg+U3c/VFZ8TSVyVCVqRDZVQDEjCnpLSWd6ajRRanlm
ZW1KUFczcHUoUGg2X0pQR2B+cWQ/enVXUWZJNEVHNkcoN2d8RWRGK2xKb2dPJHhHZEk5WThsIwp6
YzJRdyZxTUIhYFFGRmIqJllaQTVOQkgtaE5JKGFLfEp4dlZfdjxyYktrdjNrZkxoU31SOXY9eU16
OUtIeUVAPlYKeng0diktRH5vej9qPjIkTF5YcXgkJj00N1BVKG1ESlg7VHxGSjUoRjtDfkQkaWU0
N1gySlcwflpOeygob016WndoCnpuSDJ4Z3B6XnFmZEp6R3lFMFBwN1FwVEFWaWB9VyU1blQxSyRO
T0t1aXtIM3RqJTdoI0JYbXpsKnNKYnlhZTAxTgp6a0JTP1ZoUWNuPlc+OUNsM29WeTlnSVg1KXlr
X21XPVAkPVI3NUVNcHZlWHFibCUxdTtXSz5RdC1PKDVST0hGMjEKekMtZGheK3kjRjZpPzBzSDNu
UTAxam9IQXVMT1hlV1dnVzItci1EQkdWJSNicEdiZnBVRT9IXmxGVF5hS04rR0pvCno3X3dXVlFe
UXNDN2AkMGBrdUpJZU5sQWllamkzTkdrUDN4aVdZcWxqO1ZKZnFgPDV2UThEJlM/R0Y0TEBFM2RZ
dwp6KFBnY2xuYm9SMnZwSmBuUmJBaU1gaXY0cm4mQTVIRTJPI3xINyVrTns5UF5tPHg8ejgjcUh9
NllUQWZ3UGhzRVcKemJZeHxwXjBxTGllK1Z6a2k7ST94bkpaVGR7X3ZgMUViK0w8Pnc4RGtmWjFm
Vm1SSkdCNEphfSEyXklRfnk3KWZACnpaLWJfPGR4bEAyQ3c2TzghWlEhUWRLK2VxYloqSD98NVNn
dT1VZndpVVErVWBzeX1+ZChvaU54Rkc5czdTT1pAMgp6ZE0wNWJ2cDxJMEQzKkQzSUY4UmpnRmtF
THE4fnx9YHUqPWVQVzJSN3lJbFlNRkdzajFZPk5xNT8oZHZQJD5UajAKejtuKGJFdzNXM29CK0la
SlJnUmJfN2A7IzJYPnNLdUEpaFlmYX4wc2F3fUR+UFU7VDJ9YjhSPnh3YzhTRiY7JkU1CnpiKUNu
fmhlMUB7Wkp7UzZxLUpQd0VVfCpuPChifiZ5NVZ5VWtARXtMQn5sWTJ1KnteJGh8dzhuWn1TIU1S
VH1WUQp6Xk8/O2JCeDFrNnJQcCRlZkZGR2tBSmlnY3plbChSc3oqdz4rSilCSit1UVFnPG89aWhW
Zn5CP3tKOzNyX01+K0MKejxjYU4+eWBsPTB3UTYwUW8yO1A0V3RhK3Y1TGVqWihaeTBAbVp2VlFL
ZDkoKEBwcnFgJUFnPlUqO3lNaDhNKk5MCnomWkpkKU8zMmU1IXthTn5NTnh3X3Mpa0RzSkImbV5m
bXA7dzRZYnhFaGpjOHRqUlJPWHh8cmJDVEF6ajJsSVRidAp6OUxkc1ByJihMdnU0Y3Y2VXdeQ1lR
Z2YxZVpRdl9GP3FnTXRvdlE7UkoxYlZhcGJ5bzItdjdHKCQ0O3o2Qm5kdH0KekdIWVlMdVU5RVQ3
Nj4oa2BtVDJpdWd0RCRFVz1TTyh5Vlp6YjNONERLMyNlNGlZekh5dTU0VHpIJD1jaVU5am9TCnp3
VzdMTERvRG4rVTJ1eVVQbHROUXN5TldtODtyTWBlJD9ZWVQtIVBSUEhMUlY9bUwjYUp1d0xJWShR
I1FkP1RrYQp6PjZeNDw7eUdMJms/TlVocGc5azgmIU9ofVd6QExrT1lpalBIOV9wTFBHZzFTT3Q8
TG05enNPWUpuV2M7e3I+dT8KekNyS1dGS2pwI1daP3MyJC1XP3VFdm0rNmhHY2kmV1FifkpUSytg
Kl5sRypTd3glIWxKdCloMUBgRkFUNHdVXihZCnpOb28/XyYpZlJ6PlI9JFAyMXohK29nYHBHR1F6
T3BqMSk0Tm9UfGwmSiV1UVYhc2gjMXpffUx3X2BNVSMpXjUxQwp6dn4wRCRRNW1TQnFEI3leLWFP
QFlpX0pfbU5BeXdmYTJUVXltKTZreDQ/aTwmOFp3VUF1YTMxT0NIMnd6d2U5QFEKemx0KXR3TW5x
ZDNCM1Z5Kk47Mll0YiluTj0wbWJ5TWMkU3srS09WfHFZU2V8elFlWGFGPnVOU31ve2hLYndybytL
CnpGQTxtMVpRaHY3UUB7ZUI4KFZCc08qUE5mSmk5aE8/OVgpZnImUCZOe0hDK1lmaTFMcmNKJEdn
YUt8QllhQntvfAp6IWRnVHAjaCsyTCgmeDxQUkk+c1ckeW51bS1RI1ZVXnVfVkUhXkVuVyo+Xm1j
IVJeSlhITktwR2VZWlZkclQ1K1QKelZFUC1CaDNTdC1ndyF5QHMqY1Ihb2IlfVoySHp4MjFFOFI1
cWM3YEtjVC1sWlhGYGl4RDZJKjk5amJsZSFlPjVGCnpQMTJjbzs1bypsRTJNXlc3LSpxYV8rcDZA
V1ZqRWMtY1NTIUFIPyk2WjI5b3x7XjNKb0o9VGBWJEhAKWZUSWd9QQp6VUt8Wm5FPDN9bj9IVTQz
JSZVUTQ4eHc4aWlGVUs7c2lgc1p3U35wbWRSNFg8VXYzenN5ZjRLeTh+OyVTJSlKKEoKeispOVo8
PHlHXzFTfEM1SWY7RS1gUHl7RUNgK3JyYntjIUlBQWE/Xmlka2BXdSlaOzVXMyQtJmh6cXAtZDFA
ZUA8CnpGalI0KyYxMUgmT2J2I3FHPXNNTkhWKyU4K3lUdSM4ODZCU2V4ckR7VDlwd2ZDVms+cVl8
IShiNTckTl9wY341Uwp6TmFKcio+X2s+PGhYNT5iIzxBXnptWD0zemY7UDhkJHBlZ3phdihjM3Bq
YmFBK2grTlhIIVFwbUUwMTI4Y3xtS3wKelZCRktgaXA9WD53cE1IQiZ5LWZhT0g0a1gpZTMzPiRx
YGE5NHAmNnZKVWk+cHhPM3tBX0YqQlBDZWtDKGdxenl6CnpKRXo4Z1Mpe19iKTUhJEU+Xkd2JU5B
OVV7U1RzVXxWMEd7YT9kTl9NWE9kJkR5akdjOWVxVWNMbFNVNEk8biZ9bgp6X21aaTlBMkFwfGEq
cjNPSShlTms+dG5fa15xWTB6WT9TdFNSeStWOS0zbkZhdkEhXj5rISlYZmgwKjBiez80U2cKejBl
ZFdyYmQxcU5vcX1OKSZlQEwmPT5vSzcrfldOXzh7NW5iVGApVEd0cVUjNkwjTW1lS09EdkdsYXoh
Q3pBaFgzCnp7eVF+TEphVk17Jm5WKV9sY3M3UWVKb3I7SklAQWo4YG9OIVp8XlFDNClPMkhvblZI
ejt6fXU9X1NUcElWNz1FeQp6OGd4Y3RtKWhtcl8rNlB6ZCpBPnE/aXxvayR2RU5vUmcjUXEzS2BH
dzU5K15zdDBoYXJlKz0zKUg2aHtnbk9tKHYKemJVN0lxMWAkUkx7R2JuUXN4KDxlcUM+ZXlpI1Eo
LU9lWCpGPEh5KDZlIU9wS3J+PyNXRkNxP05nS3pWJlNhRj5YCnpjVjhGe1IkTVdBbyFhRDckJTV7
WUI5JGFYdH50R0g2KipaS0RZdnspVyZ7JHAqYX1kVnd+eXV+cHFHUW5YX2k0dwp6LVEzKnRAJHU8
QCslV3BgN1g1SWx7I1g3Q1F1NWcoPUAjaGc/NEpCNlRINWpZMlQle2IqIUowaEVnc01ZcSM1SSMK
emd8OykzcHA7dFk+JCZvSVRPVz9IVlJ7NUVsRXVhK29ZYXlEIT1hIVpnTkIwV0Vubll+d1dee09L
Umk2WD5SNlBRCnoqZ29oSFFWZ35aOGd2Z2RhWmJwVkdOLWJoVXExNSl3N2U3e3RhXytpbU4pTnVr
PW9KOE52JnAtXitrMlp6QjZ0WAp6X1ooXjlsc1NTWkoobnNrcj9DRnAmTD9ue2E/ckBGaCRJXldO
JD9OfSkmaGVvMCR4WGQzbTR4dVhKJCZzREczcVcKemdCMzdMOWh6ZEp0XnVGQVJjQio7dUg0WCU2
amVWTWE7TGF4c1d0Z1B3IyNEQWRKdShmTkA0RlFYRnV8NypYPzhxCnpsYl8pYk84OEFAdVJpJFNU
KHpnUllvbkFHVGU5K0NEMWFadmxqT1BgentZS0BCWXRHZ3dseUN9byh2IzFETXdpTgp6NE5hSkdC
QFVWOTllK2IxQUhmZ0FEaiVhWlh7b0M+S2ZuQlB0ZkVhTk5sZGxqcjFTfWdpeyZjSER+fjFjJElk
MTEKem0meVpyQEMwZndlditQaUt4VV8wPXpEUk43XnkmPElBTG5FTjV6cFRKYWJEQCgldX4oQ0w2
YXRpa3o9eiFXTnlOCnp1MUptJipAUmRPMkp7eCYyNyRyUXs4OXF6NX1mVlMqSzBjS3ZRKCFqS1dt
cmpZVV4lbXNmZWF4NGxwVGpWbzNHIwp6UyFnVVIhQE4pKm19b3JeYylfKGsrKzZZKFhsZEteJWp1
Sk8xakFpPlBhYnE3MnYoK1pXOUNpWmdFJUlYSHN+ZzkKej80JXhDMHtCRzRgb3REZzxVPUh7SyhI
V3dIeVU2Xjt9M0pZZlV8WjE2bjI5ZSVtZ1ghOUxXS0paIXVnS1coR1JjCnpxSXgqb3hzekp1TVUl
ajhVN3Z3aiZJQ2ExTXdpT1B1TVZoUnxLcW5GVTt7YDhCO3BrOTFCJjdYcCtAJVdoV2dCTwp6NXpZ
MnY8NkApI18raDZOSTROQnF1RFhEN2g5QmNUejlueUo1V1JkSj57azBNP0h+X2JYdUdiWGhQPlA4
R1dQXmwKeiNkOThTS3pzPyokc29RP2RCM3s9cUFoWSVUbSR9RCtUU3JxeGFQd2JnQFkqPUlgUG9F
cGdtZylUIVdDOHc8SWpqCnorIThtPmJPfD11b1I2U284P0Y+dE8yc2BSK1lyKlQ1MnZwPmxKWlFg
P2Zvb31uI3pmdURibE4maitiI2U1NDMzLQp6RUZMQURsPVBKR0JKMDhlbX5sQChtZTQ8YD9DfGBj
IVA0N1AoPkZkQUtNJGs5eCg/SyVRYzhxcCVmdUcyXzNTJCEKejkpKE1DJSNralF7Qm1mcGY9dV9n
U2AmQmFgb25IIWVmSSU/aVN4dHRnPml5UzslKkQ9dVg5NFhPcntlS3I8fGBJCnozTzRKa09GTiQ1
UX1eRDU5V0dpZiNOcnJnI1dzXzBoeT8mRzFxdFZeM29lK1g4bXYwcHIpTyZna3xNIVBNK1NtRgp6
PDk2Ul9wamx0SFF5PGY1diFLZz87KVZFZDI5dVBmQHc5OH1TY0lYIXAtM311I0FRaXNMJT0wcWNr
TmR7Q1lZck8KentqPTE0dD9KZ3RsRGVVUG9ZbnRYbmdRKHt4UUJQMS18QjI9RlI+QDlAUComa1RP
bj4tTFIzdkVgJUNnNUE5LXxVCnpePlk8d2AlaXY8SXZVV1ozeWgmR2JtJT82M2AwMi1NJkEmbGNl
NFhuIzQ7MzlAI18lUHJnZXxhelVuNjFQPTBYTwp6RillIS1pdGE9KFZ4QV9QaFglUD0yaDdSWlI4
Y1VZTUtlS09PPTV6THk/eTM4dFl+VykxVCopZjA9b0FWOWM1d34KenM7ZUcyaXFOVVl3PSN4RlMo
TjszeDNRJmZxd2tKdWQtWjZVN2J5SGB1cUomZzlCPyNjN0xjWUthQVRAcHZiTHJ6CnozNFdJeFgo
OW8pOCpaMGJreDE+MWI3cDNFMiZsdDFjT0EmT1c+MEU+YSo/NDFIc1E/UDFlQTdaWEFEe3tNTl9O
dAp6dFcxM3VLZkx6a2prUWN5KCooRl5WN31kfGdwSWFQYUNIaEZwN09SVV80R3MpMjd5MmpAYEt3
fjZnNztDMmZRaFEKek0lUXd8N0swJExBNUZGazMyYT1rdipxSztvQ1lyP1E1e1pjOytRdDhLX0x8
UkgzJD1xX3ZHXnFXS3ZKJCpFJnU1CnpJXlZoRUtrRzhoXl9NSTNPTHNuTT5mMnNkPHl2YjwyQ2BH
NDxIRkgoWUt3TEB0PF9+ajh+VlJpK2tsPT1sVENHTQp6RW4heCl0dkgmIUdaYE9JY3hvZWJ4a1NQ
JVBxKzI/JXIzcCZUJCMxVDt8MWEhVEIySl5QQlJ3K05MNjtxe3Y5KkQKekNFY3tHSGRAK25MMVNP
OWhtJnIybT9DOH4tdXdOI0kyYmN2YXR9ISZgRnd4VWB8U2ZzYU93bCtmUik+RlhUZWZQCnolMV9a
UFVicXpFPzMwU3VxPUcya01yeT5DXnlYe1dmbiU5amtMX0BeN049RWtRTnJ0X18xUDY8UDh4MUBy
YyE1Twp6ST1ETT07VzgmKVUyYWEwMz51QT5YQCVZJjEwOWwjQ1IlbzIoPl8hST03Q0U0X3dWPUVT
UkJfSUkhRCVFZGdkaH4KejN7JClPO14hJEtjdzVqS1ZTb0dLRTJkeDA0SHhGKCl+RX1RIUZoViRM
TWVKRGlLY0cyVl5ucFVLdG5hQWZMbX1GCnpWN2QyKykqaHxsUTBvVGE9QiVXbzhiSCVHU2tvUldQ
SSpWR1U3Mz48O0J8NWJTUDEwfHc7ME5GKDxzPi1PdTQmZQp6JmJpbn0kSmZtY1pwVFBmMTY9Z0NP
XyQwSkZGLSZaKTFPU0NsYm9NNiZRXmt6NkE2NilERkZDYWstUWNldiEqNjYKenRpTT9rMkFIK0N4
azA0VSFiKjV7ajtMOWtYXkowXlIhVE5AcnJfREYkPm08Sj9gZjlFVjE5R3xRQiZnSnpYQFBnCnp3
eSU3T0FsJXhrPUZ1IXBFM0YtXz5AWWxWT0ZyNz81engpRT92U2t6PE4reFlrVik3K1lnYW5ncmN6
KCg8eXZBfQp6KVhvOWhwQml0PD96Rj92eyFQWnhoYHxXMHMhVEFCa1ZBfmhuOX47R1JnR3dJMDtX
ZWI/biZlOXNvMz59YilZJm4Keml6fHI5VHIhckVsR0JyPmpyS3FFJmZOemxhNz13cW5adGxSPXEy
JiRmPlBVbV5FZClIe15EdXJYcFc5MDF7M1RUCnpoNWA0fj49QUhPLXJHfGhkdmEmeyVofilIWTlQ
bG8meCszeWNDUjRWMVlmVk5XSDNMRF8rfW9PNnMoRSpVVmV1YAp6WXd6azY9VnZgc3MkVUc0QHFX
dz5LQndqKmpMK0Bqaz1KRjhtRVV9RztsWT16XjtXR2g8UTA2amA8ckdjQDVCRy0KemlpPnB3NHBO
bnkxZWAhKWMpK249ZS1pZiM0eEUpYlpyOTljVEJUQGpQVVUrN2slKnQyb0B+I1MqYHxaaCg/bExa
CnokTFE2JGVVPTYqSGJkY3F4UypIMnczPT0wVThSZz1nTiRCQlhBRntEQE5YendzSUVLenpSUGBZ
I1FgQVRRTiYxOwp6VEdaa1BAUDVVe3JWSH4oe2RDMEJ6PzBLUGlOZWQ5eU9MbE1IK2N8eG9tUFM1
a0x8PitlLX1JRnNjP01JYCMqOEcKemtGQDF6X31nc18oZ2U7ZlZaRkE8KHBVJFJmNDhKMEcta3tm
a1J6cEZoM2s9IUpzbW5VMjNpY0liSzYjVElrTU1eCnpxU081UjZ+fGxpR3JuYnotNCQ0WCQ3OTdN
cShvfkFvZztgdEptRSh8ekswayRJS3tFfnVVUU4kYV9+fio/PzMpVQp6RXFaeHN1WVRscGVLQHBv
VX00JUg/dy1rViQjTXZnXl8ka2krXkEzeipoRUEycTZfZ3ZTNlRIKW1YJkV5UTxHdXgKelViUkVY
QCY8TCEraSZkbjc/QjlFUkVkQWJ3JCNvNk5ST3ZzMFhNcFVAbXMtIz5mcUZAUXNvVzB6OyMzRSh0
WV47CnpVbDJpNyQ4Um5KWF9wfWEpVChXcCMjfCZoZDt2a3Y1PFlNMDJfSylhSHNeMXlhPGFjTSYk
NVpzaHU+NGJgdTQjSwp6d3RgXkYqY2F4ZSYqRytRI0lTOFkwV3lQYjxTa1hDXjVMZyVlekVUIXtN
O2BTWnkoLUFJJFFudy0pPlowWTBJYigKeipqfWl1dXJHNTtob1pYK2I+VD91YTAzfFhzZ0t8eWNC
MmxPVmowUz87RWFUVWBVKXJAcEtMODBHaWBNIXErPVBWCnpiUnBRMEJXcTJXaFJ+YHFSNT1ZbG9C
aS0tR3pqZVYlQDtDRjd1VUpsTCQkM3BlYHhGMzZANVAoZjFCc1BNWnAzYAp6cCkwdFlBZyRtc3he
Vkt7S3VJM0pFUTB1RjhnNWU2RGJIYGx3cH45Q0VIXjhvcj1VMnIlc35tNkttMy1zOzhZdioKempM
NX1jbCMxM3JkeGJfN05fSVRuSzJVPUk8ak8oc29HPzUxX2hJbnElM3AtSHRNMXgoPnV0RShTVSQ9
TispODw1CnpLZmNJRzNUUnlFTChjeVlUdiNuXnJVJUhuO2dgcWxOcTR8e3BkPFBWKUY8S1ZHZEcp
Jm8oSXN4QXF5JndLZ2ZDJAp6VnJ6PVE+PSM0MzBNYnBkMDlCTGNsb3E+PmZGeDBfY1Ata3E+MjZZ
U3R5QX1QWE9MWFkrJiV9fF9VSGpyd1FSXisKendmTUxWejspTjZZJkhePCRYKz5AQkQ+R3RDRm1e
RCVVOW4kYS1gRHlsdypLKENWbHRRciY2MGxuPjt4NXF3dX5ECno5TDxnTmtQWXZAJXF2Z0RwTWFP
WTJXVVcyeXFMYFYjZW02b0ljJEtTSkFpMkNqRXVtTUBQdSRLbzxaQn1DQVQ4Mgp6Z3JyPFRnMFRY
PT5MTUI1MlNwWCRON3ZTfmFENntUQENoSDVgKmMxKiZNMzZoVlRGekpDPyhPYEk+LWQwPn01WnMK
ejJwJGtaOSt8WithX2ZEfFA2Y19rWjYwN25PSVNNaWUoYkhLNCVOQnBBPytTITFPX3YxXlRvbHhu
e18zeFdlQzhUCno3Wk1gWkR0X1QpKFlfQWNzKTw+ZmsybWArN3dHMnteeWVIK0ItfU93VkxFeVV3
PkQ2LSEldyV6TDBeMU1zMFVEfAp6MUZwIVVzTlp2SW9yZXRHZSNwKGpwTHI4R3JvRHlDUmFeZ21A
WDRnZSF6ez5kI1lCeVF1WmpUMGkzb3FmVTBxI0EKemdLNzsrTj1wMH1VNmJITXpTV0pHbXFvMkFL
SG0zIypAOFM2QGgjQSRwT1htX3J9QXpLMSQ7WEFOTUF9eUJDfnV7CnojY0dec0A5JjtiVm9YYGBz
a2RUWkdKNk9vc1E4eDFMRik8WT97NjdHUGVLZFZFV1NDTz9JTFkmUTUwPmZtcjkwWQp6R1pIeEM3
LVZTSUBBSChrIzNgJENuQTE4XmZrJG9KLTR6MHhIbTtWc0hQJFYoYHVeUzdkUFhMelViRSs5ZGFA
dzkKektkO3lWaW9xJUQybXZnQldeaTkrR0ZgKFJePGolWkVvT0NZM2FUfSErVFZtPE9vYG9DTUMk
UXJUNmlTZXkkcGRqCnpoXlBKYTlJQ1VxcCFaJXkzOCN8ZVQ3TTMtJFBANVQmYVBEb2NIYVlHc3VF
QiRkVU08QkIhXkFDe35BJSE/WXQ1UQp6ZWJoQihsX0dORkNDNFl2bV9oVXt1bCFJISh3cStYM2pQ
ZTE0aVZYI2RId14+bC1vZFBeeHFrKjRXVHF4c2dHI1cKemg7c01oMzB7R0RfODM3eDdEPUhKZSp9
PzFDLUNpclhSJDhTRHJueFU1QD1xflV4JGMkVX5BKkplKVlBMTNlPUpKCnoyTlVkS09qXjtTcThq
I1MmKGVzVyt6dT5RMVZTZ3I5ZlhyWmdfbnMtQGFyUkw1JVdXbFVAZVY3c0RhfiFFOHwhJgp6Vz1z
NnMhRz1Ye24rbCZlWmtuT3V4KnQ1SUIoTSRgSj9Aa1lTRl5tdnpuZW1HIW40QDFWTzh4d1RGfmpE
Pih+MW4Kenk8MCNoYylzfWd2bWh9M1dwWSYrTy1fVTh4cFYmaCsmalYyRncwY0lTJjZgcmg9ajBO
RVZjZTBUJCgoT21FdiVECnohZGc4bThSYyFeRWQxSSE1UCEkV3JYbFVCZzYjKzJkKW1UcTxIS0k8
PikoJD83IzxvQ3M4UD58Pi1eUGw8Rikwdgp6PUs5UiloT05hbU5HajFSTTs7TX1Ocn5xJCVBRDxN
UEs9d21aKDIyZ25uMmJCSSl4SyU0Y2FqNyR4QHtJRVpgJmUKeithZ2ROaj5hWH1Ha1JZRiQjdDEp
VHBROHJzVH0mfTtjLSghS3xXUH5AcURSa3l7NUZYKDtrRWxASWB5NUVaRVhQCnpoUn5yeWEwVzhL
eGs2bTxFND1geSFgMHZiZTJEQEptYEdgSmxNclU/NXlrKj1zUXVraVhjNzlBVz5vOyg5WTdyNQp6
PUZPWGxfYCFBaVlIdnU7KGY3K2pabUN6YjBwUV9qV0NTdEg/KCFnWllZcFQ4JGZMT2dwO3J3KTBH
aSVvczN1NGEKeiRFP3k4dUN2QVglNWUxajNLcytMZU8tST9pYENeUlJSWkxqeU1fLU9YLSFwN2ZX
RXM4ZnpwWDRGcXI3eT9VYmBRCnoyRn15aHBtVV5BZCFZM0lEWGZ+SkUhbDVeaHQ/TSQ8bnZodUNg
RFRhSE40Z1hwNj8jJU5ZTmg7PUAwemYpSXFDSQp6UDFoUUNVX0xNMkRBP3IydDx8ZmVnYnlmQUQ3
LSUrX3t7fGZQIT17TG53RTAqTmNzWEtPJjRNWHpCOTEycXIzM2kKeiRLQjhrVTEqZXhZeVdXcmZA
M2AqNDJHa1N3WmJhUTE5MC1QNGpvIzcwV3U4c0Q8cjFATyZiJEVweFYlITRJUlcpCnpMI2BKcys/
ZWJ9TH1HPkVvKEQ0fUh4eGM3Z3JBd2VOVmdnXiYoV29MO0ZUITx4cUZ9dj9WdGBUQ34kdTtNMTcm
Rgp6UCMjeld6Kl97LSVRUiRqPWExJXVUNWE8Zjw/MTE7RGdzaUFnKW5QfjFPYkMhZSpZVkRRellg
M1B6c3xmUkA+d04KenJiezszQmw/JTE3ZFgwZU1jXiQ3ZzxSTSolMGVGUkAtUjB9M3FOQz5YTnNh
P01XUChEMG8pbU1BODFgajlnMVdiCnooJj91bDdsO3JVP3dPWk93PXhBWnc8dl5CQVJlWHlGTTJa
PTI7LTRpOT8lTH5qWl9kMVdqTDQpZH1+O1R1e0xeJgp6KjF5YHBMND9ERWs8K2JHS1gocnp7a3lw
IU5TNDduRD9sWiZHQjxGXzZAV29HPiopOWQ/PFdidjJYRzdOWGwzSlIKem53MytQJiFyajJ4MG8+
TXlUUUlfT0Yye1B4JHU3KUFXcSh4OHh1MkQjbG1uK1JvWWZDVENwaHllbG9ZZkx7QFliCno9YCQy
VjAwfmZyeSNuYER2OWV2ZWNFSmtIRXItVkZ1K1codk1kUz9GO3B7REhTNWVySHZPaDRYa152JTZI
YTM4Vgp6amV1c0B5aEgwMSRlZi02Wj5WTEYxLXxQJl9rfVc7Xz1AIXxkMiVxQGdMKkMqdz9JTkpl
P1RqcyliRTtCenxkWn0KemomZV9SbCE5UUxqIWw3eHhmdXdJdm8rdDMpOD9fX15McCE7bVY5cW90
KmZjeE5jMyEoPUVqYSF6P2NIJD9YOWxLCnpEeTxCb3JMaCtnQ1dze3wtZEwjaWpLS2BWWkNMeEcj
dCRFZm4kJXdEdjQpKzZgMzMoRzQySk5zYz1KZjhrZzUqMQp6M2MqQ3VOSTJEdztaREdaYXpfa1Nw
PWktNiZDZTNCZD5DWjc8TVBnYil0Uzhjb0pXOGJqNF56ZjZHZkBPQjQ+WXwKelY5d2hVNSYqdnZy
SD9RUkdOemF2NykoWGJYVlUrYmptN185az98aXMyRCpYN01FWV8yYEdxWkhNNXtJfHtMTUUwCnor
RTkmSmZufWFOR0xSWj9WbkJOKUMrXyV3NyM5U3RvUTE2O25KITtKRkpJfVQpdU4wOFZyP2I7STlP
UjUwfVghLQp6UEtQUkczd3hIckY1NTItZSFOcnM0ckMjemw5Rmh7dWVHe3FyN1IlPHR2TjFwUytw
cUA3PnVtamgqJk11a1Z4fngKekZMWjBoI05hbkdZJWhGKj8xVTNRMH1tYVYwUXFJOSZvZVNnbFE7
O09ZQ3YkVVo3cFVJUWhXb0hOclE4Syoyb0NhCnp6WjhnXl9oLVgjWjU/P3d2LT5WKmh1M3IkdkR+
az43QFkzfTVjJkNEbX13e3s3P1ErPW5rYkI4VThwWV9mI3RCTQp6NmJVeXNIV0leQ3pFJSZVOT9k
MV5rd1h+RkFOWjAyJWhQRTdBem9XTzVgQkRUY0Q2K0xpQn4tayQ1IW10T1lBbkUKenVyJUU4TFF3
ezxFRChSKDRNWlpXKiVeNHU1N3FNS0Rtei1Dbm1xdlBkQytPcGlZUGN1ektKPCYybHtxMmhSV2V+
CnpvfFRqJmZ6e1hZQjNfTEJxbkp2OVhwPH5iaWsoM0A+NjUlMFRmOzFZdDNKZWhMMiQmYXUkUSE3
eitYJDFhZnwlPQp6OVlpYkohQEhnKDIjNXR7NEo7S28jZHA5MGMtRFU0M2s7P3FxSW1OWUZQUSVq
RkNfTkVjdGEybER9MXRtdD09eHMKej9tPntsKCRTN3kmRWB5cj1PNGZRej1MYSVLMTdeT2ZkbVpj
TD08by1IPmByRStYfUFqekhDaWdBe2JoJjBMcHRNCnpDREc+NDc4QCh7SmZKMG0hOT1SVTNrU3R1
aX4+TS07QHY7KGx0e0BuaC1uUVpAQ1Q8Kit5a3NHPSM2NHdHZkV8Mwp6WCZAMmdKUk1DNilhOWtI
PjA/KndBZ01fRjh3UzM/O3gkWCQ3djVWITA/YlMhQmVZRCVFS1d3SlhWaWtSdmJVRSgKem00JWNC
QEU/PkIjQTdNfHUtMVZnZXU7dXskaEQxTzcwJn43QTNEWXdJQkM+V2k2LX5Ja14xTnJLcDdrTVU5
VCs7CnpyPShmazdvbDdOYl8taVR2ayVGMHBtYXloKmF9WTRmQldITUhsUmgpUHZXfUlVTFFSTyVx
eFlrU3g4OFAkJG07Ngp6UikkY2ppXyN1TWhWd1JpM2RoaFU5eWx4fmdoMXwkamhaMWVWdVB1V1hp
Mz1ZPTdBcDVRcTFRYUo/TDUmc2B4Vz4Kel5CLWhtK1p8cG84azM9eHF6IWpPMzA0XlMxZCVXWjRE
Vkw3VXhjfkBDNGFtWSlpXmFFZzM/Zz9ETSFwUW5nTERaCno0eGhWfDtNTiNAd3o8QX52Sm91a3Yz
NCFpb3NmNHJnKG13M3V7I0R9e0o9fH5CeGlwSEhLMVQ0YDBQQjA8fWRicgp6YCZaOyNOSl8lOyli
QF52aDNAcHp5Kmp+T1ghfWNDWnw/Y31vSHpDV1N+Zig8NU9Waj41KV9QfnVNc3xQRkV7YGIKejNX
NkpAISVFOFYoPnQ4SjgkQXEkJXAzNSRnbXBiY2opRm5lM3QpfSUkWiZfIUheZn4haVhQTV5gOyN3
V0A3bThNCno0OGhvRz1QeXNnZV9oa0hWfTFgLWczaW8kcFRWOW1mbXtNdCE0LUB9b1pnYkIkRiRq
cFZsZUNlVl8lKHMjcTkkLQp6S0VZc0tvIWRyMiQ/ZX1vKlpYZ01UO05JRUhQTWxtbW9FPmMjSlcr
Sld+RWc5YEAtblVrbHklMXBUTVBzUyU4VikKej5ldFR2TztZT1NQV2ElLXk3KyUtVGxebkRfOClm
M3lVVippZyh2UX5CbXN2TGNwOFJKQk9ASWlVWmAyfjM4M0hxCnolIUJAcW9ZdFFnc3JZfWF3Pzl3
dCZsOXxIP1l8OUlmMG9hbTxAMEN4e1AjeHZwU3w7RUBCRzwye356PkR3biMkdApZKzVMMGhgK2tL
MzdLfH1EWWhndEMreEl7SUZLNSVFR3luaHEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVhdHVy
ZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzdiZTBkZmVlODQwMzFlNGVjODdhNTdiNTJiMjRlNDE1ODE1MDU1
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9j
c3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTkgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgw
LDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJs
b2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBh
dCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXpl
IDc4NHgzNgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3ODN4MzYK
KyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyNDM6ICJUZXN0IGZvciBmb250LWZl
YXR1cmUtc2V0dGluZ3MgcHJvcGVydHkuICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMjQzLDAp
IHdpZHRoIDU0MDogIlRoZSBmaXJzdCB3b3JkIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgd29yZHMg
c2hvdWxkIGJlIGRpc3BsYXllZCBsaWtlIFwiV2ViS2l0XCIsIHdoaWxlIgorICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDE4KSB3aWR0aCAyNjc6ICJvdGhlcnMgc2hvdWxkIGJlIGRpc3BsYXllZCBh
cyBibGFjayBib3hlcy4iCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw1Mikgc2l6ZSA3
ODR4MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzF4MTYKKyAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMTogIldlYktpdCIKKyAgICAgIFJlbmRl
ckJsb2NrIHtESVZ9IGF0ICgwLDY5KSBzaXplIDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSA5NngxNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDk2OiAiV2ViS2l0IgorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsODYpIHNpemUg
Nzg0eDE3CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDk2eDE2Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggOTY6ICJXZWJLaXQiCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXgg
OWUzNzA0N2EwNDdjNDZiMjNjZGFlMWIwMzIyOTZiMzVhMTVmNzU4ZC4uYTIyZDEyZWZkMmJkODA2
ZWVlM2RlNDkxZjQ0M2I4OTEwMTBlZGM3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMzM0Miw4ICszMzQyLDYgQEAg
QlVHQ1I5NzcxNiA6IGZhc3QvY2xpcC9vdmVyZmxvdy1ib3JkZXItcmFkaXVzLWNvbWJpbmF0aW9u
cy5odG1sID0gSU1BR0UKIC8vIENhdXNlZCBieSByOTI2MTgKIEJVR1dLNjU4NzQgOiBmYXN0L2pz
L3ByZXZlbnRFeHRlbnNpb25zLmh0bWwgPSBURVhUCiAKLUJVR1dLNjM3OTYgTUFDIDogY3NzMy9m
b250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwgPSBNSVNTSU5HIEZBSUwKLQogQlVH
Q1I5NzY0NiA6IG1lZGlhL21lZGlhLWJsb2NrZWQtYnktYmVmb3JlbG9hZC5odG1sID0gUEFTUyBU
RVhUCiAKIEJVR1dLNjY0MTcgV0lOIDogZmFzdC90ZXh0L21pZHdvcmQtYnJlYWstYmVmb3JlLXN1
cnJvZ2F0ZS1wYWlyLTIuaHRtbCA9IElNQUdFK1RFWFQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124480</attachid>
            <date>2012-01-29 18:07:24 -0800</date>
            <delta_ts>2012-02-29 19:36:41 -0800</delta_ts>
            <desc>Patch (just fixed a typo and a style error)</desc>
            <filename>bug-69826-20120130110722.patch</filename>
            <type>text/plain</type>
            <size>67175</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ0MjYxN2UzZGNkYWJj
YWRkNGUwM2NjZjI0ZDVmYTU2ZmNjYThjOS4uY2Y3NWVkMzliNDRmNmQ3MjNiMmFhZGZmZjgwYTFk
MjQ2NjNiMmUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAxLTI3ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIEFkZCBIYXJmQnV6ei1uZyB0ZXh0IHNoYXBlci4KKyAgICAgICAgQ2hyb21pdW0g
bWFjIHBvcnQgdXNlcyBpdCBhcyBzZWNvbmRhcnkgdGV4dCBzaGFwZXIgdG8gc3VwcG9ydCBPcGVu
VHlwZSBmZWF0dXJlcy4KKyAgICAgICAgSGFyZkJ1enotbmcgaXMgb25seSB1c2VkIHdoZW4gLXdl
YmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3MgaXMgc3BlY2lmaWVkIGFuZAorICAgICAgICBjb3Jy
ZXNwb25kaW5nIGZvbnQgaXMgbm90IGFuIEFBVCBmb250LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gY3NzMy9mb250LWZlYXR1
cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwgc2hvdWxkIHBhc3Mgb24gQ2hyb21pdW0gbWFjIHBv
cnQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQgaGFyZmJ1enot
bmcgZGVwZW5kZW5jaWVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgaGFyZmJ1enot
bmcgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6IEFkZGVkIG1faGFyZmJ1enpGYWNlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOiBD
b3B5IG1faGFyZmJ1enpGYWNlLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhQXNzaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzQUFURm9udCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6aGFyZmJ1enpGYWNlKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhI
b3Jpem9udGFsQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxP
cmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6
cmVsZWFzZVRhYmxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNvcmVUZXh0R2V0
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpGYWNlQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjp+SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6ekZhY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFyZmJ1enpQb3NpdGlvblRvRmxvYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFj
dGVySW5kZXhGb3JYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6bm9y
bWFsaXplU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXROb3Jt
YWxpemVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hh
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMp
OgorICAgICAgICAoV2ViQ29yZTo6aXNDb2RlcG9pbnRTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6aXNXb3JkRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6
U2hhcGVyOjpzZXRQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpk
ZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJm
QnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6
elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlv
bnNGb3JIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6b2Zm
c2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNlbGVj
dGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6U2hhcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6
elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6dG90YWxXaWR0aCk6
CisgICAgICAgIChIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6SGFyZkJ1enpSdW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6SGFyZkJ1enpSdW46OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpIYXJmQnV6elJ1bjo6bnVtQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUdseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6cnRsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlZmVySGFyZkJ1enopOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6IFVzZSBIYXJmQnV6elNoYXBlciBp
ZiBmb250LWZlYXR1cmUtc2V0dGluZ3MgZXhpc3RzLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0NvbXBsZXhUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdp
ZHRoRm9yQ29tcGxleFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOiBEaXR0by4KKwogMjAxMi0wMS0yOSAgTm9lbCBH
b3Jkb24gIDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2Ug
ZGVjb2Rpbmcgc3dpenpsZSBvbmx5IG9uIGxpYmpwZWctdHVyYm8gMS4xLjkwKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA2ODg0YjQxYWYxZDE5YzljNDQ1N2VkMDE3
YzRiYTkxMWYxODI0OGM3Li4xOGYzMTMyZTFjNmMzOGZjOGM5N2RlZjFlOTY5ZWY1MjM2ZmRmMmZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMjEyLDYgKzIxMiw3
IEBACiAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL21hYycsCiAgICAgICAgICAgJy4u
L3BsYXRmb3JtL21hYycsCiAgICAgICAgICAgJy4uL3BsYXRmb3JtL3RleHQvbWFjJywKKyAgICAg
ICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcnLAogICAgICAgICBdLAogICAg
ICAgfV0sCiAgICAgICBbJ09TPT0ibWFjIiBhbmQgdXNlX3NraWE9PTEnLCB7CkBAIC0xNTQxLDYg
KzE1NDIsNyBAQAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAg
ICAgICAgICAgICd3ZWJraXRfc3lzdGVtX2ludGVyZmFjZScsCisgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6ei5neXA6aGFyZmJ1
enotbmcnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgICAg
ICB7CkBAIC0xNjIxLDYgKzE2MjMsMTEgQEAKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvck5vbmVcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUn
LCAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lXFwuaCQnXSwKIAorICAgICAgICAgICAgIyBN
YWMgdXNlcyBIYXJmQnV6ei1uZy4KKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dFxcLmNwcCQnXSwKKyAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ekZhY2VcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKKwogICAgICAg
ICAgICAgWydpbmNsdWRlJywgJy9jaHJvbWUvanVua1xcLnR4dCQnXSwKICAgICAgICAgICBdLAog
ICAgICAgICB9LHsgIyBPUyE9Im1hYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwZDRkMjgwODQ2NWYx
MjVjN2QyZGYyZTQ4ZGYwMDU3NTRhZGYwMzdiLi4wMzgzMzliYmVhNGQyYzk5YTM3NTEyNThjZmIx
NzlhZDJlM2EyOThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDM4LDYgKzM0MzgsMTEgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFy
ZkJ1enouaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTa2lhLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuaAppbmRleCA3MDVjNTg4OTcxNDVkZjhiMmMyZmE0NDI3NzAxMWY4OTBlMzZlN2ZjLi41MDRi
MzEzYTQxMzRmOTg3ZTU0OWUzNTk3OGQ1MzEyODZhNzgxYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC03Miw2ICs3
Miw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRSZWY7CiAKICNpZiBQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQogI2luY2x1ZGUgIkNyb3NzUHJvY2Vzc0Zv
bnRMb2FkaW5nLmgiICAKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQpAQCAtMjM2LDYgKzIzNywxMCBAQCBwdWJsaWM6CiAgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQorICAgIEhhcmZC
dXp6RmFjZSogaGFyZmJ1enpGYWNlKCk7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAogICAgIHsKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoQ0FJUk8pCkBAIC0zMzIsNiAr
MzM3LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4p
CiAgICAgUmVmUHRyPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IG1faW5NZW1vcnlGb250OworICAgIFJl
ZlB0cjxIYXJmQnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOwogI2VuZGlmCiAKICAgICBib29sIG1f
aXNDb2xvckJpdG1hcEZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggN2Ix
MzYwODgzNDNhZTA4NGUyZTRhZTQwN2JiZTA4OWFkODY3YzQ3NC4uODhkM2Y1MjAxYmE1NjE5M2Ix
NWJjYzM5M2JhNWRkY2E5OTYyOTVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpA
QCAtODQsNiArODQsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pCiAgICAgbV9pbk1lbW9yeUZvbnQgPSBmLm1faW5NZW1vcnlGb250OworICAgIG1f
aGFyZmJ1enpGYWNlID0gZi5tX2hhcmZidXp6RmFjZTsKICNlbmRpZgogfQogCkBAIC0xMDAsNiAr
MTAxLDcgQEAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhQXNzaWduKGNvbnN0IEZvbnRQbGF0Zm9ybUQKICAgICBtX0NURm9udCA9IGYubV9DVEZv
bnQ7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBtX2luTWVtb3J5
Rm9udCA9IGYubV9pbk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBmLm1faGFyZmJ1
enpGYWNlOwogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMjc2LDYgKzI3OCwzNyBA
QCBDVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6Y3RGb250KCkgY29uc3QKICAgICByZXR1cm4g
bV9DVEZvbnQuZ2V0KCk7CiB9CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KQorc3RhdGljIGJvb2wgaXNBQVRGb250KENURm9udFJlZiBjdEZvbnQpCit7CisgICAgQ0ZEYXRh
UmVmIHRhYmxlID0gQ1RGb250Q29weVRhYmxlKGN0Rm9udCwga0NURm9udFRhYmxlTW9ydCwga0NU
Rm9udE9wdGlvbnNEZWZhdWx0KTsKKyAgICBpZiAodGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNl
KHRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHRhYmxlID0gQ1RGb250
Q29weVRhYmxlKGN0Rm9udCwga0NURm9udFRhYmxlTW9yeCwga0NURm9udE9wdGlvbnNEZWZhdWx0
KTsKKyAgICBpZiAodGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHRhYmxlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSGFyZkJ1enpGYWNl
KiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKQoreworICAgIENURm9udFJlZiBmb250
ID0gY3RGb250KCk7CisgICAgLy8gSGFyZkJ1enogY2FuJ3QgaGFuZGxlIEFBVCBmb250CisgICAg
aWYgKGlzQUFURm9udChmb250KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1faGFy
ZmJ1enpGYWNlKSB7CisgICAgICAgIHVpbnQ2NF90IHVuaXF1ZUlEID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGZvbnQpOworICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhhcmZCdXp6RmFj
ZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCk7
CisgICAgfQorICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKK30KKyNlbmRpZgorCiAj
aWZuZGVmIE5ERUJVRwogU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29u
c3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZGRiYWJiMjJiZGE5
Njc3YTU1ODcxMGE1MTc5MmZiNWJhYTE0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgi
CisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiaGIuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRob3VnaCB3
ZSBoYXZlIEZvbnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMgdGhlIGNhY2hlIG1lY2hhbmlz
bSBmb3IKKy8vIFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxzbyBuZWVkIGFkZGl0aW9uYWwg
Y2FjaGluZyBsYXllciBmb3IgSGFyZkJ1enoKKy8vIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1
bXB0aW9uIGJlY2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKy8vIHVu
ZGVybGluZyBmb250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZhY2UpLgordHlwZWRlZiBwYWly
PGhiX2ZhY2VfdCosIHVuc2lnbmVkPiBGYWNlQ2FjaGVFbnRyeTsKK3R5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgRmFjZUNhY2hlRW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gSGFyZkJ1enpGYWNlQ2FjaGU7
CisKK3N0YXRpYyBIYXJmQnV6ekZhY2VDYWNoZSogaGFyZmJ1enpGYWNlQ2FjaGUoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFyZkJ1enpGYWNlQ2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2Fj
aGUsICgpKTsKKyAgICByZXR1cm4gJnNfaGFyZmJ1enpGYWNlQ2FjaGU7Cit9CisKK0hhcmZCdXp6
RmFjZTo6SGFyZkJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0
X3QgdW5pcXVlSUQpCisgICAgOiBtX3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCisgICAgLCBt
X3VuaXF1ZUlEKHVuaXF1ZUlEKQoreworICAgIEhhcmZCdXp6RmFjZUNhY2hlOjppdGVyYXRvciBy
ZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOworICAgIGlmIChy
ZXN1bHQgPT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpIHsKKyAgICAgICAgbV9mYWNlID0g
Y3JlYXRlRmFjZSgpOworICAgICAgICBBU1NFUlQobV9mYWNlKTsKKyAgICAgICAgaGFyZmJ1enpG
YWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Cisg
ICAgICAgIG1fZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIH0KK30KKwor
SGFyZkJ1enpGYWNlOjp+SGFyZkJ1enpGYWNlKCkKK3sKKyAgICBIYXJmQnV6ekZhY2VDYWNoZTo6
aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsK
KyAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKKyAgICBB
U1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQpKSB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJz
dCk7CisgICAgICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWZjMjZiMWIxZjIwYzNmZmE3OWI4OGZiNjhkOTljYWQ3OTJmNDg0YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6RmFjZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZCdXp6RmFjZV9oCisj
ZGVmaW5lIEhhcmZCdXp6RmFjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1
Y3QgX2hiX2ZhY2VfdDsKK3R5cGVkZWYgX2hiX2ZhY2VfdCBoYl9mYWNlX3Q7CitzdHJ1Y3QgX2hi
X2ZvbnRfdDsKK3R5cGVkZWYgX2hiX2ZvbnRfdCBoYl9mb250X3Q7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xhc3MgSGFyZkJ1enpGYWNlIDog
cHVibGljIFJlZkNvdW50ZWQ8SGFyZkJ1enpGYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SGFyZkJ1enpGYWNlPiBjcmVhdGUoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1E
YXRhLCB1aW50NjRfdCB1bmlxdWVJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSGFyZkJ1enpGYWNlKHBsYXRmb3JtRGF0YSwgdW5pcXVlSUQpKTsKKyAgICB9CisgICAgfkhh
cmZCdXp6RmFjZSgpOworCisgICAgaGJfZm9udF90KiBjcmVhdGVGb250KCk7CisKK3ByaXZhdGU6
CisgICAgSGFyZkJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqLCB1aW50NjRfdCk7CisKKyAgICBo
Yl9mYWNlX3QqIGNyZWF0ZUZhY2UoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIG1fcGxhdGZv
cm1EYXRhOworICAgIHVpbnQ2NF90IG1fdW5pcXVlSUQ7CisgICAgaGJfZmFjZV90KiBtX2ZhY2U7
Cit9OworCit9CisKKyNlbmRpZiAvLyBIYXJmQnV6ekZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlQ29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2Y2ViNDUxNzk2Yzc3MmNkNzE3YzE5
ZDdhZDQzZGFhOWMzODA3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKQEAgLTAs
MCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgi
CisKKyNpbmNsdWRlICJDb3JlVGV4dC9Db3JlVGV4dC5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisKKyNpbmNsdWRlICJoYi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwg
MTYpKTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZh
cmlhdGlvblNlbGVjdG9yLCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURh
dGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAg
ICBDR0dseXBoIGNnR2x5cGhzWzRdOworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9B
UFBFTkRfVU5TQUZFKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZv
bnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxl
bmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jp
em9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsK
KyAgICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZv
bnRHZXRBZHZhbmNlc0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRp
b24sICZjZ0dseXBoLCAwLCAxKTsKKyAgICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24o
YWR2YW5jZSk7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2lu
KGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgs
IGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyho
Yl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBo
Yl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9u
dFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0
YSktPmN0Rm9udCgpOworICAgIENHUmVjdCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0g
Z2x5cGg7CisgICAgaWYgKENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBr
Q1RGb250RGVmYXVsdE9yaWVudGF0aW9uLCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0
TnVsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZs
b2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9i
ZWFyaW5nID0gLWZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAg
ZXh0ZW50cy0+d2lkdGggPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0
aCk7CisgICAgZXh0ZW50cy0+aGVpZ2h0ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0
LnNpemUuaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVu
Y3NfdCogaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2Zv
bnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhh
cmZidXp6Q29yZVRleHRGb250RnVuY3MpIHsKKyAgICAgICAgaGFyZmJ1enpDb3JlVGV4dEZvbnRG
dW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0
X2dseXBoX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOwor
ICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNv
cmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNvcmVUZXh0
Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5j
cywgZ2V0R2x5cGhFeHRlbnRzLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2lt
bXV0YWJsZShoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhh
cmZidXp6Q29yZVRleHRGb250RnVuY3M7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURh
dGEodm9pZCogdXNlckRhdGEpCit7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZEYXRhUmVmPih1c2VyRGF0YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisK
K3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZidXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZh
Y2UsIGhiX3RhZ190IHRhZywgdm9pZCogdXNlckRhdGEpCit7CisgICAgRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odXNl
ckRhdGEpOworICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEtPmN0Rm9udCgpOwor
ICAgIENGRGF0YVJlZiBjZkRhdGEgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCB0YWcsIGtDVEZv
bnRUYWJsZU9wdGlvbk5vT3B0aW9ucyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9
IENGRGF0YUdldExlbmd0aChjZkRhdGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBI
Ql9NRU1PUllfTU9ERV9SRUFET05MWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2Fz
dDxfX0NGRGF0YSo+KGNmRGF0YSkpLCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90
KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFjZSA9IGhi
X2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMoaGFyZmJ1enpDb3JlVGV4dEdldFRhYmxlLCBtX3BsYXRm
b3JtRGF0YSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNlOworfQorCito
Yl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJfZm9udF90KiBm
b250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250
LCBoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAg
ICBjb25zdCBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKKyAgICBoYl9mb250
X3NldF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8
IDE2KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9u
dCwgc2NhbGUsIHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAg
IHJldHVybiBmb250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNy
ZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAg
IHJldHVybiBDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzJmOGE4MWM1
YTdjYWQxZWI0OGNiODEwZDMzNzlkN2I3NzIzZWEzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNw
cApAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6
elNoYXBlci5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJB
d2FyZVRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJoYi1p
Y3UuaCIKKyNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGhiX3Bvc2l0aW9u
X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkgLyAoMSA8
PCAxNik7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpSdW4odW5z
aWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGhiX2J1ZmZlcl90
KiBoYXJmYnV6ekJ1ZmZlcikKKyAgICA6IG1fbnVtQ2hhcmFjdGVycyhudW1DaGFyYWN0ZXJzKQor
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQoreworICAgIG1fbnVtR2x5cGhzID0gaGJfYnVm
ZmVyX2dldF9sZW5ndGgoaGFyZmJ1enpCdWZmZXIpOworICAgIG1fZ2x5cGhzLnJlc2l6ZShtX251
bUdseXBocyk7CisgICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fb2Zm
c2V0cy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4LnJl
c2l6ZShtX251bUdseXBocyk7CisgICAgbV9sb2dDbHVzdGVycy5yZXNpemUobV9udW1DaGFyYWN0
ZXJzKTsKKworICAgIGhiX2dseXBoX2luZm9fdCogaW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBo
X2luZm9zKGhhcmZidXp6QnVmZmVyLCAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1HbHlwaHM7ICsraSkKKyAgICAgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhbaV0gPSBp
bmZvc1tpXS5jbHVzdGVyOworCisgICAgLy8gRmlsbCBsb2dpY2FsIGNsdXN0ZXJzCisgICAgdW5z
aWduZWQgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG1fbnVtR2x5cGhzKSB7CisgICAg
ICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgd2hpbGUgKG5leHRJ
bmRleCA8IG1fbnVtR2x5cGhzICYmIGluZm9zW2luZGV4XS5jbHVzdGVyID09IGluZm9zW25leHRJ
bmRleF0uY2x1c3RlcikKKyAgICAgICAgICAgICsrbmV4dEluZGV4OworICAgICAgICBpZiAocnRs
KCkpIHsKKyAgICAgICAgICAgIGludCBuZXh0Q2x1c3RlciA9IG5leHRJbmRleCA8IG1fbnVtR2x5
cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogLTE7CisgICAgICAgICAgICBmb3IgKGlu
dCBqID0gaW5mb3NbaW5kZXhdLmNsdXN0ZXI7IGogPiBuZXh0Q2x1c3RlcjsgLS1qKQorICAgICAg
ICAgICAgICAgIG1fbG9nQ2x1c3RlcnNbal0gPSBpbmRleDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG5leHRDbHVzdGVyID0gbmV4dEluZGV4IDwgbV9udW1HbHlwaHMg
PyBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIgOiBtX251bUNoYXJhY3RlcnM7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBpbmZvc1tpbmRleF0uY2x1c3RlcjsgaiA8IG5leHRDbHVzdGVy
OyArK2opCisgICAgICAgICAgICAgICAgbV9sb2dDbHVzdGVyc1tqXSA9IGluZGV4OworICAgICAg
ICB9CisgICAgICAgIGluZGV4ID0gbmV4dEluZGV4OworICAgIH0KK30KKwordm9pZCBIYXJmQnV6
elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4
LCB1aW50MTZfdCBnbHlwaElkLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBhZHZhbmNlKQorewor
ICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoSWQ7CisgICAgbV9vZmZzZXRzW2luZGV4XS5zZXQo
eCwgeSk7CisgICAgbV9hZHZhbmNlc1tpbmRleF0gPSBhZHZhbmNlOworfQorCitpbnQgSGFyZkJ1
enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihpbnQgdGFy
Z2V0WCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhcmdldFgpIDw9IG1f
d2lkdGgpOworICAgIGludCBjdXJyZW50WCA9IDA7CisgICAgZmxvYXQgcHJldkFkdmFuY2UgPSAw
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUdseXBoczsgKytpKSB7CisgICAg
ICAgIGZsb2F0IGN1cnJlbnRBZHZhbmNlID0gbV9hZHZhbmNlc1tpXSAvIDIuMDsKKyAgICAgICAg
aW50IG5leHRYID0gY3VycmVudFggKyByb3VuZGYocHJldkFkdmFuY2UgKyBjdXJyZW50QWR2YW5j
ZSk7CisgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgp
CisgICAgICAgICAgICByZXR1cm4gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhbaV0gKyAocnRsKCkg
PyAxIDogMCk7CisgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7CisgICAgICAgIHByZXZBZHZhbmNl
ID0gY3VycmVudEFkdmFuY2U7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bCgpID8gMCA6IG1fbnVt
Q2hhcmFjdGVyczsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6eFBvc2l0
aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBBU1NFUlQob2Zmc2V0IDwgbV9u
dW1DaGFyYWN0ZXJzKTsKKyAgICB1bnNpZ25lZCBnbHlwaEluZGV4ID0gbV9sb2dDbHVzdGVyc1tv
ZmZzZXRdOworICAgIEFTU0VSVChnbHlwaEluZGV4IDwgbV9udW1HbHlwaHMpOworICAgIGZsb2F0
IHBvc2l0aW9uID0gbV9vZmZzZXRzW2dseXBoSW5kZXhdLngoKTsKKyAgICBpZiAocnRsKCkpCisg
ICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAgcmV0dXJuIHJv
dW5kZihwb3NpdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBV
Q2hhciogc291cmNlLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCit7CisgICAgaW50
IHBvc2l0aW9uID0gMDsKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgLy8gSXRlcmF0ZSBj
aGFyYWN0ZXJzIGluIHNvdXJjZSBhbmQgbWlycm9yIGNoYXJhY3RlciBpZiBuZWVkZWQuCisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwor
ICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKHNv
dXJjZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgICAgIGlmIChGb250
Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKKyAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsK
KyAgICAgICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3Rlcikp
CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgVTE2X0FQ
UEVORChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7Cisg
ICAgICAgIEFTU0VSVCghZXJyb3IpOworICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsK
KyAgICB9Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldE5vcm1hbGl6ZWRCdWZmZXIoKQor
eworICAgIC8vIE5vcm1hbGl6ZSB0aGUgdGV4dCBydW4gaW4gdHdvIHdheXM6CisgICAgLy8gMSkg
Q29udmVydCB0aGUgfG9yaWdpbmFsUnVufCB0byBORkMgbm9ybWFsaXplZCBmb3JtIGlmIGNvbWJp
bmluZyBkaWFjcml0aWNhbCBtYXJrcworICAgIC8vIChVKzAzMDAuLikgYXJlIHVzZWQgaW4gdGhl
IHJ1bi4gVGhpcyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSBzaW5jZSBtb3N0IE9wZW5UeXBlCisg
ICAgLy8gZm9udHMgKGUuZy4sIEFyaWFsKSBkb24ndCBoYXZlIHN1YnN0aXR1dGlvbiBydWxlcyBm
b3IgdGhlIGRpYWNyaXRpY2FsIG1hcmtzIGluCisgICAgLy8gdGhlaXIgR1NVQiB0YWJsZXMuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBpY3U6Ok5vcm1hbGl6ZXI6
OmlzTm9ybWFsaXplZChVTk9STV9ORkMpIEFQSSBoZXJlIHNpbmNlCisgICAgLy8gdGhlIEFQSSBy
ZXR1cm5zIEZBTFNFICg9IG5vdCBub3JtYWxpemVkKSBmb3IgY29tcGxleCBydW5zIHRoYXQgZG9u
J3QgcmVxdWlyZSBORkMKKyAgICAvLyBub3JtYWxpemF0aW9uIChlLmcuLCBBcmFiaWMgdGV4dCku
IFVubGVzcyB0aGUgcnVuIGNvbnRhaW5zIHRoZSBkaWFjcml0aWNhbCBtYXJrcywKKyAgICAvLyBI
YXJmQnV6eiB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB1cyB1c2luZyB0aGUgR1NVQiB0YWJs
ZS4KKyAgICAvLyAyKSBDb252ZXJ0IHNwYWNpbmcgY2hhcmFjdGVycyBpbnRvIHBsYWluIHNwYWNl
cywgYXMgc29tZSBmb250cyB3aWxsIHByb3ZpZGUgZ2x5cGhzCisgICAgLy8gZm9yIGNoYXJhY3Rl
cnMgbGlrZSAnXG4nIG90aGVyd2lzZS4KKworICAgIC8vIENvbnZlcnQgdG8gTkZDIGZvcm0gaWYg
dGhlIHRleHQgaGFzIGRpYWNyaXRpY2FsIG1hcmtzLgorICAgIGljdTo6VW5pY29kZVN0cmluZyBu
b3JtYWxpemVkU3RyaW5nOworICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcnVuLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
VUNoYXIgY2ggPSBtX3J1bltpXTsKKyAgICAgICAgaWYgKDo6dWJsb2NrX2dldENvZGUoY2gpID09
IFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1MpIHsKKyAgICAgICAgICAgIGljdTo6
Tm9ybWFsaXplcjo6bm9ybWFsaXplKGljdTo6VW5pY29kZVN0cmluZyhtX3J1bi5jaGFyYWN0ZXJz
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3J1bi5sZW5ndGgo
KSksIFVOT1JNX05GQywgMCAvKiBubyBvcHRpb25zICovLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN0cmluZywgZXJyb3IpOworICAgICAgICAgICAg
aWYgKFVfRkFJTFVSRShlcnJvcikpCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZFN0cmluZy5y
ZW1vdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Tm9ybWFsaXplIHNwYWNlcy4KKyAgICBjb25zdCBVQ2hhciogc291cmNlVGV4dDsKKyAgICBpZiAo
bm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9ub3JtYWxpemVkQnVmZmVy
TGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgICAgIHNvdXJjZVRleHQgPSBtX3J1bi5jaGFy
YWN0ZXJzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
ID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IG5vcm1h
bGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CisgICAgfQorCisgICAgbV9ub3JtYWxpemVkQnVmZmVy
ID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoICsgMV0p
OworICAgIG5vcm1hbGl6ZVNwYWNlcyhzb3VyY2VUZXh0LCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0
KCksIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJm
QnV6elNoYXBlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4pCisgICAgOiBt
X2ZvbnQoZm9udCkKKyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fc3RhcnRJbmRleE9mQ3VycmVu
dFJ1bigwKQorICAgICwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuKDApCisgICAgLCBtX2hh
cmZidXp6QnVmZmVyKDApCisgICAgLCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudChmb250LT53b3Jk
U3BhY2luZygpKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKGZvbnQtPmxldHRlclNwYWNpbmcoKSkK
K3sKKyAgICBzZXROb3JtYWxpemVkQnVmZmVyKCk7CisgICAgc2V0Rm9udEZlYXR1cmVzKCk7Cisg
ICAgc2V0UGFkZGluZyhydW4uZXhwYW5zaW9uKCkpOworfQorCitIYXJmQnV6elNoYXBlcjo6fkhh
cmZCdXp6U2hhcGVyKCkKK3sKKyAgICBpZiAobV9oYXJmYnV6ekJ1ZmZlcikKKyAgICAgICAgaGJf
YnVmZmVyX2Rlc3Ryb3kobV9oYXJmYnV6ekJ1ZmZlcik7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFw
ZXI6OnNldEZvbnRGZWF0dXJlcygpCit7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlm
ICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVz
ID0gc2V0dGluZ3MtPnNpemUoKTsKKyAgICBtX2ZlYXR1cmVzLnJlc2l6ZShudW1GZWF0dXJlcyk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgVUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7
CisgICAgICAgIG1fZmVhdHVyZXNbaV0udGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdb
Ml0sIHRhZ1szXSk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udmFsdWUgPSBzZXR0aW5ncy0+YXQo
aSkudmFsdWUoKTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5zdGFydCA9IDA7CisgICAgICAgIG1f
ZmVhdHVyZXNbaV0uZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBib29sIGlzQ29kZXBvaW50U3BhY2UoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJl
dHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnOworfQorCitib29sIEhh
cmZCdXp6U2hhcGVyOjppc1dvcmRFbmQodW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gVGhpcyBj
b3VsZCByZWZlciBhIGhpZ2gtc3Vycm9nYXRlLCBidXQgc2hvdWxkIHdvcmsuCisgICAgcmV0dXJu
IGluZGV4ICYmIGlzQ29kZXBvaW50U3BhY2UobV9ub3JtYWxpemVkQnVmZmVyW2luZGV4XSkgJiYg
IWlzQ29kZXBvaW50U3BhY2UobV9ub3JtYWxpemVkQnVmZmVyW2luZGV4IC0gMV0pOworfQorCisv
LyBzZXRQYWRkaW5nIHNldHMgYSBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIGRpc3RyaWJ1dGVkIGFj
cm9zcyB0aGUgVGV4dFJ1bi4KKy8vIFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0Lgor
dm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0UGFkZGluZyhpbnQgcGFkZGluZykKK3sKKyAgICBtX3Bh
ZGRpbmcgPSBwYWRkaW5nOworICAgIG1fcGFkRXJyb3IgPSAwOworICAgIGlmICghbV9wYWRkaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZlIHBhZGRpbmcgdG8gZGlzdHJp
YnV0ZSwgdGhlbiB3ZSB0cnkgdG8gZ2l2ZSBhbiBlcXVhbAorICAgIC8vIGFtb3VudCB0byBlYWNo
IHNwYWNlLiBUaGUgbGFzdCBzcGFjZSBnZXRzIHRoZSBzbWFsbGVyIGFtb3VudCwgaWYKKyAgICAv
LyBhbnkuCisgICAgdW5zaWduZWQgbnVtV29yZEVuZHMgPSAwOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlm
IChpc1dvcmRFbmQoaSkpCisgICAgICAgICAgICBudW1Xb3JkRW5kcysrOworICAgIH0KKworICAg
IGlmIChudW1Xb3JkRW5kcykKKyAgICAgICAgbV9wYWRQZXJXb3JkQnJlYWsgPSBtX3BhZGRpbmcg
LyBudW1Xb3JkRW5kczsKKyAgICBlbHNlCisgICAgICAgIG1fcGFkUGVyV29yZEJyZWFrID0gMDsK
K30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKCkKK3sK
KyAgICBpbnQgd29yZEJyZWFrU3BhY2luZyA9IG1fd29yZFNwYWNpbmdBZGp1c3RtZW50OworCisg
ICAgaWYgKG1fcGFkZGluZyA+IDApIHsKKyAgICAgICAgaW50IHRvUGFkID0gcm91bmRmKG1fcGFk
UGVyV29yZEJyZWFrICsgbV9wYWRFcnJvcik7CisgICAgICAgIG1fcGFkRXJyb3IgKz0gbV9wYWRQ
ZXJXb3JkQnJlYWsgLSB0b1BhZDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3BhZGRpbmcgPCB0
b1BhZCkKKyAgICAgICAgICAgIHRvUGFkID0gbV9wYWRkaW5nOworICAgICAgICBtX3BhZGRpbmcg
LT0gdG9QYWQ7CisgICAgICAgIHdvcmRCcmVha1NwYWNpbmcgKz0gdG9QYWQ7CisgICAgfQorICAg
IHJldHVybiB3b3JkQnJlYWtTcGFjaW5nOworfQorCitib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFw
ZShHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgbV90b3RhbFdpZHRoID0gMDsKKyAg
ICB3aGlsZSAoc2V0dXBIYXJmQnV6elJ1bigpKSB7CisgICAgICAgIGlmICghc2hhcGVIYXJmQnV6
elJ1bigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRHbHlwaFBvc2l0
aW9uc0ZvckhhcmZCdXp6UnVuKGdseXBoQnVmZmVyKTsKKyAgICB9CisKKyAgICBpZiAoIW1faGFy
ZmJ1enpSdW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6OnNldHVwSGFyZkJ1enpSdW4oKQoreworICAg
IG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biArPSBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW47
CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHRleHQgdG8gdGFrZSB0aGUgbGFyZ2VzdCBy
YW5nZSB0aGF0IHN0YXlzIHdpdGhpbgorICAgIC8vIGEgc2luZ2xlIGZvbnQuCisgICAgaW50IGVu
ZE9mUnVuSW5kZXggPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggLSBtX3N0YXJ0SW5kZXhPZkN1
cnJlbnRSdW47CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKG1f
bm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgMCwgZW5k
T2ZSdW5JbmRleCwgZW5kT2ZSdW5JbmRleCk7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAg
dW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CisgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNo
YXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
Y3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSkuZm9udERhdGE7CisgICAgVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9fRVJS
T1I7CisgICAgVVNjcmlwdENvZGUgY3VycmVudFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNo
YXJhY3RlciwgJmVycm9yQ29kZSk7CisgICAgaWYgKFVfRkFJTFVSRShlcnJvckNvZGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGN1cnJlbnRTY3JpcHQgPT0gVVNDUklQVF9JTkhF
UklURUQpCisgICAgICAgIGN1cnJlbnRTY3JpcHQgPSBVU0NSSVBUX0NPTU1PTjsKKyAgICBmb3Ig
KGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFj
dGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKSkgewor
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgICAgIGlm
IChuZXh0Rm9udERhdGEgIT0gbV9jdXJyZW50Rm9udERhdGEpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgVVNjcmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJh
Y3RlciwgJmVycm9yQ29kZSk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGN1cnJlbnRTY3JpcHQgPT0gbmV4
dFNjcmlwdCB8fCBuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEIHx8IG5leHRTY3JpcHQg
PT0gVVNDUklQVF9DT01NT04pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1
cnJlbnRTY3JpcHQgPT0gVVNDUklQVF9DT01NT04pCisgICAgICAgICAgICBjdXJyZW50U2NyaXB0
ID0gbmV4dFNjcmlwdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0
ZXIoKTsKKworICAgIGlmICghbV9oYXJmYnV6ekJ1ZmZlcikgeworICAgICAgICBtX2hhcmZidXp6
QnVmZmVyID0gaGJfYnVmZmVyX2NyZWF0ZSgpOworICAgICAgICBoYl9idWZmZXJfc2V0X3VuaWNv
ZGVfZnVuY3MobV9oYXJmYnV6ekJ1ZmZlciwgaGJfaWN1X2dldF91bmljb2RlX2Z1bmNzKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBoYl9idWZmZXJfcmVzZXQobV9oYXJmYnV6ekJ1ZmZlcik7Cisg
ICAgaGJfYnVmZmVyX3NldF9zY3JpcHQobV9oYXJmYnV6ekJ1ZmZlciwgaGJfaWN1X3NjcmlwdF90
b19zY3JpcHQoY3VycmVudFNjcmlwdCkpOworCisgICAgLy8gV2ViS2l0IGFsd2F5cyBzZXRzIGRp
cmVjdGlvbiB0byBMVFIgZHVyaW5nIHdpZHRoIGNhbGN1bGF0aW9uLgorICAgIC8vIFdlIG9ubHkg
c2V0IGRpcmVjdGlvbiB3aGVuIGRpcmVjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBSVEwgc28g
dGhhdAorICAgIC8vIHByZXZlbnRuZyB3cm9uZyB3aWR0aCBjYWxjdWxhdGlvbi4KKyAgICBpZiAo
bV9ydW4ucnRsKCkpCisgICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKG1faGFyZmJ1enpC
dWZmZXIsIEhCX0RJUkVDVElPTl9SVEwpOworCisgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhp
cyBydW4gbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMuCisgICAgLy8gbmV4dFNj
cmlwdFJ1bigpIHdpbGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhlIHNhbWUgY2FzZSwgYmVj
YXVzZSBhCisgICAgLy8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwtY2FwcyBtb2RlIGFsd2F5
cyByZXN1bHRzIGluIGRpZmZlcmVudAorICAgIC8vIEZvbnREYXRhLCBzbyB3ZSBvbmx5IG5lZWQg
dG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCisgICAgaWYgKG1fZm9udC0+aXNT
bWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW21fc3RhcnRJbmRleE9m
Q3VycmVudFJ1bl0pKSB7CisgICAgICAgIFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3Jt
YWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJh
Y3RlcnNPZkN1cnJlbnRSdW4pOworICAgICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7CisgICAg
ICAgIG1fY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBw
ZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERhdGE7CisgICAgICAgIGhi
X2J1ZmZlcl9hZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgdXBwZXJUZXh0LmNoYXJhY3RlcnMo
KSwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251bUNoYXJhY3RlcnNPZkN1cnJl
bnRSdW4pOworICAgIH0gZWxzZQorICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KG1faGFyZmJ1
enpCdWZmZXIsIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVu
dFJ1biwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251bUNoYXJhY3RlcnNPZkN1
cnJlbnRSdW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6
OnNoYXBlSGFyZkJ1enpSdW4oKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0
YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZtX2N1cnJlbnRGb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkpOworICAgIEhhcmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFy
ZmJ1enpGYWNlKCk7CisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aGJfZm9udF90KiBoYXJmYnV6ekZvbnQgPSBmYWNlLT5jcmVhdGVGb250KCk7CisgICAgaGJfc2hh
cGUoaGFyZmJ1enpGb250LCBtX2hhcmZidXp6QnVmZmVyLCBtX2ZlYXR1cmVzLnNpemUoKSA+IDAg
PyBtX2ZlYXR1cmVzLmRhdGEoKSA6IDAsIG1fZmVhdHVyZXMuc2l6ZSgpKTsKKyAgICBoYl9mb250
X2Rlc3Ryb3koaGFyZmJ1enpGb250KTsKKyAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1
enpSdW46OmNyZWF0ZShtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlv
bigpLCBtX2hhcmZidXp6QnVmZmVyKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSGFy
ZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyKQoreworICAgIGhiX2dseXBoX2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1
ZmZlcl9nZXRfZ2x5cGhfaW5mb3MobV9oYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAgaGJfZ2x5cGhf
cG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9u
cyhtX2hhcmZidXp6QnVmZmVyLCAwKTsKKyAgICBIYXJmQnV6elJ1biogY3VycmVudFJ1biA9IG1f
aGFyZmJ1enpSdW5zLmxhc3QoKS5nZXQoKTsKKworICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1
cnJlbnRSdW4tPm51bUdseXBocygpOworICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CisgICAg
ZmxvYXQgbmV4dE9mZnNldFggPSBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9u
c1swXS54X29mZnNldCk7CisgICAgZmxvYXQgbmV4dE9mZnNldFkgPSAtaGFyZmJ1enpQb3NpdGlv
blRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbMF0ueV9vZmZzZXQpOworICAgIC8vIEhhcmZCdXp6IHJl
dHVybnMgdGhlIHNoYXBpbmcgcmVzdWx0IGluIHZpc3VhbCBvcmRlci4gV2UgbmVlZCBub3QgdG8g
ZmxpcCB0aGVtIGZvciBSVEwuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkgeworICAgICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKKyAgICAg
ICAgdWludDE2X3QgZ2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKKyAgICAgICAgZmxv
YXQgb2Zmc2V0WCA9IG5leHRPZmZzZXRYOworICAgICAgICBmbG9hdCBvZmZzZXRZID0gbmV4dE9m
ZnNldFk7CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChn
bHlwaFBvc2l0aW9uc1tpXS54X2FkdmFuY2UpOworICAgICAgICBuZXh0T2Zmc2V0WCA9IHJ1bkVu
ZCA/IDAgOiBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueF9v
ZmZzZXQpOworICAgICAgICBuZXh0T2Zmc2V0WSA9IHJ1bkVuZCA/IDAgOiAtaGFyZmJ1enpQb3Np
dGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaSArIDFdLnlfb2Zmc2V0KTsKKworICAgICAgICB1
bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXggPSBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4g
KyBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7CisgICAgICAgIGJvb2wgaXNDbHVzdGVyRW5kID0gcnVu
RW5kIHx8IGdseXBoSW5mb3NbaV0uY2x1c3RlciAhPSBnbHlwaEluZm9zW2kgKyAxXS5jbHVzdGVy
OworICAgICAgICBmbG9hdCBzcGFjaW5nID0gaXNDbHVzdGVyRW5kID8gbV9sZXR0ZXJTcGFjaW5n
IDogMDsKKworICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hh
cmFjdGVySW5kZXgpKQorICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVXb3JkQnJlYWtT
cGFjaW5nKCk7CisKKyAgICAgICAgaWYgKG1fY3VycmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNw
YWNlR2x5cGgoZ2x5cGgpKSB7CisgICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBv
c2l0aW9ucyhpLCBnbHlwaCwgMCwgMCwgMCk7CisgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIp
CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgbV9jdXJyZW50Rm9udERh
dGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZSgwLCAwKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGFkdmFuY2UgKz0gc3BhY2luZzsKKyAgICAgICAgY3Vy
cmVudFJ1bi0+c2V0R2x5cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIHRvdGFsQWR2YW5jZSArIG9m
ZnNldFgsIG9mZnNldFksIGFkdmFuY2UpOworICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlICsgbmV4dE9mZnNldFggLSBv
ZmZzZXRYOworICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWSA9IG5leHRPZmZzZXRZIC0g
b2Zmc2V0WTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZv
bnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSkpOworICAgICAgICB9CisKKyAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7Cisg
ICAgfQorICAgIGN1cnJlbnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFs
QWR2YW5jZSA6IDAuMCk7CisgICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7
Cit9CisKK2ludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0
WCkKK3sKKyAgICBpbnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKKyAgICBpbnQgY3VycmVudFggPSAw
OworCisgICAgaWYgKG1fcnVuLnJ0bCgpKSB7CisgICAgICAgIGNoYXJhY3RlcnNTb0ZhciA9IG1f
bm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1faGFyZmJ1enpS
dW5zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29G
YXIgLT0gbV9oYXJmYnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGlu
dCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgICAg
ICAgICBpZiAoY3VycmVudFggPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IG5leHRYKSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2Ny
aXB0IHJ1bi4KKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1
enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgp
OworICAgICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJm
YnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudFggPD0gdGFyZ2V0
WCAmJiB0YXJnZXRYIDw9IG5leHRYKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW5kZXggPSBtX2hhcmZidXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24odGFy
Z2V0WCAtIGN1cnJlbnRYKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFy
ICsgaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0g
bV9oYXJmYnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGN1cnJlbnRY
ID0gbmV4dFg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFy
OworfQorCitGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgaW50
IGZyb21YID0gLTEsIHRvWCA9IC0xOworICAgIGludCBjdXJyZW50WCA9IDA7CisgICAgLy8gSXRl
cmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcg
Zm9yIHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaW50IG51bUNoYXJhY3RlcnMgPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICBpZiAoZnJvbVggPT0gLTEgJiYgZnJvbSA+PSAwICYmIGZyb20gPCBudW1DaGFy
YWN0ZXJzKQorICAgICAgICAgICAgZnJvbVggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9u
Rm9yT2Zmc2V0KGZyb20pICsgY3VycmVudFg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZy
b20gLT0gbnVtQ2hhcmFjdGVyczsKKworICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAg
JiYgdG8gPCBudW1DaGFyYWN0ZXJzKQorICAgICAgICAgICAgdG9YID0gbV9oYXJmYnV6elJ1bnNb
aV0tPnhQb3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdG8gLT0gbnVtQ2hhcmFjdGVyczsKKworICAgICAgICBpZiAoZnJvbVggIT0gLTEg
JiYgdG9YICE9IC0xKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGN1cnJlbnRYICs9IG1f
aGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBp
biBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9
PSAtMSkKKyAgICAgICAgZnJvbVggPSAwOworICAgIGlmICh0b1ggPT0gLTEpCisgICAgICAgIHRv
WCA9IG1fcnVuLnJ0bCgpID8gMCA6IG1fdG90YWxXaWR0aDsKKworICAgIEFTU0VSVChmcm9tWCAh
PSAtMSAmJiB0b1ggIT0gLTEpOworCisgICAgaWYgKGZyb21YIDwgdG9YKQorICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBo
ZWlnaHQpOworICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgdG9YLCBwb2ludC55KCks
IGZyb21YIC0gdG9YLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTI2ZWZhZjcxNzQ5ZDU3ODQ1ZjJjMWM0
OWYyNzIzOWZkY2EyNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaApAQCAtMCwwICsxLDEyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSGFyZkJ1enpTaGFwZXJfaAorI2RlZmluZSBIYXJmQnV6elNoYXBlcl9oCisKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiaGIuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBTaW1wbGVGb250RGF0
YTsKKworY2xhc3MgSGFyZkJ1enpTaGFwZXIgeworcHVibGljOgorICAgIEhhcmZCdXp6U2hhcGVy
KGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJik7CisgICAgfkhhcmZCdXp6U2hhcGVyKCk7CisK
KyAgICBib29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIGZsb2F0IHRvdGFsV2lkdGgo
KSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxv
YXQgdGFyZ2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2lu
dCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2YXRlOgorICAgIGNsYXNz
IEhhcmZCdXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEhh
cmZCdXp6UnVuPiBjcmVhdGUodW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24sIGhiX2J1ZmZlcl90KiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBi
dWZmZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnMo
dW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
KTsKKyAgICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7
IH0KKworICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgp
OworICAgICAgICBpbnQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAg
ICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2hhcmFj
dGVyczsgfQorICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX251
bUdseXBoczsgfQorICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMs
IFRleHREaXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1
cm4gbV9kaXJlY3Rpb24gPT0gUlRMOyB9CisKKyAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVy
czsKKyAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CisgICAgICAgIFRleHREaXJlY3Rpb24g
bV9kaXJlY3Rpb247CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoczsKKyAg
ICAgICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9h
dFBvaW50LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1f
bG9nQ2x1c3RlcnM7CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFy
YWN0ZXJJbmRleDsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisgICAgdm9pZCBz
ZXROb3JtYWxpemVkQnVmZmVyKCk7CisgICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKKyAgICBi
b29sIGlzV29yZEVuZCh1bnNpZ25lZCBpbmRleCk7CisgICAgaW50IGRldGVybWluZVdvcmRCcmVh
a1NwYWNpbmcoKTsKKyAgICB2b2lkIHNldFBhZGRpbmcoaW50KTsKKworICAgIGJvb2wgc2V0dXBI
YXJmQnV6elJ1bigpOworICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bigpOworICAgIHZvaWQgc2V0
R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciopOworCisgICAgR2x5cGhC
dWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOworCisg
ICAgY29uc3QgRm9udCogbV9mb250OworICAgIE93bkFycmF5UHRyPFVDaGFyPiBtX25vcm1hbGl6
ZWRCdWZmZXI7CisgICAgdW5zaWduZWQgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgIGNv
bnN0IFRleHRSdW4mIG1fcnVuOworICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1fZmVhdHVy
ZXM7CisgICAgdW5zaWduZWQgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuOworICAgIHVuc2lnbmVk
IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bV9jdXJyZW50Rm9udERhdGE7CisgICAgaGJfYnVmZmVyX3QqIG1faGFyZmJ1enpCdWZmZXI7Cisg
ICAgVmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsKKworICAg
IGludCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudDsKKyAgICBpbnQgbV9sZXR0ZXJTcGFjaW5nOwor
ICAgIGZsb2F0IG1fcGFkZGluZzsKKyAgICBmbG9hdCBtX3BhZFBlcldvcmRCcmVhazsKKyAgICBm
bG9hdCBtX3BhZEVycm9yOworICAgIGZsb2F0IG1fdG90YWxXaWR0aDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhhcmZCdXp6U2hhcGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAKaW5kZXggYzNkZGExNTVhNGY3ZmE1MzU5ZDI3ZDYxYWI1MTUwZmNjNWE4OWZiOC4u
YTcyNmRjMzRjMmZhZTJkZjVmYjZlM2I0ZDI2YWUxMTIxNDVlM2IxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAKQEAgLTM0LDEzICszNCwzMiBAQAogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVk
ZSAiSGFyZkJ1enpTaGFwZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3N0YXRpYyBib29s
IHByZWZlckhhcmZCdXp6KGNvbnN0IEZvbnQqIGZvbnQpCit7CisgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiA9IGZvbnQtPmZvbnREZXNjcmlwdGlvbigpOworICAgIHJldHVy
biBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0
dGluZ3MoKS0+c2l6ZSgpID4gMDsKK30KKyNlbmRpZgorCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBIYXJmQnV6elNoYXBlciBz
aGFwZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNoYXBlci5zZWxlY3Rpb25SZWN0KHBvaW50LCBoLCBmcm9tLCB0byk7CisgICAg
fQorI2VuZGlmCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVu
KTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CiAgICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKQEAgLTgyLDYgKzEwMSwxNiBAQCBmbG9hdCBG
b250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgaW50IGZyb20sIGludAogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgaWYgKHByZWZlckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOworICAgICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAg
ICAgaWYgKHNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKSB7CisgICAgICAgICAgICBkcmF3R2x5
cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAgICAgLy8gVGhpcyBnbHlwaCBidWZm
ZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBo
LgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogCkBAIC0xMDksNiArMTM4LDEzIEBAIHZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSCiAKIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKKyNp
ZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVySGFyZkJ1enoodGhpcykpIHsKKyAg
ICAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CisgICAgICAgIGlmIChzaGFw
ZXIuc2hhcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFwZXIudG90YWxXaWR0aCgpOworICAg
IH0KKyNlbmRpZgogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1
biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKICAgICAg
ICAgZ2x5cGhPdmVyZmxvdy0+dG9wID0gbWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWls
ZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5j
b21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKQEAgLTEyMSw2ICsx
NTcsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb24KIAogaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBIYXJmQnV6elNoYXBlciBzaGFw
ZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHNoYXBlci5vZmZzZXRGb3JQb3NpdGlvbih4KTsKKyAgICB9CisjZW5kaWYKICAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIHJldHVybiBj
b250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4YWIzNDI1NTMyM2VhZDQzNGU3MDc3YmY1MGEwYThlNzU0YTk4NTZjLi5iY2VhMzZk
NzU4ZjgzOTIyMDcyYTU1M2RiZDZjZjQyMzliNTI3NzM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTItMDEtMjcgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50IGZvbnQgc2hhcGluZyB3aXRoIGZvbnQtZmVhdHVy
ZS1zZXR0aW5ncyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5ODI2CisKKyAgICAgICAgQWRkZWQgdGhlIGV4cGVjdGF0aW9uIGZvciBzc3Mz
L2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmcuaHRtbC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLW1hYy9j
c3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQucG5nOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGlu
Z3MtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OiBSZW1vdmVkIGNzczMvZm9udC1mZWF0dXJlLXNl
dHRpbmdzLXJlbmRlcmluZy5odG1sLgorCiAyMDEyLTAxLTI5ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXNlcnZlZCBXb3JkIHRlc3RzIGZhaWwgb24g
Q2hyb21pdW0gYWZ0ZXIgcjEwNjE5OApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3Rl
ZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1
cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDgyZmI5NTQz
OWExOGE1YWE4YmIyNDNjYWMwZWJhY2RiOGY2M2ViCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx
NDk4MQp6Y21lSHRkMDNOWW57UkNVKW9IMHZzKD1mTil6MnlAQWVEV0t7WGBLRVExK2IpRDRQTTwq
QVRtKTJtKTRGNmE9YW0KemtTJm9WVkpFRXVRNHhfZjVTQTFvSjBYTX1MWHZZbyVyfHErb05zMlhZ
diM7OT1lcWlibW98a3JAQjYmPntrd241CnplZnkkP0B2aEpKZX4hVW1jQTE8dnZjaDBLSzhWNDU8
blR8USFZNWhiS1ZGQnc2aHFIQ2duSWcxQCQ/U34hKHB5Pwp6VWNJY05zb2AtJilBUThIRTA8NHRZ
RzN1eHk2a256ISVNXktxfVI5S00qUk42YVNZfWwjPkQ3NW81KTk7O2gyVz4KenVwSEZ8P3p6Knkt
UHhvND9CS3pmT0x4YDNKbXBwT3lII249d30oR0ROQGxDMmhnS1hiSmFQMkV0SWtlK0hDK3BgCnpO
fHdBLWRncGhRNzste2xnM3NrQVBkYD1zUlhTbmxAPUlZM0huIVg/Q2FeRWVKPGgzLU1ZYm9xXyM1
eXlUPVE2IQp6aE5hI0hCYFU8VWtLb0lINjZjMmYxJXRVa2xsJG5PRnFwZl44MkhmWkBDfHNEZnF5
IVAhSk85bzQ/WlRTP2VKPHoKemw7WFdWQmhnWjlUT3ZIUCU4eWZDNlpuazNOJDJyZEI0SCF4KTh0
YTtZOEFIXzRuPWQ9bzI/XmFYaWZ9TGFZLWBuCnp2RXt3fHFBUlhHVCh4NGFySE9XNF5LUSR1KnJD
NFFqKSR2THRoR3ZOKjJfVWtndmQ1NEZyOFQkRmtJKEF6MitFVwp6Z1MlQlI9cj5QWVE/b05BSGVH
V2dQakg1N2Y7PisrUnk7TUlza3I+fHJiQko7NihiYG15UnZOM2woPSFYR0M0aF4KemRtOz9pcnNK
Uz9MemJ8YEUxJTRiWCpEXlR2JlZoMkU3UE1lQ3A7MHFIbXFlfnUrcFF3K1ZBTihuRz0hWHpCTUw7
Cnp2d0NQSDxjYjZ8OSFuJShwPDhTSTxNKkZEO1dvTG1mK3FKaUpnc2k3cUhTeWBQcVk9fG5vTnVD
bTJabX00enIpRAp6b3kta2RZUypmRTlCN34xQjQpYTYrTWstfUZ5dnA4amg9Y09HKyNTT159fHcx
I2RLUHF4b2oqPWNCRCFrS0RWZCEKemAzOElTWmIqKCNzdH1MJEZWU2dtamFoUmlackJ3V1VffjFw
YE5wYThMMnlecHNOdXgpVmQpU3B4fC1idVYkJXNiCnpheDE1aUtWUDQzblAoVyh1RUQ0PiFJTnF5
dmI1S1JMZjk9Yj9zczs0e0hZTmhrMmYtTWlRNT9PQiR7UFR5Pz1hVwp6PT0jZkRsOUR7T2Y9SWhB
Zi00XnU3OFcjY0M5QD9AeExsWiF1LT1efit+WTE+JSorcCZlODxaWlpSQX5QRF5hKDwKeitNWHEp
QVg9eUFsU25FeiNwVSkjMzxWaCo4TkpRY1FXZUs7RSVabEM9Q0hGX1RVU3JHKUk0OSVOfW83V3Ep
RGF0CnpyRjZIMztnKW5CREQ2RlVeQDA8eyZ2ckJAUV5tRHdwWkI5bmsrRjJTaF5HZXZZOTRuNW1e
eEpseFlsdS1fQCsldwp6QEk1X25uPzNLfS0/Y0tHaE5KVGZhXnk2IU9tViltITZrfVohTEx5VSo7
cUdQOTZwK3p0VG1FVSt7bVNqP19+c14KemtkVzhjSHFUTm9HSm03MklxN19BZj1pRFFySVRaaSRs
O2VlbTQkcjJ6VzUxRjBGPkI9RVBzK29XNllZJE1vayVJCnpPfThed3p8WmBaNT5pdlVJIWBsUUR6
bDEjKlBwdWxRYkc5S3BxUDRRMEgrWiMkbHJVTVh5dlgrd3FJSjZrTldWLQp6Xmx8cU0pOWp2Y3Rk
TmNFYWBldGdBQmtpcVNJdl5ASEtSQ1ZOdmFsLXpldWFQeGtTenpWPmQ0KUNhOHhAeSF+ZC0KemFR
JTs7ZTgtd14rb243RWw3XnR2NmMyVFVGPGs4PD1oTi1vT2NhQyp4NEtWdD12VGc2WlJaem1Gcyhf
K3hVI013CnpXJjtWUXYtNWJ8TjVQJEVXbSpGMklkK1JIOXIqYld3YX1eZSgoIXI5JmVVZWIhYmV8
cT1yM0ooam1zcW5Ifk9oSwp6PWJxbCl2cXNHI0F4bCgkXzZsViF1RWZ7T0lsfnpqI2lkTkZvVXIz
VTFEKWxMR19wI1JuZ1NeKz0tP3ZlYHBadW0KekpEMm83M1k+bUdWQD1AQ29IPTc7Ryp7SmEoZlJt
SDhgLUM8TkBiNktMYD4/WEJrZ1UwWkpUPyNiN3pmVyowXzh9Cno9bDBQRlgxJk9pTHUwTzE4NEZD
KWh3VmJOKSpmQitiPU0zR0VWUmdCbVg3ZX1EbE0wMThMSDgxXkt2YG9CZnIxVAp6WGopN3M4e0hD
QCVXX0UlWTJEey1SMj91cFIqKVV3U0hZP0I/SCpHUWp3JSFAUmEoKXdiK2FVTUEpKWloUysjKG4K
em5pQEQ8a04pU0VeeyVtTTIjSTl8PElNZyhCfSY8YjE5ZT1zdzEjO3tSO09aYUhiKnhzRipSO0VV
eT9WIV4zdDhwCnpXUTxNYXI9fGNEWHcrS0ZRM25IKHB3Xy03KXkpKVprMGwmRmJqYWdQbnhkTTJV
K0Zya2FCYTl6UHI+R2pgS3E4WQp6UGpFdG93emIkXzd2fUYwSVUzSnY0fiNvPz11bHMmPEw9JHhU
dTJDdldnaUd5ZTBgTXVeSmx3MUMrRyFeRy15dmcKejNLe0QlUSUmWClNRXVUNT9+Y2ZzcUMhQn1v
ZUhyaFRUfG8/eFFqTCFZJnVwTEcqezFVM2lAcncmZ0skd2xhc0NVCnpueztPcTN3NCFmSEJjbU4/
OzIoYyYrJT5DUVp7UmtHSXRfN0Z2U3FSKl9AX200WXhZZVE/Jmh5blk2OSgzVntgQQp6JkxjNnx2
c1AxYEpsU2pTS0t5fSl6SXB3M2lNVEhuYDJGPGFuYVBCTm0wMVNldz1oUnEjeD9aUDllRCM/YlIr
a1YKelRCWnpDZFN7ay1kWS0hYUhsZl47LVV7dXRmQT4qfkowcCFUIztoajFYWH5BUFNOSjdFdlBE
JUwhMitBb2hURlQzCnpZRUdBQTJoPUhrRGpfZFJTMEtiVEVPKGl+Ml9LKlhXSHNsZjhham0hOXJE
eDVJNlRyZ3pjJERjaE5ISkZ0fj5RPgp6PGFvTmg1O2VjcEJQNEYxOyk7MXxnTj1LJlM5PVloP2ky
NWhUOzRfcCFPKUtFQ1AhT3VRR0hAaGJfPCMtciVUVT4KenB6VGhrPSp+UVFhcGF0YHFoKCoydmtY
OTwrbDU/eDloSTZ0ZXZJNmxFXkolSClxWlBRQ1lHRzs3Wkg8dWlLdUl6CnpLZzQzX1RDYDdJYTR5
fGxIcUZXP0UkbUk5XlJJfjhTRWtyOE5rZHlGPj9pZk80Vjd+bnI0TzdeVW5mTE56NS1tNwp6MXE0
OH4oWCFObWImbzh8Mj1UMH4kbkZAbiFyUWZQPGt3bnBCPzQlSSl4Xm9mVjI7MHVkeG4zWVhOU1I+
JU5HaVUKemBjMXMjeiYkaDBYNl9RUSs5eDtIeEMpWXojJlRnY19aZ3BsdkcrXjVlOVgwPjs1T3g3
dFA8Z1M5MDdNeHRDeHAhCnptPGI3fW89IU1iOVROdkFjKV93T0sydXhVKSZKdlAjS3hlfWtfSDNu
JWNpZyYpVlg7Y3srNnx4OFF1M05obzNBNQp6SXIqTF9uWGF6ejZURXU1YXBrflpGTjBDWVBTSH4t
Z0VefDl1S3JYXnJSTHp1Uk9qSWBtKWRWfTB+SlNoOW5kVSYKeiZTQjdtRF48OGJZTVBibCREZSsy
OV5TZiY8QV98dSZAWn43UXhfd0wwOVI5PjE0M3Vacy1AcV5zZCpVZkg7NHszCnpSVX5Abk10eUBX
Q0t2cWJZdjBZfj5GRm0pRHlIT3lNYm5ac3t2PWtVQk56Rns1N1dQV0VPN3k5PVhfZyt2ZXszYwp6
P2xTZXghLXJwMU5NfkE9NGgwTFN6VEV7P0BQWjMmRGEyX0wpNEpCMCkqNkBMTUteZ3g7clhrJCNZ
QGJvJml3OE4KellNIVI2WkR5KkNIV2hPb3JsXmVmbHo2bDBDM2E8fCZ8bHtiVnBkRCpeMm0qPSV3
PGNfdlpXJDElPytBeGtLe0MoCnp6dW9AaU0hUnM1I19IeFF4ZSNpJEBRMDZnN0RPI2c1UmN9P2Vr
JXV+d0ZzdSo1JnJDV3JuYCFzdUBhfSExKUg4Iwp6LU9kbF9kM01QY3srTGc2JFRUZylLVmpSTjZu
V3xwKTZsekV7dnxjYHVrRT04ZFN3cGZoanoqOSpQUSRgeXx1bn0KekJCV3tLZnM4KnROd3VrZU9v
UlJXck1RMD0kdWYzcV93O2hOcksqMEArREpeZFk4KT5xJjhtJVl6Y2Imc3V6dFItCno8YXVmbm8/
cWFacUVxMDVTNHpLQm53c2M0R1FUUkQ/PkRvUnVPSythRFd9VnlSal4tTHF1akF9Q2hzb2V1JCZt
KAp6UElQdS0/I29fTXt5Nm5HZ1Y2Z25IRiZaekUmTElJQjcxKnU0ZVJ5bHR+enczeTcjK0JSamZF
WjV5dHNiITJLUzUKenhBOFh0aDdvMmZqPklNN0J+QU5pIW9fKSlPR1M5Zj5KQGdoTXFyPytCQVI+
Q0ZUXytZQz0lN0x5aCNoP2JFPnQ5Cno/M01BWj8oUl9We2Ewe1dCYXhubzNDcGh6ciM/Kl5ZNG49
OVhRcEJ6YEFnaHRXZ2FvallJQjg1ODFAUlZNUCspPQp6JTJZeXM7ZEVqYD1zVFVzcnhJfXNLbHc3
TmUyPyZwOVlwSHhGLW55M01eMWV5WD5Tdz9UVnxNJXJUJWpENlVAMSMKektJZ3pqNFFqeWZlbUpQ
VzNwdShQaDZfSlBHYH5xZD96dVdRZkk0RUc2Ryg3Z3xFZEYrbEpvZ08keEdkSTlZOGwjCnpjMlF3
JnFNQiFgUUZGYiomWVpBNU5CSC1oTkkoYUt8Snh2Vl92PHJiS2t2M2tmTGhTfVI5dj15TXo5S0h5
RUA+Vgp6eDR2KS1Efm96P2o+MiRMXlhxeCQmPTQ3UFUobURKWDtUfEZKNShGO0N+RCRpZTQ3WDJK
VzB+Wk57KChvTXpad2gKem5IMnhncHpecWZkSnpHeUUwUHA3UXBUQVZpYH1XJTVuVDFLJE5PS3Vp
e0gzdGolN2gjQlhtemwqc0pieWFlMDFOCnprQlM/VmhRY24+Vz45Q2wzb1Z5OWdJWDUpeWtfbVc9
UCQ9Ujc1RU1wdmVYcWJsJTF1O1dLPlF0LU8oNVJPSEYyMQp6Qy1kaF4reSNGNmk/MHNIM25RMDFq
b0hBdUxPWGVXV2dXMi1yLURCR1YlI2JwR2JmcFVFP0hebEZUXmFLTitHSm8Kejdfd1dWUV5Rc0M3
YCQwYGt1SkllTmxBaWVqaTNOR2tQM3hpV1lxbGo7VkpmcWA8NXZROEQmUz9HRjRMQEUzZFl3Cnoo
UGdjbG5ib1IydnBKYG5SYkFpTWBpdjRybiZBNUhFMk8jfEg3JWtOezlQXm08eDx6OCNxSH02WVRB
ZndQaHNFVwp6Yll4fHBeMHFMaWUrVnpraTtJP3huSlpUZHtfdmAxRWIrTDw+dzhEa2ZaMWZWbVJK
R0I0SmF9ITJeSVF+eTcpZkAKelotYl88ZHhsQDJDdzZPOCFaUSFRZEsrZXFiWipIP3w1U2d1PVVm
d2lVUStVYHN5fX5kKG9pTnhGRzlzN1NPWkAyCnpkTTA1YnZwPEkwRDMqRDNJRjhSamdGa0VMcTh+
fH1gdSo9ZVBXMlI3eUlsWU1GR3NqMVk+TnE1PyhkdlAkPlRqMAp6O24oYkV3M1czb0IrSVpKUmdS
Yl83YDsjMlg+c0t1QSloWWZhfjBzYXd9RH5QVTtUMn1iOFI+eHdjOFNGJjsmRTUKemIpQ25+aGUx
QHtaSntTNnEtSlB3RVV8Km48KGJ+Jnk1VnlVa0BFe0xCfmxZMnUqe14kaHx3OG5afVMhTVJUfVZR
CnpeTz87YkJ4MWs2clBwJGVmRkZHa0FKaWdjemVsKFJzeip3PitKKUJKK3VRUWc8bz1paFZmfkI/
e0o7M3JfTX4rQwp6PGNhTj55YGw9MHdRNjBRbzI7UDRXdGErdjVMZWpaKFp5MEBtWnZWUUtkOSgo
QHBycWAlQWc+VSo7eU1oOE0qTkwKeiZaSmQpTzMyZTUhe2FOfk1OeHdfcylrRHNKQiZtXmZtcDt3
NFlieEVoamM4dGpSUk9YeHxyYkNUQXpqMmxJVGJ0Cno5TGRzUHImKEx2dTRjdjZVd15DWVFnZjFl
WlF2X0Y/cWdNdG92UTtSSjFiVmFwYnlvMi12N0coJDQ7ejZCbmR0fQp6R0hZWUx1VTlFVDc2Pihr
YG1UMml1Z3REJEVXPVNPKHlWWnpiM040REszI2U0aVl6SHl1NTRUekgkPWNpVTlqb1MKendXN0xM
RG9EbitVMnV5VVBsdE5Rc3lOV204O3JNYGUkP1lZVC0hUFJQSExSVj1tTCNhSnV3TElZKFEjUWQ/
VGthCno+Nl40PDt5R0wmaz9OVWhwZzlrOCYhT2h9V3pATGtPWWlqUEg5X3BMUEdnMVNPdDxMbTl6
c09ZSm5XYzt7cj51Pwp6Q3JLV0ZLanAjV1o/czIkLVc/dUV2bSs2aEdjaSZXUWJ+SlRLK2AqXmxH
KlN3eCUhbEp0KWgxQGBGQVQ0d1VeKFkKek5vbz9fJilmUno+Uj0kUDIxeiErb2dgcEdHUXpPcGox
KTROb1R8bCZKJXVRViFzaCMxel99THdfYE1VIyleNTFDCnp2fjBEJFE1bVNCcUQjeV4tYU9AWWlf
Sl9tTkF5d2ZhMlRVeW0pNmt4ND9pPCY4WndVQXVhMzFPQ0gyd3p3ZTlAUQp6bHQpdHdNbnFkM0Iz
VnkqTjsyWXRiKW5OPTBtYnlNYyRTeytLT1Z8cVlTZXx6UWVYYUY+dU5TfW97aEtid3JvK0sKekZB
PG0xWlFodjdRQHtlQjgoVkJzTypQTmZKaTloTz85WClmciZQJk57SEMrWWZpMUxyY0okR2dhS3xC
WWFCe298CnohZGdUcCNoKzJMKCZ4PFBSST5zVyR5bnVtLVEjVlVedV9WRSFeRW5XKj5ebWMhUl5K
WEhOS3BHZVlaVmRyVDUrVAp6VkVQLUJoM1N0LWd3IXlAcypjUiFvYiV9WjJIengyMUU4UjVxYzdg
S2NULWxaWEZgaXhENkkqOTlqYmxlIWU+NUYKelAxMmNvOzVvKmxFMk1eVzctKnFhXytwNkBXVmpF
Yy1jU1MhQUg/KTZaMjlvfHteM0pvSj1UYFYkSEApZlRJZ31BCnpVS3xabkU8M31uP0hVNDMlJlVR
NDh4dzhpaUZVSztzaWBzWndTfnBtZFI0WDxVdjN6c3lmNEt5OH47JVMlKUooSgp6Kyk5Wjw8eUdf
MVN8QzVJZjtFLWBQeXtFQ2ArcnJie2MhSUFBYT9eaWRrYFd1KVo7NVczJC0maHpxcC1kMUBlQDwK
ekZqUjQrJjExSCZPYnYjcUc9c01OSFYrJTgreVR1Izg4NkJTZXhyRHtUOXB3ZkNWaz5xWXwhKGI1
NyROX3BjfjVTCnpOYUpyKj5faz48aFg1PmIjPEFeem1YPTN6ZjtQOGQkcGVnemF2KGMzcGpiYUEr
aCtOWEghUXBtRTAxMjhjfG1LfAp6VkJGS2BpcD1YPndwTUhCJnktZmFPSDRrWCllMzM+JHFgYTk0
cCY2dkpVaT5weE8ze0FfRipCUENla0MoZ3F6eXoKekpFejhnUyl7X2IpNSEkRT5eR3YlTkE5VXtT
VHNVfFYwR3thP2ROX01YT2QmRHlqR2M5ZXFVY0xsU1U0STxuJn1uCnpfbVppOUEyQXB8YSpyM09J
KGVOaz50bl9rXnFZMHpZP1N0U1J5K1Y5LTNuRmF2QSFePmshKVhmaDAqMGJ7PzRTZwp6MGVkV3Ji
ZDFxTm9xfU4pJmVATCY9Pm9LNyt+V05fOHs1bmJUYClUR3RxVSM2TCNNbWVLT0R2R2xheiFDekFo
WDMKent5UX5MSmFWTXsmblYpX2xjczdRZUpvcjtKSUBBajhgb04hWnxeUUM0KU8ySG9uVkh6O3p9
dT1fU1RwSVY3PUV5Cno4Z3hjdG0paG1yXys2UHpkKkE+cT9pfG9rJHZFTm9SZyNRcTNLYEd3NTkr
XnN0MGhhcmUrPTMpSDZoe2duT20odgp6YlU3SXExYCRSTHtHYm5Rc3goPGVxQz5leWkjUSgtT2VY
KkY8SHkoNmUhT3BLcn4/I1dGQ3E/TmdLelYmU2FGPlgKemNWOEZ7UiRNV0FvIWFENyQlNXtZQjkk
YVh0fnRHSDYqKlpLRFl2eylXJnskcCphfWRWd355dX5wcUdRblhfaTR3CnotUTMqdEAkdTxAKyVX
cGA3WDVJbHsjWDdDUXU1Zyg9QCNoZz80SkI2VEg1alkyVCV7YiohSjBoRWdzTVlxIzVJIwp6Z3w7
KTNwcDt0WT4kJm9JVE9XP0hWUns1RWxFdWErb1lheUQhPWEhWmdOQjBXRW5uWX53V157T0tSaTZY
PlI2UFEKeipnb2hIUVZnflo4Z3ZnZGFaYnBWR04tYmhVcTE1KXc3ZTd7dGFfK2ltTilOdWs9b0o4
TnYmcC1eK2syWnpCNnRYCnpfWiheOWxzU1NaSihuc2tyP0NGcCZMP257YT9yQEZoJEleV04kP059
KSZoZW8wJHhYZDNtNHh1WEokJnNERzNxVwp6Z0IzN0w5aHpkSnRedUZBUmNCKjt1SDRYJTZqZVZN
YTtMYXhzV3RnUHcjI0RBZEp1KGZOQDRGUVhGdXw3Klg/OHEKemxiXyliTzg4QUB1UmkkU1QoemdS
WW9uQUdUZTkrQ0QxYVp2bGpPUGB6e1lLQEJZdEdnd2x5Q31vKHYjMURNd2lOCno0TmFKR0JAVVY5
OWUrYjFBSGZnQURqJWFaWHtvQz5LZm5CUHRmRWFOTmxkbGpyMVN9Z2l7JmNIRH5+MWMkSWQxMQp6
bSZ5WnJAQzBmd2V2K1BpS3hVXzA9ekRSTjdeeSY8SUFMbkVONXpwVEphYkRAKCV1fihDTDZhdGlr
ej16IVdOeU4KenUxSm0mKkBSZE8ySnt4JjI3JHJRezg5cXo1fWZWUypLMGNLdlEoIWpLV21yallV
XiVtc2ZlYXg0bHBUalZvM0cjCnpTIWdVUiFATikqbX1vcl5jKV8oaysrNlkoWGxkS14lanVKTzFq
QWk+UGFicTcydigrWlc5Q2laZ0UlSVhIc35nOQp6PzQleEMwe0JHNGBvdERnPFU9SHtLKEhXd0h5
VTZeO30zSllmVXxaMTZuMjllJW1nWCE5TFdLSlohdWdLVyhHUmMKenFJeCpveHN6SnVNVSVqOFU3
dndqJklDYTFNd2lPUHVNVmhSfEtxbkZVO3tgOEI7cGs5MUImN1hwK0AlV2hXZ0JPCno1elkydjw2
QCkjXytoNk5JNE5CcXVEWEQ3aDlCY1R6OW55SjVXUmRKPntrME0/SH5fYlh1R2JYaFA+UDhHV1Be
bAp6I2Q5OFNLenM/KiRzb1E/ZEIzez1xQWhZJVRtJH1EK1RTcnF4YVB3YmdAWSo9SWBQb0VwZ21n
KVQhV0M4dzxJamoKeishOG0+Yk98PXVvUjZTbzg/Rj50TzJzYFIrWXIqVDUydnA+bEpaUWA/Zm9v
fW4jemZ1RGJsTiZqK2IjZTU0MzMtCnpFRkxBRGw9UEpHQkowOGVtfmxAKG1lNDxgP0N8YGMhUDQ3
UCg+RmRBS00kazl4KD9LJVFjOHFwJWZ1RzJfM1MkIQp6OSkoTUMlI2tqUXtCbWZwZj11X2dTYCZC
YWBvbkghZWZJJT9pU3h0dGc+aXlTOyUqRD11WDk0WE9ye2VLcjx8YEkKejNPNEprT0ZOJDVRfV5E
NTlXR2lmI05ycmcjV3NfMGh5PyZHMXF0Vl4zb2UrWDhtdjBwcilPJmdrfE0hUE0rU21GCno8OTZS
X3BqbHRIUXk8ZjV2IUtnPzspVkVkMjl1UGZAdzk4fVNjSVghcC0zfXUjQVFpc0wlPTBxY2tOZHtD
WVlyTwp6e2o9MTR0P0pndGxEZVVQb1ludFhuZ1Eoe3hRQlAxLXxCMj1GUj5AOUBQKiZrVE9uPi1M
UjN2RWAlQ2c1QTktfFUKel4+WTx3YCVpdjxJdlVXWjN5aCZHYm0lPzYzYDAyLU0mQSZsY2U0WG4j
NDszOUAjXyVQcmdlfGF6VW42MVA9MFhPCnpGKWUhLWl0YT0oVnhBX1BoWCVQPTJoN1JaUjhjVVlN
S2VLT089NXpMeT95Mzh0WX5XKTFUKilmMD1vQVY5YzV3fgp6cztlRzJpcU5VWXc9I3hGUyhOOzN4
M1EmZnF3a0p1ZC1aNlU3YnlIYHVxSiZnOUI/I2M3TGNZS2FBVEBwdmJMcnoKejM0V0l4WCg5byk4
KlowYmt4MT4xYjdwM0UyJmx0MWNPQSZPVz4wRT5hKj80MUhzUT9QMWVBN1pYQUR7e01OX050Cnp0
VzEzdUtmTHpramtRY3koKihGXlY3fWR8Z3BJYVBhQ0hoRnA3T1JVXzRHcykyN3kyakBgS3d+Nmc3
O0MyZlFoUQp6TSVRd3w3SzAkTEE1RkZrMzJhPWt2KnFLO29DWXI/UTV7WmM7K1F0OEtfTHxSSDMk
PXFfdkdecVdLdkokKkUmdTUKekleVmhFS2tHOGheX01JM09Mc25NPmYyc2Q8eXZiPDJDYEc0PEhG
SChZS3dMQHQ8X35qOH5WUmkra2w9PWxUQ0dNCnpFbiF4KXR2SCYhR1pgT0ljeG9lYnhrU1AlUHEr
Mj8lcjNwJlQkIzFUO3wxYSFUQjJKXlBCUncrTkw2O3F7djkqRAp6Q0Vje0dIZEArbkwxU085aG0m
cjJtP0M4fi11d04jSTJiY3ZhdH0hJmBGd3hVYHxTZnNhT3dsK2ZSKT5GWFRlZlAKeiUxX1pQVWJx
ekU/MzBTdXE9RzJrTXJ5PkNeeVh7V2ZuJTlqa0xfQF43Tj1Fa1FOcnRfXzFQNjxQOHgxQHJjITVP
CnpJPURNPTtXOCYpVTJhYTAzPnVBPlhAJVkmMTA5bCNDUiVvMig+XyFJPTdDRTRfd1Y9RVNSQl9J
SSFEJUVkZ2Rofgp6M3skKU87XiEkS2N3NWpLVlNvR0tFMmR4MDRIeEYoKX5FfVEhRmhWJExNZUpE
aUtjRzJWXm5wVUt0bmFBZkxtfUYKelY3ZDIrKSpofGxRMG9UYT1CJVdvOGJIJUdTa29SV1BJKlZH
VTczPjw7Qnw1YlNQMTB8dzswTkYoPHM+LU91NCZlCnomYmlufSRKZm1jWnBUUGYxNj1nQ09fJDBK
RkYtJlopMU9TQ2xib002JlFea3o2QTY2KURGRkNhay1RY2V2ISo2Ngp6dGlNP2syQUgrQ3hrMDRV
IWIqNXtqO0w5a1heSjBeUiFUTkBycl9ERiQ+bTxKP2BmOUVWMTlHfFFCJmdKelhAUGcKend5JTdP
QWwleGs9RnUhcEUzRi1fPkBZbFZPRnI3PzV6eClFP3ZTa3o8Tit4WWtWKTcrWWdhbmdyY3ooKDx5
dkF9CnopWG85aHBCaXQ8P3pGP3Z7IVBaeGhgfFcwcyFUQUJrVkF+aG45fjtHUmdHd0kwO1dlYj9u
JmU5c28zPn1iKVkmbgp6aXp8cjlUciFyRWxHQnI+anJLcUUmZk56bGE3PXdxblp0bFI9cTImJGY+
UFVtXkVkKUh7XkR1clhwVzkwMXszVFQKemg1YDR+Pj1BSE8tckd8aGR2YSZ7JWh+KUhZOVBsbyZ4
KzN5Y0NSNFYxWWZWTldIM0xEXyt9b082cyhFKlVWZXVgCnpZd3prNj1WdmBzcyRVRzRAcVd3PktC
d2oqakwrQGprPUpGOG1FVX1HO2xZPXpeO1dHaDxRMDZqYDxyR2NANUJHLQp6aWk+cHc0cE5ueTFl
YCEpYykrbj1lLWlmIzR4RSliWnI5OWNUQlRAalBVVSs3ayUqdDJvQH4jUypgfFpoKD9sTFoKeiRM
UTYkZVU9NipIYmRjcXhTKkgydzM9PTBVOFJnPWdOJEJCWEFGe0RATlh6d3NJRUt6elJQYFkjUWBB
VFFOJjE7CnpUR1prUEBQNVV7clZIfih7ZEMwQno/MEtQaU5lZDl5T0xsTUgrY3x4b21QUzVrTHw+
K2UtfUlGc2M/TUlgIyo4Rwp6a0ZAMXpffWdzXyhnZTtmVlpGQTwocFUkUmY0OEowRy1re2ZrUnpw
Rmgzaz0hSnNtblUyM2ljSWJLNiNUSWtNTV4KenFTTzVSNn58bGlHcm5iei00JDRYJDc5N01xKG9+
QW9nO2B0Sm1FKHx6SzBrJElLe0V+dVVRTiRhX35+Kj8/MylVCnpFcVp4c3VZVGxwZUtAcG9VfTQl
SD93LWtWJCNNdmdeXyRraSteQTN6KmhFQTJxNl9ndlM2VEgpbVgmRXlRPEd1eAp6VWJSRVhAJjxM
IStpJmRuNz9COUVSRWRBYnckI282TlJPdnMwWE1wVUBtcy0jPmZxRkBRc29XMHo7IzNFKHRZXjsK
elVsMmk3JDhSbkpYX3B9YSlUKFdwIyN8JmhkO3ZrdjU8WU0wMl9LKWFIc14xeWE8YWNNJiQ1WnNo
dT40YmB1NCNLCnp3dGBeRipjYXhlJipHK1EjSVM4WTBXeVBiPFNrWENeNUxnJWV6RVQhe007YFNa
eSgtQUkkUW53LSk+WjBZMEliKAp6Kmp9aXV1ckc1O2hvWlgrYj5UP3VhMDN8WHNnS3x5Y0IybE9W
ajBTPztFYVRVYFUpckBwS0w4MEdpYE0hcSs9UFYKemJScFEwQldxMldoUn5gcVI1PVlsb0JpLS1H
emplViVAO0NGN3VVSmxMJCQzcGVgeEYzNkA1UChmMUJzUE1acDNgCnpwKTB0WUFnJG1zeF5WS3tL
dUkzSkVRMHVGOGc1ZTZEYkhgbHdwfjlDRUheOG9yPVUyciVzfm02S20zLXM7OFl2Kgp6akw1fWNs
IzEzcmR4Yl83Tl9JVG5LMlU9STxqTyhzb0c/NTFfaElucSUzcC1IdE0xeCg+dXRFKFNVJD1OKyk4
PDUKektmY0lHM1RSeUVMKGN5WVR2I25eclUlSG47Z2BxbE5xNHx7cGQ8UFYpRjxLVkdkRykmbyhJ
c3hBcXkmd0tnZkMkCnpWcno9UT49IzQzME1icGQwOUJMY2xvcT4+ZkZ4MF9jUC1rcT4yNllTdHlB
fVBYT0xYWSsmJX18X1VIanJ3UVJeKwp6d2ZNTFZ6OylONlkmSF48JFgrPkBCRD5HdENGbV5EJVU5
biRhLWBEeWx3KksoQ1ZsdFFyJjYwbG4+O3g1cXd1fkQKejlMPGdOa1BZdkAlcXZnRHBNYU9ZMldV
VzJ5cUxgViNlbTZvSWMkS1NKQWkyQ2pFdW1NQFB1JEtvPFpCfUNBVDgyCnpncnI8VGcwVFg9PkxN
QjUyU3BYJE43dlN+YUQ2e1RAQ2hINWAqYzEqJk0zNmhWVEZ6SkM/KE9gST4tZDA+fTVacwp6MnAk
a1o5K3xaK2FfZkR8UDZjX2taNjA3bk9JU01pZShiSEs0JU5CcEE/K1MhMU9fdjFeVG9seG57XzN4
V2VDOFQKejdaTWBaRHRfVCkoWV9BY3MpPD5mazJtYCs3d0cye155ZUgrQi19T3dWTEV5VXc+RDYt
ISV3JXpMMF4xTXMwVUR8CnoxRnAhVXNOWnZJb3JldEdlI3AoanBMcjhHcm9EeUNSYV5nbUBYNGdl
IXp7PmQjWUJ5UXVaalQwaTNvcWZVMHEjQQp6Z0s3OytOPXAwfVU2YkhNelNXSkdtcW8yQUtIbTMj
KkA4UzZAaCNBJHBPWG1fcn1BeksxJDtYQU5NQX15QkN+dXsKeiNjR15zQDkmO2JWb1hgYHNrZFRa
R0o2T29zUTh4MUxGKTxZP3s2N0dQZUtkVkVXU0NPP0lMWSZRNTA+Zm1yOTBZCnpHWkh4QzctVlNJ
QEFIKGsjM2AkQ25BMTheZmskb0otNHoweEhtO1ZzSFAkVihgdV5TN2RQWEx6VWJFKzlkYUB3OQp6
S2Q7eVZpb3ElRDJtdmdCV15pOStHRmAoUl48aiVaRW9PQ1kzYVR9IStUVm08T29gb0NNQyRRclQ2
aVNleSRwZGoKemheUEphOUlDVXFwIVoleTM4I3xlVDdNMy0kUEA1VCZhUERvY0hhWUdzdUVCJGRV
TTxCQiFeQUN7fkElIT9ZdDVRCnplYmhCKGxfR05GQ0M0WXZtX2hVe3VsIUkhKHdxK1gzalBlMTRp
VlgjZEh3Xj5sLW9kUF54cWsqNFdUcXhzZ0cjVwp6aDtzTWgzMHtHRF84Mzd4N0Q9SEplKn0/MUMt
Q2lyWFIkOFNEcm54VTVAPXF+VXgkYyRVfkEqSmUpWUExM2U9SkoKejJOVWRLT2peO1NxOGojUyYo
ZXNXK3p1PlExVlNncjlmWHJaZ19ucy1AYXJSTDUlV1dsVUBlVjdzRGF+IUU4fCEmCnpXPXM2cyFH
PVh7bitsJmVaa25PdXgqdDVJQihNJGBKP0BrWVNGXm12em5lbUchbjRAMVZPOHh3VEZ+akQ+KH4x
bgp6eTwwI2hjKXN9Z3ZtaH0zV3BZJitPLV9VOHhwViZoKyZqVjJGdzBjSVMmNmByaD1qME5FVmNl
MFQkKChPbUV2JUQKeiFkZzhtOFJjIV5FZDFJITVQISRXclhsVUJnNiMrMmQpbVRxPEhLSTw+KSgk
PzcjPG9DczhQPnw+LV5QbDxGKTB2Cno9SzlSKWhPTmFtTkdqMVJNOztNfU5yfnEkJUFEPE1QSz13
bVooMjJnbm4yYkJJKXhLJTRjYWo3JHhAe0lFWmAmZQp6K2FnZE5qPmFYfUdrUllGJCN0MSlUcFE4
cnNUfSZ9O2MtKCFLfFdQfkBxRFJreXs1RlgoO2tFbEBJYHk1RVpFWFAKemhSfnJ5YTBXOEt4azZt
PEU0PWB5IWAwdmJlMkRASm1gR2BKbE1yVT81eWsqPXNRdWtpWGM3OUFXPm87KDlZN3I1Cno9Rk9Y
bF9gIUFpWUh2dTsoZjcralptQ3piMHBRX2pXQ1N0SD8oIWdaWVlwVDgkZkxPZ3A7cncpMEdpJW9z
M3U0YQp6JEU/eTh1Q3ZBWCU1ZTFqM0tzK0xlTy1JP2lgQ15SUlJaTGp5TV8tT1gtIXA3ZldFczhm
enBYNEZxcjd5P1ViYFEKejJGfXlocG1VXkFkIVkzSURYZn5KRSFsNV5odD9NJDxudmh1Q2BEVGFI
TjRnWHA2PyMlTllOaDs9QDB6ZilJcUNJCnpQMWhRQ1VfTE0yREE/cjJ0PHxmZWdieWZBRDctJStf
e3t8ZlAhPXtMbndFMCpOY3NYS08mNE1YekI5MTJxcjMzaQp6JEtCOGtVMSpleFl5V1dyZkAzYCo0
MkdrU3daYmFRMTkwLVA0am8jNzBXdThzRDxyMUBPJmIkRXB4ViUhNElSVykKekwjYEpzKz9lYn1M
fUc+RW8oRDR9SHh4YzdnckF3ZU5WZ2deJihXb0w7RlQhPHhxRn12P1Z0YFRDfiR1O00xNyZGCnpQ
IyN6V3oqX3stJVFSJGo9YTEldVQ1YTxmPD8xMTtEZ3NpQWcpblB+MU9iQyFlKllWRFF6WWAzUHpz
fGZSQD53Tgp6cmJ7OzNCbD8lMTdkWDBlTWNeJDdnPFJNKiUwZUZSQC1SMH0zcU5DPlhOc2E/TVdQ
KEQwbyltTUE4MWBqOWcxV2IKeigmP3VsN2w7clU/d09aT3c9eEFadzx2XkJBUmVYeUZNMlo9Mjst
NGk5PyVMfmpaX2QxV2pMNClkfX47VHV7TF4mCnoqMXlgcEw0P0RFazwrYkdLWChyentreXAhTlM0
N25EP2xaJkdCPEZfNkBXb0c+Kik5ZD88V2J2MlhHN05YbDNKUgp6bnczK1AmIXJqMngwbz5NeVRR
SV9PRjJ7UHgkdTcpQVdxKHg4eHUyRCNsbW4rUm9ZZkNUQ3BoeWVsb1lmTHtAWWIKej1gJDJWMDB+
ZnJ5I25gRHY5ZXZlY0VKa0hFci1WRnUrVyh2TWRTP0Y7cHtESFM1ZXJIdk9oNFhrXnYlNkhhMzhW
CnpqZXVzQHloSDAxJGVmLTZaPlZMRjEtfFAmX2t9VztfPUAhfGQyJXFAZ0wqQyp3P0lOSmU/VGpz
KWJFO0J6fGRafQp6aiZlX1JsITlRTGohbDd4eGZ1d0l2byt0Myk4P19fXkxwITttVjlxb3QqZmN4
TmMzISg9RWphIXo/Y0gkP1g5bEsKekR5PEJvckxoK2dDV3N7fC1kTCNpaktLYFZaQ0x4RyN0JEVm
biQld0R2NCkrNmAzMyhHNDJKTnNjPUpmOGtnNSoxCnozYypDdU5JMkR3O1pER1phel9rU3A9aS02
JkNlM0JkPkNaNzxNUGdiKXRTOGNvSlc4Ymo0XnpmNkdmQE9CND5ZfAp6Vjl3aFU1Jip2dnJIP1FS
R056YXY3KShYYlhWVStiam03XzlrP3xpczJEKlg3TUVZXzJgR3FaSE01e0l8e0xNRTAKeitFOSZK
Zm59YU5HTFJaP1ZuQk4pQytfJXc3IzlTdG9RMTY7bkohO0pGSkl9VCl1TjA4VnI/YjtJOU9SNTB9
WCEtCnpQS1BSRzN3eEhyRjU1Mi1lIU5yczRyQyN6bDlGaHt1ZUd7cXI3UiU8dHZOMXBTK3BxQDc+
dW1qaComTXVrVnh+eAp6RkxaMGgjTmFuR1klaEYqPzFVM1EwfW1hVjBRcUk5Jm9lU2dsUTs7T1lD
diRVWjdwVUlRaFdvSE5yUThLKjJvQ2EKenpaOGdeX2gtWCNaNT8/d3YtPlYqaHUzciR2RH5rPjdA
WTN9NWMmQ0RtfXd7ezc/USs9bmtiQjhVOHBZX2YjdEJNCno2YlV5c0hXSV5DekUlJlU5P2QxXmt3
WH5GQU5aMDIlaFBFN0F6b1dPNWBCRFRjRDYrTGlCfi1rJDUhbXRPWUFuRQp6dXIlRThMUXd7PEVE
KFIoNE1aWlcqJV40dTU3cU1LRG16LUNubXF2UGRDK09waVlQY3V6S0o8JjJse3EyaFJXZX4Kem98
VGomZnp7WFlCM19MQnFuSnY5WHA8fmJpaygzQD42NSUwVGY7MVl0M0plaEwyJCZhdSRRITd6K1gk
MWFmfCU9Cno5WWliSiFASGcoMiM1dHs0SjtLbyNkcDkwYy1EVTQzazs/cXFJbU5ZRlBRJWpGQ19O
RWN0YTJsRH0xdG10PT14cwp6P20+e2woJFM3eSZFYHlyPU80ZlF6PUxhJUsxN15PZmRtWmNMPTxv
LUg+YHJFK1h9QWp6SENpZ0F7YmgmMExwdE0KekNERz40NzhAKHtKZkowbSE5PVJVM2tTdHVpfj5N
LTtAdjsobHR7QG5oLW5RWkBDVDwqK3lrc0c9IzY0d0dmRXwzCnpYJkAyZ0pSTUM2KWE5a0g+MD8q
d0FnTV9GOHdTMz87eCRYJDd2NVYhMD9iUyFCZVlEJUVLV3dKWFZpa1J2YlVFKAp6bTQlY0JART8+
QiNBN018dS0xVmdldTt1eyRoRDFPNzAmfjdBM0RZd0lCQz5XaTYtfklrXjFOcktwN2tNVTlUKzsK
enI9KGZrN29sN05iXy1pVHZrJUYwcG1heWgqYX1ZNGZCV0hNSGxSaClQdld9SVVMUVJPJXF4WWtT
eDg4UCQkbTs2CnpSKSRjamlfI3VNaFZ3UmkzZGhoVTl5bHh+Z2gxfCRqaFoxZVZ1UHVXWGkzPVk9
N0FwNVFxMVFhSj9MNSZzYHhXPgp6XkItaG0rWnxwbzhrMz14cXohak8zMDReUzFkJVdaNERWTDdV
eGN+QEM0YW1ZKWleYUVnMz9nP0RNIXBRbmdMRFoKejR4aFZ8O01OI0B3ejxBfnZKb3VrdjM0IWlv
c2Y0cmcobXczdXsjRH17Sj18fkJ4aXBISEsxVDRgMFBCMDx9ZGJyCnpgJlo7I05KXyU7KWJAXnZo
M0Bwenkqan5PWCF9Y0NafD9jfW9IekNXU35mKDw1T1ZqPjUpX1B+dU1zfFBGRXtgYgp6M1c2SkAh
JUU4Vig+dDhKOCRBcSQlcDM1JGdtcGJjailGbmUzdCl9JSRaJl8hSF5mfiFpWFBNXmA7I3dXQDdt
OE0KejQ4aG9HPVB5c2dlX2hrSFZ9MWAtZzNpbyRwVFY5bWZte010ITQtQH1vWmdiQiRGJGpwVmxl
Q2VWXyUocyNxOSQtCnpLRVlzS28hZHIyJD9lfW8qWlhnTVQ7TklFSFBNbG1tb0U+YyNKVytKV35F
ZzlgQC1uVWtseSUxcFRNUHNTJThWKQp6PmV0VHZPO1lPU1BXYSUteTcrJS1UbF5uRF84KWYzeVVW
KmlnKHZRfkJtc3ZMY3A4UkpCT0BJaVVaYDJ+MzgzSHEKeiUhQkBxb1l0UWdzcll9YXc/OXd0Jmw5
fEg/WXw5SWYwb2FtPEAwQ3h7UCN4dnBTfDtFQEJHPDJ7fno+RHduIyR0ClkrNUwwaGAra0szN0t8
fURZaGd0Qyt4SXtJRks1JUVHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNl
dHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jN2JlMGRmZWU4NDAzMWU0ZWM4N2E1N2I1MmIyNGU0MTU4MTUwNTViCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMv
Zm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
OSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sg
e0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4
LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDApIHNpemUgNzg0
eDM2CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc4M3gzNgorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI0MzogIlRlc3QgZm9yIGZvbnQtZmVhdHVy
ZS1zZXR0aW5ncyBwcm9wZXJ0eS4gIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgyNDMsMCkgd2lk
dGggNTQwOiAiVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSB3b3JkcyBzaG91
bGQgYmUgZGlzcGxheWVkIGxpa2UgXCJXZWJLaXRcIiwgd2hpbGUiCisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMTgpIHdpZHRoIDI2NzogIm90aGVycyBzaG91bGQgYmUgZGlzcGxheWVkIGFzIGJs
YWNrIGJveGVzLiIKKyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDUyKSBzaXplIDc4NHgx
NworICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMXgxNgorICAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxOiAiV2ViS2l0IgorICAgICAgUmVuZGVyQmxv
Y2sge0RJVn0gYXQgKDAsNjkpIHNpemUgNzg0eDE3CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMCwwKSBzaXplIDk2eDE2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
OTY6ICJXZWJLaXQiCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw4Nikgc2l6ZSA3ODR4
MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgOTZ4MTYKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA5NjogIldlYktpdCIKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBmZmFj
NTdmNjdiYzZkYzlmNWJlNjlkZDQ2OTllZGZkNGFjNTlkZWNjLi44OTRjNmM2N2QwOTFhNTZlNmRi
NjQ1ZDMzMDg3NWVlZTQ2NjVlZjQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zMzEyLDggKzMzMTIsNiBAQCBCVUdD
Ujk3NzE2IDogZmFzdC9jbGlwL292ZXJmbG93LWJvcmRlci1yYWRpdXMtY29tYmluYXRpb25zLmh0
bWwgPSBJTUFHRQogLy8gQ2F1c2VkIGJ5IHI5MjYxOAogQlVHV0s2NTg3NCA6IGZhc3QvanMvcHJl
dmVudEV4dGVuc2lvbnMuaHRtbCA9IFRFWFQKIAotQlVHV0s2Mzc5NiBNQUMgOiBjc3MzL2ZvbnQt
ZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCA9IE1JU1NJTkcgRkFJTAotCiBCVUdDUjk3
NjQ2IDogbWVkaWEvbWVkaWEtYmxvY2tlZC1ieS1iZWZvcmVsb2FkLmh0bWwgPSBQQVNTIFRFWFQK
IAogQlVHV0s2NjQxNyBXSU4gOiBmYXN0L3RleHQvbWlkd29yZC1icmVhay1iZWZvcmUtc3Vycm9n
YXRlLXBhaXItMi5odG1sID0gSU1BR0UrVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129617</attachid>
            <date>2012-02-29 19:36:48 -0800</date>
            <delta_ts>2012-03-07 20:24:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69826-20120301123646.patch</filename>
            <type>text/plain</type>
            <size>62451</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjMzNTFiZDYyYzVjNmE5
MDJjOTQ4N2I2ZGJlY2I1Yzk3Yjg4NjJjMy4uOGJhNGIwNzFiMTQ2MGE2ODRlZjYxNDdiNzA2ZDc1
Yzk0NjU1ZTcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTAyLTI5ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIEFkZCBIYXJmQnV6ei1uZyB0ZXh0IHNoYXBlci4KKyAgICAgICAgQ2hyb21pdW0g
bWFjIHBvcnQgdXNlcyBpdCBhcyBzZWNvbmRhcnkgdGV4dCBzaGFwZXIgdG8gc3VwcG9ydCBPcGVu
VHlwZSBmZWF0dXJlcy4KKyAgICAgICAgSGFyZkJ1enotbmcgaXMgb25seSB1c2VkIHdoZW4gLXdl
YmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3MgaXMgc3BlY2lmaWVkIGFuZAorICAgICAgICBjb3Jy
ZXNwb25kaW5nIGZvbnQgaXMgbm90IGFuIEFBVCBmb250LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gY3NzMy9mb250LWZlYXR1
cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwgc2hvdWxkIHBhc3Mgb24gQ2hyb21pdW0gbWFjIHBv
cnQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQgaGFyZmJ1enot
bmcgZGVwZW5kZW5jaWVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgaGFyZmJ1enot
bmcgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6IEFkZGVkIG1faGFyZmJ1enpGYWNlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOiBD
b3B5IG1faGFyZmJ1enpGYWNlLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhQXNzaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzQUFURm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6RmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXJmYnV6ekZhY2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZh
Y2U6OkhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6On5IYXJm
QnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6RmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGFyZkJ1enpG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEV4dGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWxlYXNlVGFibGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Omhh
cmZidXp6Q29yZVRleHRHZXRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6
OmNyZWF0ZUZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFk
dmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
U2hhcGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OmhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6
eFBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpI
YXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6fkhhcmZC
dXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVh
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXR1cEhhcmZCdXp6UnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp0b3RhbFdpZHRoKToKKyAgICAgICAgKEhhcmZCdXp6
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6c2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpu
dW1DaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6bnVtR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJm
QnV6elJ1bjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpydGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxl
eFRleHRNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVm
ZXJIYXJmQnV6eik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KTogVXNlIEhhcmZCdXp6U2hhcGVyIGlmIGZvbnQtZmVhdHVyZS1zZXR0
aW5ncyBleGlzdHMuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dCk6IERpdHRvLgorCiAyMDEyLTAyLTI5ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBNZXRob2RzIGluIFNoYWRvd1RyZWUgYW5kIFRyZWVT
Y29wZUFkb3B0ZXIgc2hvdWxkIGJlIG11bHRpcGxlIHNoYWRvdyByb290cyBhd2FyZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYjc3N2ZlMDY3MzYyZTlmZmQyZThk
YTlmZjEzM2FhMzVlNDIwNzkwNi4uOTUzOGU3MmY3ZTk0OGVlMzk0Njc5Njc0ZmE5MGYxMTBjYmVi
MTJmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTIxNCw2ICsy
MTQsOCBAQAogICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9tYWMnLAogICAgICAgICAg
ICcuLi9wbGF0Zm9ybS9tYWMnLAogICAgICAgICAgICcuLi9wbGF0Zm9ybS90ZXh0L21hYycsCisg
ICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6JywKKyAgICAgICAgICAnLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcnLAogICAgICAgICBdLAogICAgICAgfV0sCiAg
ICAgICBbJ09TPT0ibWFjIiBhbmQgdXNlX3NraWE9PTEnLCB7CkBAIC0xNTI4LDYgKzE1MzAsNyBA
QAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAg
ICd3ZWJraXRfc3lzdGVtX2ludGVyZmFjZScsCisgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6ei5neXA6aGFyZmJ1enotbmcnLAog
ICAgICAgICAgIF0sCiAgICAgICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgICAgICB7CkBAIC0x
NjA4LDYgKzE2MTEsMTIgQEAKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvck5vbmVcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JOb25lXFwuaCQnXSwKIAorICAgICAgICAgICAgIyBNYWMgdXNlcyBI
YXJmQnV6ei1uZy4KKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2VcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNvcmVU
ZXh0XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZVxcLihjcHB8aCkkJ10sCisgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXJcXC4o
Y3BwfGgpJCddLAorCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL2Nocm9tZS9qdW5rXFwudHh0
JCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH0seyAjIE9TIT0ibWFjIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGFlMWVhYzc3ZGYzYTgxZDFmYTE3NWZjM2JkNjgzNjIxMzhkOTcwMmUuLmQ4ZjYyNWY3
ZmY5NWZmZjgyNTY1ZDhhZDU4OGRhMzIwMzQ3ZmRiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1
MDksNiArMzUwOSwxMSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JN
YWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDcwNWM1ODg5NzE0NWRmOGIyYzJmYTQ0Mjc3
MDExZjg5MGUzNmU3ZmMuLjUwNGIzMTNhNDEzNGY5ODdlNTQ5ZTM1OTc4ZDUzMTI4NmE3ODFiNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgKQEAgLTcyLDYgKzcyLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQq
IENURm9udFJlZjsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAjaW5j
bHVkZSAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIgIAorI2luY2x1ZGUgIkhhcmZCdXp6RmFj
ZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0yMzYsNiArMjM3LDEwIEBAIHB1
YmxpYzoKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZWRGb250OyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pCisgICAgSGFyZkJ1enpGYWNlKiBoYXJmYnV6ekZhY2UoKTsKKyNlbmRpZgorCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShDQUlSTykKQEAgLTMzMiw2ICszMzcsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikKICAgICBSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9udD4gbV9p
bk1lbW9yeUZvbnQ7CisgICAgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CiAj
ZW5kaWYKIAogICAgIGJvb2wgbV9pc0NvbG9yQml0bWFwRm9udDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbQppbmRleCA3YjEzNjA4ODM0M2FlMDg0ZTJlNGFlNDA3YmJlMDg5YWQ4NjdjNDc0
Li44OGQzZjUyMDFiYTU2MTkzYjE1YmNjMzkzYmE1ZGRjYTk5NjI5NWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBs
YXRmb3JtRGF0YUNvY29hLm1tCkBAIC04NCw2ICs4NCw3IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogCiAjaWYgUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBtX2luTWVtb3J5Rm9udCA9IGYubV9p
bk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBmLm1faGFyZmJ1enpGYWNlOwogI2Vu
ZGlmCiB9CiAKQEAgLTEwMCw2ICsxMDEsNyBAQCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRAogICAg
IG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFS
V0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsKKyAgICBtX2hhcmZi
dXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKICAgICByZXR1cm4gKnRoaXM7CiB9
CkBAIC0yNzYsNiArMjc4LDM3IEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQo
KSBjb25zdAogICAgIHJldHVybiBtX0NURm9udC5nZXQoKTsKIH0KIAorI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBPUyhEQVJXSU4pCitzdGF0aWMgYm9vbCBpc0FBVEZvbnQoQ1RGb250UmVmIGN0
Rm9udCkKK3sKKyAgICBDRkRhdGFSZWYgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCBr
Q1RGb250VGFibGVNb3J0LCBrQ1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJsZSkg
eworICAgICAgICBDRlJlbGVhc2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCBrQ1RGb250VGFibGVNb3J4LCBr
Q1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJsZSkgeworICAgICAgICBDRlJlbGVh
c2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitIYXJmQnV6ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpCit7
CisgICAgQ1RGb250UmVmIGZvbnQgPSBjdEZvbnQoKTsKKyAgICAvLyBIYXJmQnV6eiBjYW4ndCBo
YW5kbGUgQUFUIGZvbnQKKyAgICBpZiAoaXNBQVRGb250KGZvbnQpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghbV9oYXJmYnV6ekZhY2UpIHsKKyAgICAgICAgdWludDY0X3QgdW5pcXVl
SUQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZm9udCk7CisgICAgICAgIG1faGFyZmJ1
enpGYWNlID0gSGFyZkJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRh
Kj4odGhpcyksIHVuaXF1ZUlEKTsKKyAgICB9CisgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdl
dCgpOworfQorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiBTdHJpbmcgRm9udFBsYXRmb3JtRGF0
YTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDlkZGJhYmIyMmJkYTk2NzdhNTU4NzEwYTUxNzkyZmI1YmFhMTQxZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6RmFjZS5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNp
bmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVGhvdWdoIHdlIGhhdmUgRm9udENhY2hlIGNsYXNzLCB3aGljaCBwcm92aWRl
cyB0aGUgY2FjaGUgbWVjaGFuaXNtIGZvcgorLy8gV2ViS2l0J3MgZm9udCBvYmplY3RzLCB3ZSBh
bHNvIG5lZWQgYWRkaXRpb25hbCBjYWNoaW5nIGxheWVyIGZvciBIYXJmQnV6egorLy8gdG8gcmVk
dWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gYmVjYXVzZSBoYl9mYWNlX3Qgc2hvdWxkIGJlIGFz
c29jaWF0ZWQgd2l0aAorLy8gdW5kZXJsaW5nIGZvbnQgZGF0YSAoZS5nLiBDVEZvbnRSZWYsIEZU
RmFjZSkuCit0eXBlZGVmIHBhaXI8aGJfZmFjZV90KiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVudHJ5
OwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNo
PHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4g
PiBIYXJmQnV6ekZhY2VDYWNoZTsKKworc3RhdGljIEhhcmZCdXp6RmFjZUNhY2hlKiBoYXJmYnV6
ekZhY2VDYWNoZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXJmQnV6ekZhY2VDYWNo
ZSwgc19oYXJmYnV6ekZhY2VDYWNoZSwgKCkpOworICAgIHJldHVybiAmc19oYXJmYnV6ekZhY2VD
YWNoZTsKK30KKworSGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRCkKKyAgICA6IG1fcGxhdGZvcm1EYXRhKHBs
YXRmb3JtRGF0YSkKKyAgICAsIG1fdW5pcXVlSUQodW5pcXVlSUQpCit7CisgICAgSGFyZkJ1enpG
YWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91
bmlxdWVJRCk7CisgICAgaWYgKHJlc3VsdCA9PSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSkg
eworICAgICAgICBtX2ZhY2UgPSBjcmVhdGVGYWNlKCk7CisgICAgICAgIEFTU0VSVChtX2ZhY2Up
OworICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hl
RW50cnkobV9mYWNlLCAxKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKysocmVzdWx0LmdldCgp
LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3Q7CisgICAgfQorfQorCitIYXJmQnV6ekZhY2U6On5IYXJmQnV6ekZhY2UoKQoreworICAg
IEhhcmZCdXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgp
LT5maW5kKG1fdW5pcXVlSUQpOworICAgIEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2Fj
aGUoKS0+ZW5kKCkpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAw
KTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOworICAgIGlmICghKHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKKyAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVt
b3ZlKG1fdW5pcXVlSUQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMyNmIxYjFmMjBjM2ZmYTc5Yjg4ZmI2OGQ5
OWNhZDc5MmY0ODRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBfaGJfZmFjZV90OwordHlwZWRlZiBfaGJfZmFjZV90IGhi
X2ZhY2VfdDsKK3N0cnVjdCBfaGJfZm9udF90OwordHlwZWRlZiBfaGJfZm9udF90IGhiX2ZvbnRf
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworCitj
bGFzcyBIYXJmQnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmQnV6ekZhY2U+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+IGNyZWF0ZShGb250UGxh
dGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZvcm1EYXRhLCB1bmlxdWVJ
RCkpOworICAgIH0KKyAgICB+SGFyZkJ1enpGYWNlKCk7CisKKyAgICBoYl9mb250X3QqIGNyZWF0
ZUZvbnQoKTsKKworcHJpdmF0ZToKKyAgICBIYXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSos
IHVpbnQ2NF90KTsKKworICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOworCisgICAgRm9udFBs
YXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7CisgICAgdWludDY0X3QgbV91bmlxdWVJRDsKKyAg
ICBoYl9mYWNlX3QqIG1fZmFjZTsKK307CisKK30KKworI2VuZGlmIC8vIEhhcmZCdXp6RmFjZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZj
ZWI0NTE3OTZjNzcyY2Q3MTdjMTlkN2FkNDNkYWE5YzM4MDc1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFj
ZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkNvcmVUZXh0L0NvcmVUZXh0LmgiCisj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgImhiLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZmxvYXRUb0hhcmZCdXp6UG9z
aXRpb24oQ0dGbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRp
b25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBo
KGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29k
ZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlw
aCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgVW5pQ2hh
ciBjaGFyYWN0ZXJzWzRdOworICAgIENHR2x5cGggY2dHbHlwaHNbNF07CisgICAgc2l6ZV90IGxl
bmd0aCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY2hhcmFjdGVycywgbGVuZ3RoLCB1bmlj
b2RlKTsKKyAgICBpZiAoIUNURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoY3RGb250LCBjaGFy
YWN0ZXJzLCBjZ0dseXBocywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpn
bHlwaCA9IGNnR2x5cGhzWzBdOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfcG9z
aXRpb25fdCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAg
IENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihm
b250RGF0YSktPmN0Rm9udCgpOworICAgIENHR2x5cGggY2dHbHlwaCA9IGdseXBoOworICAgIENH
RmxvYXQgYWR2YW5jZSA9IENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGN0Rm9udCwga0NURm9u
dEhvcml6b250YWxPcmllbnRhdGlvbiwgJmNnR2x5cGgsIDAsIDEpOworICAgIHJldHVybiBmbG9h
dFRvSGFyZkJ1enpQb3NpdGlvbihhZHZhbmNlKTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBnZXRH
bHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25fdCogeSwg
dm9pZCogdXNlckRhdGEpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9ib29s
X3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJf
Y29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNl
ckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgQ0dSZWN0IGNnUmVjdDsKKyAg
ICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0Qm91bmRpbmdSZWN0
c0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnREZWZhdWx0T3JpZW50YXRpb24sICZjZ0dseXBoLCAm
Y2dSZWN0LCAxKSA9PSBDR1JlY3ROdWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXh0
ZW50cy0+eF9iZWFyaW5nID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0Lm9yaWdpbi54
KTsKKyAgICBleHRlbnRzLT55X2JlYXJpbmcgPSAtZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0Lm9yaWdpbi55KTsKKyAgICBleHRlbnRzLT53aWR0aCA9IGZsb2F0VG9IYXJmQnV6elBvc2l0
aW9uKGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBleHRlbnRzLT5oZWlnaHQgPSBmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS5oZWlnaHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCkK
K3sKKyAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
ID0gMDsKKworICAgIGlmICghaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcykgeworICAgICAgICBo
YXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVhdGUoKTsKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
LCBnZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2
YW5jZV9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbEFk
dmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9m
dW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwg
MCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBo
Yl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MpOwor
ICAgIH0KKyAgICByZXR1cm4gaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jczsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZVRhYmxlRGF0YSh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBDRkRhdGFSZWYg
Y2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KHVzZXJEYXRhKTsKKyAgICBDRlJl
bGVhc2UoY2ZEYXRhKTsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dFRhYmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPih1c2VyRGF0YSk7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHBsYXRm
b3JtRGF0YS0+Y3RGb250KCk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENURm9udENvcHlUYWJs
ZShjdEZvbnQsIHRhZywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKTsKKyAgICBpZiAoIWNm
RGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpKTsKKyAgICBj
b25zdCBzaXplX3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSk7CisgICAgaWYgKCFk
YXRhIHx8ICFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBoYl9ibG9iX2Ny
ZWF0ZShkYXRhLCBsZW5ndGgsIEhCX01FTU9SWV9NT0RFX1JFQURPTkxZLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjb25zdF9jYXN0PF9fQ0ZEYXRhKj4oY2ZEYXRhKSksIHJlbGVhc2VUYWJsZURh
dGEpOworfQorCitoYl9mYWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAg
aGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNvcmVU
ZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAg
cmV0dXJuIGZhY2U7Cit9CisKK2hiX2ZvbnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkK
K3sKKyAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOworICAgIGhi
X2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKSwgbV9w
bGF0Zm9ybURhdGEsIDApOworICAgIGNvbnN0IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+
bV9zaXplOworICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CisgICAgY29u
c3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICogc3RhdGljX2Nhc3Q8aW50PihzaXplKTsKKyAgICBo
Yl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOworICAgIGhiX2ZvbnRfbWFrZV9p
bW11dGFibGUoZm9udCk7CisgICAgcmV0dXJuIGZvbnQ7Cit9CisKK0dseXBoQnVmZmVyQWR2YW5j
ZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQpCit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZWVkODk3YmE2YTExYTcwZjA2NDcyOWJkODkyM2M1ZDc5MjU3NzM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1
bi5oIgorI2luY2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBoYXJmYnV6elBv
c2l0aW9uVG9GbG9hdChoYl9wb3NpdGlvbl90IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOworfQorCitIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OkhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCisgICAgOiBtX251bUNo
YXJhY3RlcnMobnVtQ2hhcmFjdGVycykKKyAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKK3sK
KyAgICBtX251bUdseXBocyA9IGhiX2J1ZmZlcl9nZXRfbGVuZ3RoKGhhcmZidXp6QnVmZmVyKTsK
KyAgICBtX2dseXBocy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fYWR2YW5jZXMucmVzaXpl
KG1fbnVtR2x5cGhzKTsKKyAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBt
X2dseXBoVG9DaGFyYWN0ZXJJbmRleC5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fbG9nQ2x1
c3RlcnMucmVzaXplKG1fbnVtQ2hhcmFjdGVycyk7CisKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGlu
Zm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpCisgICAgICAgIG1fZ2x5
cGhUb0NoYXJhY3RlckluZGV4W2ldID0gaW5mb3NbaV0uY2x1c3RlcjsKKworICAgIC8vIEZpbGwg
bG9naWNhbCBjbHVzdGVycworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5k
ZXggPCBtX251bUdseXBocykgeworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBpbmRleCAr
IDE7CisgICAgICAgIHdoaWxlIChuZXh0SW5kZXggPCBtX251bUdseXBocyAmJiBpbmZvc1tpbmRl
eF0uY2x1c3RlciA9PSBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIpCisgICAgICAgICAgICArK25l
eHRJbmRleDsKKyAgICAgICAgaWYgKHJ0bCgpKSB7CisgICAgICAgICAgICBpbnQgbmV4dENsdXN0
ZXIgPSBuZXh0SW5kZXggPCBtX251bUdseXBocyA/IGluZm9zW25leHRJbmRleF0uY2x1c3RlciA6
IC0xOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqID4g
bmV4dENsdXN0ZXI7IC0taikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5k
ZXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0Q2x1c3RlciA9
IG5leHRJbmRleCA8IG1fbnVtR2x5cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogbV9u
dW1DaGFyYWN0ZXJzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaW5mb3NbaW5kZXhd
LmNsdXN0ZXI7IGogPCBuZXh0Q2x1c3RlcjsgKytqKQorICAgICAgICAgICAgICAgIG1fbG9nQ2x1
c3RlcnNbal0gPSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IG5leHRJbmRleDsK
KyAgICB9Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFu
ZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgYWR2YW5jZSkKK3sKKyAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaElkOwor
ICAgIG1fb2Zmc2V0c1tpbmRleF0uc2V0KHgsIHkpOworICAgIG1fYWR2YW5jZXNbaW5kZXhdID0g
YWR2YW5jZTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVy
SW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0YXJnZXRYKSA8PSBtX3dpZHRoKTsKKyAgICBpbnQgY3VycmVudFggPSAwOwor
ICAgIGZsb2F0IHByZXZBZHZhbmNlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1HbHlwaHM7ICsraSkgeworICAgICAgICBmbG9hdCBjdXJyZW50QWR2YW5jZSA9IG1fYWR2
YW5jZXNbaV0gLyAyLjA7CisgICAgICAgIGludCBuZXh0WCA9IGN1cnJlbnRYICsgcm91bmRmKHBy
ZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2UpOworICAgICAgICBpZiAoY3VycmVudFggPD0gdGFy
Z2V0WCAmJiB0YXJnZXRYIDw9IG5leHRYKQorICAgICAgICAgICAgcmV0dXJuIG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4W2ldICsgKHJ0bCgpID8gMSA6IDApOworICAgICAgICBjdXJyZW50WCA9IG5l
eHRYOworICAgICAgICBwcmV2QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlOworICAgIH0KKworICAg
IHJldHVybiBydGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7Cit9CisKK2ludCBIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit7
CisgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CisgICAgdW5zaWduZWQgZ2x5
cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKKyAgICBBU1NFUlQoZ2x5cGhJbmRleCA8
IG1fbnVtR2x5cGhzKTsKKyAgICBmbG9hdCBwb3NpdGlvbiA9IG1fb2Zmc2V0c1tnbHlwaEluZGV4
XS54KCk7CisgICAgaWYgKHJ0bCgpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2ds
eXBoSW5kZXhdOworICAgIHJldHVybiByb3VuZGYocG9zaXRpb24pOworfQorCitIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
KQorICAgIDogSGFyZkJ1enpTaGFwZXJCYXNlKGZvbnQsIHJ1bikKKyAgICAsIG1fc3RhcnRJbmRl
eE9mQ3VycmVudFJ1bigwKQorICAgICwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuKDApCisg
ICAgLCBtX2hhcmZidXp6QnVmZmVyKDApCit7CisgICAgc2V0Tm9ybWFsaXplZEJ1ZmZlcigpOwor
ICAgIHNldEZvbnRGZWF0dXJlcygpOworfQorCitIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hh
cGVyKCkKK3sKKyAgICBpZiAobV9oYXJmYnV6ekJ1ZmZlcikKKyAgICAgICAgaGJfYnVmZmVyX2Rl
c3Ryb3kobV9oYXJmYnV6ekJ1ZmZlcik7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZv
bnRGZWF0dXJlcygpCit7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zv
bnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlmICghc2V0dGlu
Z3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGlu
Z3MtPnNpemUoKTsKKyAgICBtX2ZlYXR1cmVzLnJlc2l6ZShudW1GZWF0dXJlcyk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAg
IG1fZmVhdHVyZXNbaV0udGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1sz
XSk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUo
KTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5zdGFydCA9IDA7CisgICAgICAgIG1fZmVhdHVyZXNb
aV0uZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsKKyAgICB9Cit9CisKK2Jvb2wgSGFy
ZkJ1enpTaGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBtX3Rv
dGFsV2lkdGggPSAwOworICAgIHdoaWxlIChzZXR1cEhhcmZCdXp6UnVuKCkpIHsKKyAgICAgICAg
aWYgKCFzaGFwZUhhcmZCdXp6UnVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIpOworICAgIH0K
KworICAgIGlmICghbV9oYXJmYnV6elJ1bnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJm
QnV6elJ1bigpCit7CisgICAgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuICs9IG1fbnVtQ2hhcmFj
dGVyc09mQ3VycmVudFJ1bjsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdGV4dCB0byB0
YWtlIHRoZSBsYXJnZXN0IHJhbmdlIHRoYXQgc3RheXMgd2l0aGluCisgICAgLy8gYSBzaW5nbGUg
Zm9udC4KKyAgICBpbnQgZW5kT2ZSdW5JbmRleCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCAt
IG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IgaXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZD
dXJyZW50UnVuLCAwLCBlbmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKKyAgICBVQ2hhcjMy
IGNoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICBpZiAoIWl0
ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNj
cmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJF
KGVycm9yQ29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudFNjcmlw
dCA9PSBVU0NSSVBUX0lOSEVSSVRFRCkKKyAgICAgICAgY3VycmVudFNjcmlwdCA9IFVTQ1JJUFRf
Q09NTU9OOworICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0
b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNs
dXN0ZXJMZW5ndGgpKSB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERh
dGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250
RGF0YTsKKyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgaWYgKFVfRkFJTFVS
RShlcnJvckNvZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY3Vy
cmVudFNjcmlwdCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklU
RUQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAg
ICAgIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpOworCisgICAgaWYgKCFtX2hhcmZidXp6QnVmZmVyKSB7Cisg
ICAgICAgIG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7CisgICAgICAgIGhi
X2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3VfZ2V0X3Vu
aWNvZGVfZnVuY3MoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9yZXNldChtX2hh
cmZidXp6QnVmZmVyKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6QnVmZmVy
LCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7CisKKyAgICAvLyBXZWJL
aXQgYWx3YXlzIHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3VsYXRpb24u
CisgICAgLy8gV2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4cGxpY2l0
bHkgc2V0IHRvIFJUTCBzbyB0aGF0CisgICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRoIGNhbGN1
bGF0aW9uLgorICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJl
Y3Rpb24obV9oYXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7CisKKyAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fw
cy4KKyAgICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0
aGUgc2FtZSBjYXNlLCBiZWNhdXNlIGEKKyAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFs
bC1jYXBzIG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50CisgICAgLy8gRm9udERhdGEs
IHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KKyAg
ICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZm
ZXJbbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKKyAgICAgICAgU3RyaW5nIHVwcGVyVGV4
dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4sIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgICAgIHVwcGVyVGV4dC5t
YWtlVXBwZXIoKTsKKyAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250
RGF0YTsKKyAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVyLCB1cHBl
clRleHQuY2hhcmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVt
Q2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9h
ZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bigpCit7CisgICAgRm9udFBsYXRmb3Jt
RGF0YSogcGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJm1fY3Vy
cmVudEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0g
cGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBoYl9mb250X3QqIGhhcmZidXp6Rm9udCA9IGZhY2UtPmNyZWF0ZUZv
bnQoKTsKKyAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQsIG1faGFyZmJ1enpCdWZmZXIsIG1fZmVh
dHVyZXMuc2l6ZSgpID4gMCA/IG1fZmVhdHVyZXMuZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXpl
KCkpOworICAgIGhiX2ZvbnRfZGVzdHJveShoYXJmYnV6ekZvbnQpOworICAgIG1faGFyZmJ1enpS
dW5zLmFwcGVuZChIYXJmQnV6elJ1bjo6Y3JlYXRlKG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1
biwgbV9ydW4uZGlyZWN0aW9uKCksIG1faGFyZmJ1enpCdWZmZXIpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6
elJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgaGJfZ2x5cGhfaW5mb190KiBn
bHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhtX2hhcmZidXp6QnVmZmVyLCAw
KTsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9n
ZXRfZ2x5cGhfcG9zaXRpb25zKG1faGFyZmJ1enpCdWZmZXIsIDApOworICAgIEhhcmZCdXp6UnVu
KiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLmdldCgpOworCisgICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgZmxvYXQgdG90YWxB
ZHZhbmNlID0gMDsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zs
b2F0KGdseXBoUG9zaXRpb25zWzBdLnhfb2Zmc2V0KTsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WSA9
IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1swXS55X29mZnNldCk7Cisg
ICAgLy8gSGFyZkJ1enogcmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVy
LiBXZSBuZWVkIG5vdCB0byBmbGlwIHRoZW0gZm9yIFJUTC4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0g
bnVtR2x5cGhzOworICAgICAgICB1aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBv
aW50OworICAgICAgICBmbG9hdCBvZmZzZXRYID0gbmV4dE9mZnNldFg7CisgICAgICAgIGZsb2F0
IG9mZnNldFkgPSBuZXh0T2Zmc2V0WTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZidXp6
UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7CisgICAgICAgIG5l
eHRPZmZzZXRYID0gcnVuRW5kID8gMCA6IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9z
aXRpb25zW2kgKyAxXS54X29mZnNldCk7CisgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8g
MCA6IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZz
ZXQpOworCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJ
bmRleE9mQ3VycmVudFJ1biArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBp
c0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5m
b3NbaSArIDFdLmNsdXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSBpc0NsdXN0ZXJFbmQg
PyBtX2xldHRlclNwYWNpbmcgOiAwOworCisgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNX
b3JkRW5kKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCkpCisgICAgICAgICAgICBzcGFjaW5nICs9IGRl
dGVybWluZVdvcmRCcmVha1NwYWNpbmcoKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9udERh
dGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRS
dW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCAwLCAwLCAwKTsKKyAgICAgICAgICAg
IGlmIChnbHlwaEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBo
LCBtX2N1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAsIDApKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSArPSBzcGFj
aW5nOworICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwg
dG90YWxBZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisgICAgICAgIGlmIChn
bHlwaEJ1ZmZlcikgeworICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWCA9IGFkdmFuY2Ug
KyBuZXh0T2Zmc2V0WCAtIG9mZnNldFg7CisgICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VZ
ID0gbmV4dE9mZnNldFkgLSBvZmZzZXRZOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChn
bHlwaCwgbV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbEFkdmFu
Y2UgKz0gYWR2YW5jZTsKKyAgICB9CisgICAgY3VycmVudFJ1bi0+c2V0V2lkdGgodG90YWxBZHZh
bmNlID4gMC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsKKyAgICBtX3RvdGFsV2lkdGggKz0gY3Vy
cmVudFJ1bi0+d2lkdGgoKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3Np
dGlvbihmbG9hdCB0YXJnZXRYKQoreworICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOworICAg
IGludCBjdXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICAgICAgaW50IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+
d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFgg
PD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBp
cyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGluZGV4ID0gbV9oYXJmYnV6elJ1bnNbaV0tPmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKHRh
cmdldFggLSBjdXJyZW50WCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0Zh
ciArIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFggPSBuZXh0WDsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2hhcmZidXp6UnVucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG5leHRYID0g
Y3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRl
eEZvclhQb3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgpOworICAgICAgICAgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNo
YXJhY3RlcnNTb0ZhciArPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAg
ICAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXI7Cit9CisKK0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0
aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGlu
dCB0bykKK3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CisgICAgaW50IGN1cnJlbnRY
ID0gMDsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwg
b3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGlu
dGVyZXN0LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hhcmZidXp6UnVucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFyZmJ1enpSdW5zW2ld
LT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAg
JiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBmcm9tWCA9IG1faGFyZmJ1enpS
dW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICh0b1gg
PT0gLTEgJiYgdG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICB0b1gg
PSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAg
IGlmIChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAg
Ly8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQu
CisgICAgaWYgKGZyb21YID09IC0xKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKHRvWCA9
PSAtMSkKKyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisg
ICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJvbVggPCB0
b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBvaW50Lnko
KSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkg
KyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZWZmNWQ3
MmNkYzU0Zjg4ODhkNmMyMGFjYTFkNmVkYjAzMzIzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6elNoYXBlcl9oCisjZGVmaW5lIEhhcmZC
dXp6U2hhcGVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyQmFzZS5oIgorI2luY2x1ZGUgIlRleHRS
dW4uaCIKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFz
cyBTaW1wbGVGb250RGF0YTsKKworY2xhc3MgSGFyZkJ1enpTaGFwZXIgOiBwdWJsaWMgSGFyZkJ1
enpTaGFwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250Kiwg
Y29uc3QgVGV4dFJ1biYpOworICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CisKKyAgICBi
b29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIGZsb2F0IHRvdGFsV2lkdGgoKSB7IHJl
dHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFy
Z2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2YXRlOgorICAgIGNsYXNzIEhhcmZC
dXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhcmZCdXp6
UnVuPiBjcmVhdGUodW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIGhiX2J1ZmZlcl90KiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBidWZmZXIp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWdu
ZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0KTsKKyAg
ICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKwor
ICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpOworICAg
ICAgICBpbnQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICAgICAg
dW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2hhcmFjdGVyczsg
fQorICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX251bUdseXBo
czsgfQorICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHRE
aXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1cm4gbV9k
aXJlY3Rpb24gPT0gUlRMOyB9CisKKyAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKKyAg
ICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CisgICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoczsKKyAgICAgICAg
VmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50
LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fbG9nQ2x1
c3RlcnM7CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJ
bmRleDsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisgICAgdm9pZCBzZXRGb250
RmVhdHVyZXMoKTsKKworICAgIGJvb2wgc2V0dXBIYXJmQnV6elJ1bigpOworICAgIGJvb2wgc2hh
cGVIYXJmQnV6elJ1bigpOworICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1
bihHbHlwaEJ1ZmZlciopOworCisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVm
ZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOworCisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4g
bV9mZWF0dXJlczsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAg
dW5zaWduZWQgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuOworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBtX2N1cnJlbnRGb250RGF0YTsKKyAgICBoYl9idWZmZXJfdCogbV9oYXJmYnV6ekJ1
ZmZlcjsKKyAgICBWZWN0b3I8T3duUHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZmJ1enpSdW5z
OworCisgICAgZmxvYXQgbV90b3RhbFdpZHRoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAppbmRl
eCBjM2RkYTE1NWE0ZjdmYTUzNTlkMjdkNjFhYjUxNTBmY2M1YTg5ZmI4Li5hNzI2ZGMzNGMyZmFl
MmRmNWZiNmUzYjRkMjZhZTExMjE0NWUzYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAt
MzQsMTMgKzM0LDMyIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJIYXJmQnV6elNo
YXBlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorc3RhdGljIGJvb2wgcHJlZmVySGFyZkJ1
enooY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uID0gZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLT5zaXpl
KCkgPiAwOworfQorI2VuZGlmCisKIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKHByZWZl
ckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hh
cGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGgsIGZyb20sIHRvKTsKKyAgICB9CisjZW5kaWYKICAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIGNvbnRy
b2xsZXIuYWR2YW5jZShmcm9tKTsKICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIu
cnVuV2lkdGhTb0ZhcigpOwpAQCAtODIsNiArMTAxLDE2IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwg
aW50CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVy
SGFyZkJ1enoodGhpcykpIHsKKyAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAg
ICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOworICAgICAgICBpZiAoc2hhcGVy
LnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250
ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBwb2ludCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIg
Z2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAKQEAgLTEwOSw2ICsxMzgsMTMgQEAgdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFIKIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogeworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNoYXBlci50b3RhbFdpZHRoKCk7CisgICAgfQorI2VuZGlmCiAg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxs
YmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxvdykgewogICAgICAgICBnbHlwaE92ZXJm
bG93LT50b3AgPSBtYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1jb250cm9sbGVy
Lm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMg
PyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwpAQCAtMTIxLDYgKzE1NywxMyBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbgogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKHByZWZlckhh
cmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4p
OworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hhcGVy
Lm9mZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0KKyNlbmRpZgogICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zm
c2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdmMWRk
NDdlYTEwZWZhOTllMzg1MzQ4YzEwNzM5YTExMTBkYjFhYjAuLmM1ODI4YjQxY2IwOWQzZmNlYjM5
MGI3ODllMTMwOWZhMmJiMDJkNDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wMi0yOSAg
S2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9t
aXVtXSBJbXBsZW1lbnQgZm9udCBzaGFwaW5nIHdpdGggZm9udC1mZWF0dXJlLXNldHRpbmdzIG9u
IE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4
MjYKKworICAgICAgICBBZGRlZCB0aGUgZXhwZWN0YXRpb24gZm9yIHNzczMvZm9udC1mZWF0dXJl
LXNldHRpbmdzLXJlbmRlcmluZy5odG1sLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0
dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmct
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQ6IFJlbW92ZWQgY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVy
aW5nLmh0bWwuCisKIDIwMTItMDItMjkgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJl
bmRlcmluZy1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMv
Y3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnBuZwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNDgyZmI5NTQzOWExOGE1YWE4YmIyNDNjYWMwZWJhY2RiOGY2M2ViCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCAxNDk4MQp6Y21lSHRkMDNOWW57UkNVKW9IMHZzKD1mTil6MnlAQWVEV0t7
WGBLRVExK2IpRDRQTTwqQVRtKTJtKTRGNmE9YW0KemtTJm9WVkpFRXVRNHhfZjVTQTFvSjBYTX1M
WHZZbyVyfHErb05zMlhZdiM7OT1lcWlibW98a3JAQjYmPntrd241CnplZnkkP0B2aEpKZX4hVW1j
QTE8dnZjaDBLSzhWNDU8blR8USFZNWhiS1ZGQnc2aHFIQ2duSWcxQCQ/U34hKHB5Pwp6VWNJY05z
b2AtJilBUThIRTA8NHRZRzN1eHk2a256ISVNXktxfVI5S00qUk42YVNZfWwjPkQ3NW81KTk7O2gy
Vz4KenVwSEZ8P3p6KnktUHhvND9CS3pmT0x4YDNKbXBwT3lII249d30oR0ROQGxDMmhnS1hiSmFQ
MkV0SWtlK0hDK3BgCnpOfHdBLWRncGhRNzste2xnM3NrQVBkYD1zUlhTbmxAPUlZM0huIVg/Q2Fe
RWVKPGgzLU1ZYm9xXyM1eXlUPVE2IQp6aE5hI0hCYFU8VWtLb0lINjZjMmYxJXRVa2xsJG5PRnFw
Zl44MkhmWkBDfHNEZnF5IVAhSk85bzQ/WlRTP2VKPHoKemw7WFdWQmhnWjlUT3ZIUCU4eWZDNlpu
azNOJDJyZEI0SCF4KTh0YTtZOEFIXzRuPWQ9bzI/XmFYaWZ9TGFZLWBuCnp2RXt3fHFBUlhHVCh4
NGFySE9XNF5LUSR1KnJDNFFqKSR2THRoR3ZOKjJfVWtndmQ1NEZyOFQkRmtJKEF6MitFVwp6Z1Ml
QlI9cj5QWVE/b05BSGVHV2dQakg1N2Y7PisrUnk7TUlza3I+fHJiQko7NihiYG15UnZOM2woPSFY
R0M0aF4KemRtOz9pcnNKUz9MemJ8YEUxJTRiWCpEXlR2JlZoMkU3UE1lQ3A7MHFIbXFlfnUrcFF3
K1ZBTihuRz0hWHpCTUw7Cnp2d0NQSDxjYjZ8OSFuJShwPDhTSTxNKkZEO1dvTG1mK3FKaUpnc2k3
cUhTeWBQcVk9fG5vTnVDbTJabX00enIpRAp6b3kta2RZUypmRTlCN34xQjQpYTYrTWstfUZ5dnA4
amg9Y09HKyNTT159fHcxI2RLUHF4b2oqPWNCRCFrS0RWZCEKemAzOElTWmIqKCNzdH1MJEZWU2dt
amFoUmlackJ3V1VffjFwYE5wYThMMnlecHNOdXgpVmQpU3B4fC1idVYkJXNiCnpheDE1aUtWUDQz
blAoVyh1RUQ0PiFJTnF5dmI1S1JMZjk9Yj9zczs0e0hZTmhrMmYtTWlRNT9PQiR7UFR5Pz1hVwp6
PT0jZkRsOUR7T2Y9SWhBZi00XnU3OFcjY0M5QD9AeExsWiF1LT1efit+WTE+JSorcCZlODxaWlpS
QX5QRF5hKDwKeitNWHEpQVg9eUFsU25FeiNwVSkjMzxWaCo4TkpRY1FXZUs7RSVabEM9Q0hGX1RV
U3JHKUk0OSVOfW83V3EpRGF0CnpyRjZIMztnKW5CREQ2RlVeQDA8eyZ2ckJAUV5tRHdwWkI5bmsr
RjJTaF5HZXZZOTRuNW1eeEpseFlsdS1fQCsldwp6QEk1X25uPzNLfS0/Y0tHaE5KVGZhXnk2IU9t
ViltITZrfVohTEx5VSo7cUdQOTZwK3p0VG1FVSt7bVNqP19+c14KemtkVzhjSHFUTm9HSm03Mklx
N19BZj1pRFFySVRaaSRsO2VlbTQkcjJ6VzUxRjBGPkI9RVBzK29XNllZJE1vayVJCnpPfThed3p8
WmBaNT5pdlVJIWBsUUR6bDEjKlBwdWxRYkc5S3BxUDRRMEgrWiMkbHJVTVh5dlgrd3FJSjZrTldW
LQp6Xmx8cU0pOWp2Y3RkTmNFYWBldGdBQmtpcVNJdl5ASEtSQ1ZOdmFsLXpldWFQeGtTenpWPmQ0
KUNhOHhAeSF+ZC0KemFRJTs7ZTgtd14rb243RWw3XnR2NmMyVFVGPGs4PD1oTi1vT2NhQyp4NEtW
dD12VGc2WlJaem1GcyhfK3hVI013CnpXJjtWUXYtNWJ8TjVQJEVXbSpGMklkK1JIOXIqYld3YX1e
ZSgoIXI5JmVVZWIhYmV8cT1yM0ooam1zcW5Ifk9oSwp6PWJxbCl2cXNHI0F4bCgkXzZsViF1RWZ7
T0lsfnpqI2lkTkZvVXIzVTFEKWxMR19wI1JuZ1NeKz0tP3ZlYHBadW0KekpEMm83M1k+bUdWQD1A
Q29IPTc7Ryp7SmEoZlJtSDhgLUM8TkBiNktMYD4/WEJrZ1UwWkpUPyNiN3pmVyowXzh9Cno9bDBQ
RlgxJk9pTHUwTzE4NEZDKWh3VmJOKSpmQitiPU0zR0VWUmdCbVg3ZX1EbE0wMThMSDgxXkt2YG9C
ZnIxVAp6WGopN3M4e0hDQCVXX0UlWTJEey1SMj91cFIqKVV3U0hZP0I/SCpHUWp3JSFAUmEoKXdi
K2FVTUEpKWloUysjKG4Kem5pQEQ8a04pU0VeeyVtTTIjSTl8PElNZyhCfSY8YjE5ZT1zdzEjO3tS
O09aYUhiKnhzRipSO0VVeT9WIV4zdDhwCnpXUTxNYXI9fGNEWHcrS0ZRM25IKHB3Xy03KXkpKVpr
MGwmRmJqYWdQbnhkTTJVK0Zya2FCYTl6UHI+R2pgS3E4WQp6UGpFdG93emIkXzd2fUYwSVUzSnY0
fiNvPz11bHMmPEw9JHhUdTJDdldnaUd5ZTBgTXVeSmx3MUMrRyFeRy15dmcKejNLe0QlUSUmWClN
RXVUNT9+Y2ZzcUMhQn1vZUhyaFRUfG8/eFFqTCFZJnVwTEcqezFVM2lAcncmZ0skd2xhc0NVCnpu
eztPcTN3NCFmSEJjbU4/OzIoYyYrJT5DUVp7UmtHSXRfN0Z2U3FSKl9AX200WXhZZVE/Jmh5blk2
OSgzVntgQQp6JkxjNnx2c1AxYEpsU2pTS0t5fSl6SXB3M2lNVEhuYDJGPGFuYVBCTm0wMVNldz1o
UnEjeD9aUDllRCM/YlIra1YKelRCWnpDZFN7ay1kWS0hYUhsZl47LVV7dXRmQT4qfkowcCFUIzto
ajFYWH5BUFNOSjdFdlBEJUwhMitBb2hURlQzCnpZRUdBQTJoPUhrRGpfZFJTMEtiVEVPKGl+Ml9L
KlhXSHNsZjhham0hOXJEeDVJNlRyZ3pjJERjaE5ISkZ0fj5RPgp6PGFvTmg1O2VjcEJQNEYxOyk7
MXxnTj1LJlM5PVloP2kyNWhUOzRfcCFPKUtFQ1AhT3VRR0hAaGJfPCMtciVUVT4KenB6VGhrPSp+
UVFhcGF0YHFoKCoydmtYOTwrbDU/eDloSTZ0ZXZJNmxFXkolSClxWlBRQ1lHRzs3Wkg8dWlLdUl6
CnpLZzQzX1RDYDdJYTR5fGxIcUZXP0UkbUk5XlJJfjhTRWtyOE5rZHlGPj9pZk80Vjd+bnI0Tzde
VW5mTE56NS1tNwp6MXE0OH4oWCFObWImbzh8Mj1UMH4kbkZAbiFyUWZQPGt3bnBCPzQlSSl4Xm9m
VjI7MHVkeG4zWVhOU1I+JU5HaVUKemBjMXMjeiYkaDBYNl9RUSs5eDtIeEMpWXojJlRnY19aZ3Bs
dkcrXjVlOVgwPjs1T3g3dFA8Z1M5MDdNeHRDeHAhCnptPGI3fW89IU1iOVROdkFjKV93T0sydXhV
KSZKdlAjS3hlfWtfSDNuJWNpZyYpVlg7Y3srNnx4OFF1M05obzNBNQp6SXIqTF9uWGF6ejZURXU1
YXBrflpGTjBDWVBTSH4tZ0VefDl1S3JYXnJSTHp1Uk9qSWBtKWRWfTB+SlNoOW5kVSYKeiZTQjdt
RF48OGJZTVBibCREZSsyOV5TZiY8QV98dSZAWn43UXhfd0wwOVI5PjE0M3Vacy1AcV5zZCpVZkg7
NHszCnpSVX5Abk10eUBXQ0t2cWJZdjBZfj5GRm0pRHlIT3lNYm5ac3t2PWtVQk56Rns1N1dQV0VP
N3k5PVhfZyt2ZXszYwp6P2xTZXghLXJwMU5NfkE9NGgwTFN6VEV7P0BQWjMmRGEyX0wpNEpCMCkq
NkBMTUteZ3g7clhrJCNZQGJvJml3OE4KellNIVI2WkR5KkNIV2hPb3JsXmVmbHo2bDBDM2E8fCZ8
bHtiVnBkRCpeMm0qPSV3PGNfdlpXJDElPytBeGtLe0MoCnp6dW9AaU0hUnM1I19IeFF4ZSNpJEBR
MDZnN0RPI2c1UmN9P2VrJXV+d0ZzdSo1JnJDV3JuYCFzdUBhfSExKUg4Iwp6LU9kbF9kM01QY3sr
TGc2JFRUZylLVmpSTjZuV3xwKTZsekV7dnxjYHVrRT04ZFN3cGZoanoqOSpQUSRgeXx1bn0KekJC
V3tLZnM4KnROd3VrZU9vUlJXck1RMD0kdWYzcV93O2hOcksqMEArREpeZFk4KT5xJjhtJVl6Y2Im
c3V6dFItCno8YXVmbm8/cWFacUVxMDVTNHpLQm53c2M0R1FUUkQ/PkRvUnVPSythRFd9VnlSal4t
THF1akF9Q2hzb2V1JCZtKAp6UElQdS0/I29fTXt5Nm5HZ1Y2Z25IRiZaekUmTElJQjcxKnU0ZVJ5
bHR+enczeTcjK0JSamZFWjV5dHNiITJLUzUKenhBOFh0aDdvMmZqPklNN0J+QU5pIW9fKSlPR1M5
Zj5KQGdoTXFyPytCQVI+Q0ZUXytZQz0lN0x5aCNoP2JFPnQ5Cno/M01BWj8oUl9We2Ewe1dCYXhu
bzNDcGh6ciM/Kl5ZNG49OVhRcEJ6YEFnaHRXZ2FvallJQjg1ODFAUlZNUCspPQp6JTJZeXM7ZEVq
YD1zVFVzcnhJfXNLbHc3TmUyPyZwOVlwSHhGLW55M01eMWV5WD5Tdz9UVnxNJXJUJWpENlVAMSMK
ektJZ3pqNFFqeWZlbUpQVzNwdShQaDZfSlBHYH5xZD96dVdRZkk0RUc2Ryg3Z3xFZEYrbEpvZ08k
eEdkSTlZOGwjCnpjMlF3JnFNQiFgUUZGYiomWVpBNU5CSC1oTkkoYUt8Snh2Vl92PHJiS2t2M2tm
TGhTfVI5dj15TXo5S0h5RUA+Vgp6eDR2KS1Efm96P2o+MiRMXlhxeCQmPTQ3UFUobURKWDtUfEZK
NShGO0N+RCRpZTQ3WDJKVzB+Wk57KChvTXpad2gKem5IMnhncHpecWZkSnpHeUUwUHA3UXBUQVZp
YH1XJTVuVDFLJE5PS3Vpe0gzdGolN2gjQlhtemwqc0pieWFlMDFOCnprQlM/VmhRY24+Vz45Q2wz
b1Z5OWdJWDUpeWtfbVc9UCQ9Ujc1RU1wdmVYcWJsJTF1O1dLPlF0LU8oNVJPSEYyMQp6Qy1kaF4r
eSNGNmk/MHNIM25RMDFqb0hBdUxPWGVXV2dXMi1yLURCR1YlI2JwR2JmcFVFP0hebEZUXmFLTitH
Sm8Kejdfd1dWUV5Rc0M3YCQwYGt1SkllTmxBaWVqaTNOR2tQM3hpV1lxbGo7VkpmcWA8NXZROEQm
Uz9HRjRMQEUzZFl3CnooUGdjbG5ib1IydnBKYG5SYkFpTWBpdjRybiZBNUhFMk8jfEg3JWtOezlQ
Xm08eDx6OCNxSH02WVRBZndQaHNFVwp6Yll4fHBeMHFMaWUrVnpraTtJP3huSlpUZHtfdmAxRWIr
TDw+dzhEa2ZaMWZWbVJKR0I0SmF9ITJeSVF+eTcpZkAKelotYl88ZHhsQDJDdzZPOCFaUSFRZEsr
ZXFiWipIP3w1U2d1PVVmd2lVUStVYHN5fX5kKG9pTnhGRzlzN1NPWkAyCnpkTTA1YnZwPEkwRDMq
RDNJRjhSamdGa0VMcTh+fH1gdSo9ZVBXMlI3eUlsWU1GR3NqMVk+TnE1PyhkdlAkPlRqMAp6O24o
YkV3M1czb0IrSVpKUmdSYl83YDsjMlg+c0t1QSloWWZhfjBzYXd9RH5QVTtUMn1iOFI+eHdjOFNG
JjsmRTUKemIpQ25+aGUxQHtaSntTNnEtSlB3RVV8Km48KGJ+Jnk1VnlVa0BFe0xCfmxZMnUqe14k
aHx3OG5afVMhTVJUfVZRCnpeTz87YkJ4MWs2clBwJGVmRkZHa0FKaWdjemVsKFJzeip3PitKKUJK
K3VRUWc8bz1paFZmfkI/e0o7M3JfTX4rQwp6PGNhTj55YGw9MHdRNjBRbzI7UDRXdGErdjVMZWpa
KFp5MEBtWnZWUUtkOSgoQHBycWAlQWc+VSo7eU1oOE0qTkwKeiZaSmQpTzMyZTUhe2FOfk1OeHdf
cylrRHNKQiZtXmZtcDt3NFlieEVoamM4dGpSUk9YeHxyYkNUQXpqMmxJVGJ0Cno5TGRzUHImKEx2
dTRjdjZVd15DWVFnZjFlWlF2X0Y/cWdNdG92UTtSSjFiVmFwYnlvMi12N0coJDQ7ejZCbmR0fQp6
R0hZWUx1VTlFVDc2PihrYG1UMml1Z3REJEVXPVNPKHlWWnpiM040REszI2U0aVl6SHl1NTRUekgk
PWNpVTlqb1MKendXN0xMRG9EbitVMnV5VVBsdE5Rc3lOV204O3JNYGUkP1lZVC0hUFJQSExSVj1t
TCNhSnV3TElZKFEjUWQ/VGthCno+Nl40PDt5R0wmaz9OVWhwZzlrOCYhT2h9V3pATGtPWWlqUEg5
X3BMUEdnMVNPdDxMbTl6c09ZSm5XYzt7cj51Pwp6Q3JLV0ZLanAjV1o/czIkLVc/dUV2bSs2aEdj
aSZXUWJ+SlRLK2AqXmxHKlN3eCUhbEp0KWgxQGBGQVQ0d1VeKFkKek5vbz9fJilmUno+Uj0kUDIx
eiErb2dgcEdHUXpPcGoxKTROb1R8bCZKJXVRViFzaCMxel99THdfYE1VIyleNTFDCnp2fjBEJFE1
bVNCcUQjeV4tYU9AWWlfSl9tTkF5d2ZhMlRVeW0pNmt4ND9pPCY4WndVQXVhMzFPQ0gyd3p3ZTlA
UQp6bHQpdHdNbnFkM0IzVnkqTjsyWXRiKW5OPTBtYnlNYyRTeytLT1Z8cVlTZXx6UWVYYUY+dU5T
fW97aEtid3JvK0sKekZBPG0xWlFodjdRQHtlQjgoVkJzTypQTmZKaTloTz85WClmciZQJk57SEMr
WWZpMUxyY0okR2dhS3xCWWFCe298CnohZGdUcCNoKzJMKCZ4PFBSST5zVyR5bnVtLVEjVlVedV9W
RSFeRW5XKj5ebWMhUl5KWEhOS3BHZVlaVmRyVDUrVAp6VkVQLUJoM1N0LWd3IXlAcypjUiFvYiV9
WjJIengyMUU4UjVxYzdgS2NULWxaWEZgaXhENkkqOTlqYmxlIWU+NUYKelAxMmNvOzVvKmxFMk1e
VzctKnFhXytwNkBXVmpFYy1jU1MhQUg/KTZaMjlvfHteM0pvSj1UYFYkSEApZlRJZ31BCnpVS3xa
bkU8M31uP0hVNDMlJlVRNDh4dzhpaUZVSztzaWBzWndTfnBtZFI0WDxVdjN6c3lmNEt5OH47JVMl
KUooSgp6Kyk5Wjw8eUdfMVN8QzVJZjtFLWBQeXtFQ2ArcnJie2MhSUFBYT9eaWRrYFd1KVo7NVcz
JC0maHpxcC1kMUBlQDwKekZqUjQrJjExSCZPYnYjcUc9c01OSFYrJTgreVR1Izg4NkJTZXhyRHtU
OXB3ZkNWaz5xWXwhKGI1NyROX3BjfjVTCnpOYUpyKj5faz48aFg1PmIjPEFeem1YPTN6ZjtQOGQk
cGVnemF2KGMzcGpiYUEraCtOWEghUXBtRTAxMjhjfG1LfAp6VkJGS2BpcD1YPndwTUhCJnktZmFP
SDRrWCllMzM+JHFgYTk0cCY2dkpVaT5weE8ze0FfRipCUENla0MoZ3F6eXoKekpFejhnUyl7X2Ip
NSEkRT5eR3YlTkE5VXtTVHNVfFYwR3thP2ROX01YT2QmRHlqR2M5ZXFVY0xsU1U0STxuJn1uCnpf
bVppOUEyQXB8YSpyM09JKGVOaz50bl9rXnFZMHpZP1N0U1J5K1Y5LTNuRmF2QSFePmshKVhmaDAq
MGJ7PzRTZwp6MGVkV3JiZDFxTm9xfU4pJmVATCY9Pm9LNyt+V05fOHs1bmJUYClUR3RxVSM2TCNN
bWVLT0R2R2xheiFDekFoWDMKent5UX5MSmFWTXsmblYpX2xjczdRZUpvcjtKSUBBajhgb04hWnxe
UUM0KU8ySG9uVkh6O3p9dT1fU1RwSVY3PUV5Cno4Z3hjdG0paG1yXys2UHpkKkE+cT9pfG9rJHZF
Tm9SZyNRcTNLYEd3NTkrXnN0MGhhcmUrPTMpSDZoe2duT20odgp6YlU3SXExYCRSTHtHYm5Rc3go
PGVxQz5leWkjUSgtT2VYKkY8SHkoNmUhT3BLcn4/I1dGQ3E/TmdLelYmU2FGPlgKemNWOEZ7UiRN
V0FvIWFENyQlNXtZQjkkYVh0fnRHSDYqKlpLRFl2eylXJnskcCphfWRWd355dX5wcUdRblhfaTR3
CnotUTMqdEAkdTxAKyVXcGA3WDVJbHsjWDdDUXU1Zyg9QCNoZz80SkI2VEg1alkyVCV7YiohSjBo
RWdzTVlxIzVJIwp6Z3w7KTNwcDt0WT4kJm9JVE9XP0hWUns1RWxFdWErb1lheUQhPWEhWmdOQjBX
RW5uWX53V157T0tSaTZYPlI2UFEKeipnb2hIUVZnflo4Z3ZnZGFaYnBWR04tYmhVcTE1KXc3ZTd7
dGFfK2ltTilOdWs9b0o4TnYmcC1eK2syWnpCNnRYCnpfWiheOWxzU1NaSihuc2tyP0NGcCZMP257
YT9yQEZoJEleV04kP059KSZoZW8wJHhYZDNtNHh1WEokJnNERzNxVwp6Z0IzN0w5aHpkSnRedUZB
UmNCKjt1SDRYJTZqZVZNYTtMYXhzV3RnUHcjI0RBZEp1KGZOQDRGUVhGdXw3Klg/OHEKemxiXyli
Tzg4QUB1UmkkU1QoemdSWW9uQUdUZTkrQ0QxYVp2bGpPUGB6e1lLQEJZdEdnd2x5Q31vKHYjMURN
d2lOCno0TmFKR0JAVVY5OWUrYjFBSGZnQURqJWFaWHtvQz5LZm5CUHRmRWFOTmxkbGpyMVN9Z2l7
JmNIRH5+MWMkSWQxMQp6bSZ5WnJAQzBmd2V2K1BpS3hVXzA9ekRSTjdeeSY8SUFMbkVONXpwVEph
YkRAKCV1fihDTDZhdGlrej16IVdOeU4KenUxSm0mKkBSZE8ySnt4JjI3JHJRezg5cXo1fWZWUypL
MGNLdlEoIWpLV21yallVXiVtc2ZlYXg0bHBUalZvM0cjCnpTIWdVUiFATikqbX1vcl5jKV8oaysr
NlkoWGxkS14lanVKTzFqQWk+UGFicTcydigrWlc5Q2laZ0UlSVhIc35nOQp6PzQleEMwe0JHNGBv
dERnPFU9SHtLKEhXd0h5VTZeO30zSllmVXxaMTZuMjllJW1nWCE5TFdLSlohdWdLVyhHUmMKenFJ
eCpveHN6SnVNVSVqOFU3dndqJklDYTFNd2lPUHVNVmhSfEtxbkZVO3tgOEI7cGs5MUImN1hwK0Al
V2hXZ0JPCno1elkydjw2QCkjXytoNk5JNE5CcXVEWEQ3aDlCY1R6OW55SjVXUmRKPntrME0/SH5f
Ylh1R2JYaFA+UDhHV1BebAp6I2Q5OFNLenM/KiRzb1E/ZEIzez1xQWhZJVRtJH1EK1RTcnF4YVB3
YmdAWSo9SWBQb0VwZ21nKVQhV0M4dzxJamoKeishOG0+Yk98PXVvUjZTbzg/Rj50TzJzYFIrWXIq
VDUydnA+bEpaUWA/Zm9vfW4jemZ1RGJsTiZqK2IjZTU0MzMtCnpFRkxBRGw9UEpHQkowOGVtfmxA
KG1lNDxgP0N8YGMhUDQ3UCg+RmRBS00kazl4KD9LJVFjOHFwJWZ1RzJfM1MkIQp6OSkoTUMlI2tq
UXtCbWZwZj11X2dTYCZCYWBvbkghZWZJJT9pU3h0dGc+aXlTOyUqRD11WDk0WE9ye2VLcjx8YEkK
ejNPNEprT0ZOJDVRfV5ENTlXR2lmI05ycmcjV3NfMGh5PyZHMXF0Vl4zb2UrWDhtdjBwcilPJmdr
fE0hUE0rU21GCno8OTZSX3BqbHRIUXk8ZjV2IUtnPzspVkVkMjl1UGZAdzk4fVNjSVghcC0zfXUj
QVFpc0wlPTBxY2tOZHtDWVlyTwp6e2o9MTR0P0pndGxEZVVQb1ludFhuZ1Eoe3hRQlAxLXxCMj1G
Uj5AOUBQKiZrVE9uPi1MUjN2RWAlQ2c1QTktfFUKel4+WTx3YCVpdjxJdlVXWjN5aCZHYm0lPzYz
YDAyLU0mQSZsY2U0WG4jNDszOUAjXyVQcmdlfGF6VW42MVA9MFhPCnpGKWUhLWl0YT0oVnhBX1Bo
WCVQPTJoN1JaUjhjVVlNS2VLT089NXpMeT95Mzh0WX5XKTFUKilmMD1vQVY5YzV3fgp6cztlRzJp
cU5VWXc9I3hGUyhOOzN4M1EmZnF3a0p1ZC1aNlU3YnlIYHVxSiZnOUI/I2M3TGNZS2FBVEBwdmJM
cnoKejM0V0l4WCg5byk4KlowYmt4MT4xYjdwM0UyJmx0MWNPQSZPVz4wRT5hKj80MUhzUT9QMWVB
N1pYQUR7e01OX050Cnp0VzEzdUtmTHpramtRY3koKihGXlY3fWR8Z3BJYVBhQ0hoRnA3T1JVXzRH
cykyN3kyakBgS3d+Nmc3O0MyZlFoUQp6TSVRd3w3SzAkTEE1RkZrMzJhPWt2KnFLO29DWXI/UTV7
WmM7K1F0OEtfTHxSSDMkPXFfdkdecVdLdkokKkUmdTUKekleVmhFS2tHOGheX01JM09Mc25NPmYy
c2Q8eXZiPDJDYEc0PEhGSChZS3dMQHQ8X35qOH5WUmkra2w9PWxUQ0dNCnpFbiF4KXR2SCYhR1pg
T0ljeG9lYnhrU1AlUHErMj8lcjNwJlQkIzFUO3wxYSFUQjJKXlBCUncrTkw2O3F7djkqRAp6Q0Vj
e0dIZEArbkwxU085aG0mcjJtP0M4fi11d04jSTJiY3ZhdH0hJmBGd3hVYHxTZnNhT3dsK2ZSKT5G
WFRlZlAKeiUxX1pQVWJxekU/MzBTdXE9RzJrTXJ5PkNeeVh7V2ZuJTlqa0xfQF43Tj1Fa1FOcnRf
XzFQNjxQOHgxQHJjITVPCnpJPURNPTtXOCYpVTJhYTAzPnVBPlhAJVkmMTA5bCNDUiVvMig+XyFJ
PTdDRTRfd1Y9RVNSQl9JSSFEJUVkZ2Rofgp6M3skKU87XiEkS2N3NWpLVlNvR0tFMmR4MDRIeEYo
KX5FfVEhRmhWJExNZUpEaUtjRzJWXm5wVUt0bmFBZkxtfUYKelY3ZDIrKSpofGxRMG9UYT1CJVdv
OGJIJUdTa29SV1BJKlZHVTczPjw7Qnw1YlNQMTB8dzswTkYoPHM+LU91NCZlCnomYmlufSRKZm1j
WnBUUGYxNj1nQ09fJDBKRkYtJlopMU9TQ2xib002JlFea3o2QTY2KURGRkNhay1RY2V2ISo2Ngp6
dGlNP2syQUgrQ3hrMDRVIWIqNXtqO0w5a1heSjBeUiFUTkBycl9ERiQ+bTxKP2BmOUVWMTlHfFFC
JmdKelhAUGcKend5JTdPQWwleGs9RnUhcEUzRi1fPkBZbFZPRnI3PzV6eClFP3ZTa3o8Tit4WWtW
KTcrWWdhbmdyY3ooKDx5dkF9CnopWG85aHBCaXQ8P3pGP3Z7IVBaeGhgfFcwcyFUQUJrVkF+aG45
fjtHUmdHd0kwO1dlYj9uJmU5c28zPn1iKVkmbgp6aXp8cjlUciFyRWxHQnI+anJLcUUmZk56bGE3
PXdxblp0bFI9cTImJGY+UFVtXkVkKUh7XkR1clhwVzkwMXszVFQKemg1YDR+Pj1BSE8tckd8aGR2
YSZ7JWh+KUhZOVBsbyZ4KzN5Y0NSNFYxWWZWTldIM0xEXyt9b082cyhFKlVWZXVgCnpZd3prNj1W
dmBzcyRVRzRAcVd3PktCd2oqakwrQGprPUpGOG1FVX1HO2xZPXpeO1dHaDxRMDZqYDxyR2NANUJH
LQp6aWk+cHc0cE5ueTFlYCEpYykrbj1lLWlmIzR4RSliWnI5OWNUQlRAalBVVSs3ayUqdDJvQH4j
UypgfFpoKD9sTFoKeiRMUTYkZVU9NipIYmRjcXhTKkgydzM9PTBVOFJnPWdOJEJCWEFGe0RATlh6
d3NJRUt6elJQYFkjUWBBVFFOJjE7CnpUR1prUEBQNVV7clZIfih7ZEMwQno/MEtQaU5lZDl5T0xs
TUgrY3x4b21QUzVrTHw+K2UtfUlGc2M/TUlgIyo4Rwp6a0ZAMXpffWdzXyhnZTtmVlpGQTwocFUk
UmY0OEowRy1re2ZrUnpwRmgzaz0hSnNtblUyM2ljSWJLNiNUSWtNTV4KenFTTzVSNn58bGlHcm5i
ei00JDRYJDc5N01xKG9+QW9nO2B0Sm1FKHx6SzBrJElLe0V+dVVRTiRhX35+Kj8/MylVCnpFcVp4
c3VZVGxwZUtAcG9VfTQlSD93LWtWJCNNdmdeXyRraSteQTN6KmhFQTJxNl9ndlM2VEgpbVgmRXlR
PEd1eAp6VWJSRVhAJjxMIStpJmRuNz9COUVSRWRBYnckI282TlJPdnMwWE1wVUBtcy0jPmZxRkBR
c29XMHo7IzNFKHRZXjsKelVsMmk3JDhSbkpYX3B9YSlUKFdwIyN8JmhkO3ZrdjU8WU0wMl9LKWFI
c14xeWE8YWNNJiQ1WnNodT40YmB1NCNLCnp3dGBeRipjYXhlJipHK1EjSVM4WTBXeVBiPFNrWENe
NUxnJWV6RVQhe007YFNaeSgtQUkkUW53LSk+WjBZMEliKAp6Kmp9aXV1ckc1O2hvWlgrYj5UP3Vh
MDN8WHNnS3x5Y0IybE9WajBTPztFYVRVYFUpckBwS0w4MEdpYE0hcSs9UFYKemJScFEwQldxMldo
Un5gcVI1PVlsb0JpLS1HemplViVAO0NGN3VVSmxMJCQzcGVgeEYzNkA1UChmMUJzUE1acDNgCnpw
KTB0WUFnJG1zeF5WS3tLdUkzSkVRMHVGOGc1ZTZEYkhgbHdwfjlDRUheOG9yPVUyciVzfm02S20z
LXM7OFl2Kgp6akw1fWNsIzEzcmR4Yl83Tl9JVG5LMlU9STxqTyhzb0c/NTFfaElucSUzcC1IdE0x
eCg+dXRFKFNVJD1OKyk4PDUKektmY0lHM1RSeUVMKGN5WVR2I25eclUlSG47Z2BxbE5xNHx7cGQ8
UFYpRjxLVkdkRykmbyhJc3hBcXkmd0tnZkMkCnpWcno9UT49IzQzME1icGQwOUJMY2xvcT4+ZkZ4
MF9jUC1rcT4yNllTdHlBfVBYT0xYWSsmJX18X1VIanJ3UVJeKwp6d2ZNTFZ6OylONlkmSF48JFgr
PkBCRD5HdENGbV5EJVU5biRhLWBEeWx3KksoQ1ZsdFFyJjYwbG4+O3g1cXd1fkQKejlMPGdOa1BZ
dkAlcXZnRHBNYU9ZMldVVzJ5cUxgViNlbTZvSWMkS1NKQWkyQ2pFdW1NQFB1JEtvPFpCfUNBVDgy
CnpncnI8VGcwVFg9PkxNQjUyU3BYJE43dlN+YUQ2e1RAQ2hINWAqYzEqJk0zNmhWVEZ6SkM/KE9g
ST4tZDA+fTVacwp6MnAka1o5K3xaK2FfZkR8UDZjX2taNjA3bk9JU01pZShiSEs0JU5CcEE/K1Mh
MU9fdjFeVG9seG57XzN4V2VDOFQKejdaTWBaRHRfVCkoWV9BY3MpPD5mazJtYCs3d0cye155ZUgr
Qi19T3dWTEV5VXc+RDYtISV3JXpMMF4xTXMwVUR8CnoxRnAhVXNOWnZJb3JldEdlI3AoanBMcjhH
cm9EeUNSYV5nbUBYNGdlIXp7PmQjWUJ5UXVaalQwaTNvcWZVMHEjQQp6Z0s3OytOPXAwfVU2YkhN
elNXSkdtcW8yQUtIbTMjKkA4UzZAaCNBJHBPWG1fcn1BeksxJDtYQU5NQX15QkN+dXsKeiNjR15z
QDkmO2JWb1hgYHNrZFRaR0o2T29zUTh4MUxGKTxZP3s2N0dQZUtkVkVXU0NPP0lMWSZRNTA+Zm1y
OTBZCnpHWkh4QzctVlNJQEFIKGsjM2AkQ25BMTheZmskb0otNHoweEhtO1ZzSFAkVihgdV5TN2RQ
WEx6VWJFKzlkYUB3OQp6S2Q7eVZpb3ElRDJtdmdCV15pOStHRmAoUl48aiVaRW9PQ1kzYVR9IStU
Vm08T29gb0NNQyRRclQ2aVNleSRwZGoKemheUEphOUlDVXFwIVoleTM4I3xlVDdNMy0kUEA1VCZh
UERvY0hhWUdzdUVCJGRVTTxCQiFeQUN7fkElIT9ZdDVRCnplYmhCKGxfR05GQ0M0WXZtX2hVe3Vs
IUkhKHdxK1gzalBlMTRpVlgjZEh3Xj5sLW9kUF54cWsqNFdUcXhzZ0cjVwp6aDtzTWgzMHtHRF84
Mzd4N0Q9SEplKn0/MUMtQ2lyWFIkOFNEcm54VTVAPXF+VXgkYyRVfkEqSmUpWUExM2U9SkoKejJO
VWRLT2peO1NxOGojUyYoZXNXK3p1PlExVlNncjlmWHJaZ19ucy1AYXJSTDUlV1dsVUBlVjdzRGF+
IUU4fCEmCnpXPXM2cyFHPVh7bitsJmVaa25PdXgqdDVJQihNJGBKP0BrWVNGXm12em5lbUchbjRA
MVZPOHh3VEZ+akQ+KH4xbgp6eTwwI2hjKXN9Z3ZtaH0zV3BZJitPLV9VOHhwViZoKyZqVjJGdzBj
SVMmNmByaD1qME5FVmNlMFQkKChPbUV2JUQKeiFkZzhtOFJjIV5FZDFJITVQISRXclhsVUJnNiMr
MmQpbVRxPEhLSTw+KSgkPzcjPG9DczhQPnw+LV5QbDxGKTB2Cno9SzlSKWhPTmFtTkdqMVJNOztN
fU5yfnEkJUFEPE1QSz13bVooMjJnbm4yYkJJKXhLJTRjYWo3JHhAe0lFWmAmZQp6K2FnZE5qPmFY
fUdrUllGJCN0MSlUcFE4cnNUfSZ9O2MtKCFLfFdQfkBxRFJreXs1RlgoO2tFbEBJYHk1RVpFWFAK
emhSfnJ5YTBXOEt4azZtPEU0PWB5IWAwdmJlMkRASm1gR2BKbE1yVT81eWsqPXNRdWtpWGM3OUFX
Pm87KDlZN3I1Cno9Rk9YbF9gIUFpWUh2dTsoZjcralptQ3piMHBRX2pXQ1N0SD8oIWdaWVlwVDgk
ZkxPZ3A7cncpMEdpJW9zM3U0YQp6JEU/eTh1Q3ZBWCU1ZTFqM0tzK0xlTy1JP2lgQ15SUlJaTGp5
TV8tT1gtIXA3ZldFczhmenBYNEZxcjd5P1ViYFEKejJGfXlocG1VXkFkIVkzSURYZn5KRSFsNV5o
dD9NJDxudmh1Q2BEVGFITjRnWHA2PyMlTllOaDs9QDB6ZilJcUNJCnpQMWhRQ1VfTE0yREE/cjJ0
PHxmZWdieWZBRDctJStfe3t8ZlAhPXtMbndFMCpOY3NYS08mNE1YekI5MTJxcjMzaQp6JEtCOGtV
MSpleFl5V1dyZkAzYCo0MkdrU3daYmFRMTkwLVA0am8jNzBXdThzRDxyMUBPJmIkRXB4ViUhNElS
VykKekwjYEpzKz9lYn1MfUc+RW8oRDR9SHh4YzdnckF3ZU5WZ2deJihXb0w7RlQhPHhxRn12P1Z0
YFRDfiR1O00xNyZGCnpQIyN6V3oqX3stJVFSJGo9YTEldVQ1YTxmPD8xMTtEZ3NpQWcpblB+MU9i
QyFlKllWRFF6WWAzUHpzfGZSQD53Tgp6cmJ7OzNCbD8lMTdkWDBlTWNeJDdnPFJNKiUwZUZSQC1S
MH0zcU5DPlhOc2E/TVdQKEQwbyltTUE4MWBqOWcxV2IKeigmP3VsN2w7clU/d09aT3c9eEFadzx2
XkJBUmVYeUZNMlo9MjstNGk5PyVMfmpaX2QxV2pMNClkfX47VHV7TF4mCnoqMXlgcEw0P0RFazwr
YkdLWChyentreXAhTlM0N25EP2xaJkdCPEZfNkBXb0c+Kik5ZD88V2J2MlhHN05YbDNKUgp6bncz
K1AmIXJqMngwbz5NeVRRSV9PRjJ7UHgkdTcpQVdxKHg4eHUyRCNsbW4rUm9ZZkNUQ3BoeWVsb1lm
THtAWWIKej1gJDJWMDB+ZnJ5I25gRHY5ZXZlY0VKa0hFci1WRnUrVyh2TWRTP0Y7cHtESFM1ZXJI
dk9oNFhrXnYlNkhhMzhWCnpqZXVzQHloSDAxJGVmLTZaPlZMRjEtfFAmX2t9VztfPUAhfGQyJXFA
Z0wqQyp3P0lOSmU/VGpzKWJFO0J6fGRafQp6aiZlX1JsITlRTGohbDd4eGZ1d0l2byt0Myk4P19f
XkxwITttVjlxb3QqZmN4TmMzISg9RWphIXo/Y0gkP1g5bEsKekR5PEJvckxoK2dDV3N7fC1kTCNp
aktLYFZaQ0x4RyN0JEVmbiQld0R2NCkrNmAzMyhHNDJKTnNjPUpmOGtnNSoxCnozYypDdU5JMkR3
O1pER1phel9rU3A9aS02JkNlM0JkPkNaNzxNUGdiKXRTOGNvSlc4Ymo0XnpmNkdmQE9CND5ZfAp6
Vjl3aFU1Jip2dnJIP1FSR056YXY3KShYYlhWVStiam03XzlrP3xpczJEKlg3TUVZXzJgR3FaSE01
e0l8e0xNRTAKeitFOSZKZm59YU5HTFJaP1ZuQk4pQytfJXc3IzlTdG9RMTY7bkohO0pGSkl9VCl1
TjA4VnI/YjtJOU9SNTB9WCEtCnpQS1BSRzN3eEhyRjU1Mi1lIU5yczRyQyN6bDlGaHt1ZUd7cXI3
UiU8dHZOMXBTK3BxQDc+dW1qaComTXVrVnh+eAp6RkxaMGgjTmFuR1klaEYqPzFVM1EwfW1hVjBR
cUk5Jm9lU2dsUTs7T1lDdiRVWjdwVUlRaFdvSE5yUThLKjJvQ2EKenpaOGdeX2gtWCNaNT8/d3Yt
PlYqaHUzciR2RH5rPjdAWTN9NWMmQ0RtfXd7ezc/USs9bmtiQjhVOHBZX2YjdEJNCno2YlV5c0hX
SV5DekUlJlU5P2QxXmt3WH5GQU5aMDIlaFBFN0F6b1dPNWBCRFRjRDYrTGlCfi1rJDUhbXRPWUFu
RQp6dXIlRThMUXd7PEVEKFIoNE1aWlcqJV40dTU3cU1LRG16LUNubXF2UGRDK09waVlQY3V6S0o8
JjJse3EyaFJXZX4Kem98VGomZnp7WFlCM19MQnFuSnY5WHA8fmJpaygzQD42NSUwVGY7MVl0M0pl
aEwyJCZhdSRRITd6K1gkMWFmfCU9Cno5WWliSiFASGcoMiM1dHs0SjtLbyNkcDkwYy1EVTQzazs/
cXFJbU5ZRlBRJWpGQ19ORWN0YTJsRH0xdG10PT14cwp6P20+e2woJFM3eSZFYHlyPU80ZlF6PUxh
JUsxN15PZmRtWmNMPTxvLUg+YHJFK1h9QWp6SENpZ0F7YmgmMExwdE0KekNERz40NzhAKHtKZkow
bSE5PVJVM2tTdHVpfj5NLTtAdjsobHR7QG5oLW5RWkBDVDwqK3lrc0c9IzY0d0dmRXwzCnpYJkAy
Z0pSTUM2KWE5a0g+MD8qd0FnTV9GOHdTMz87eCRYJDd2NVYhMD9iUyFCZVlEJUVLV3dKWFZpa1J2
YlVFKAp6bTQlY0JART8+QiNBN018dS0xVmdldTt1eyRoRDFPNzAmfjdBM0RZd0lCQz5XaTYtfklr
XjFOcktwN2tNVTlUKzsKenI9KGZrN29sN05iXy1pVHZrJUYwcG1heWgqYX1ZNGZCV0hNSGxSaClQ
dld9SVVMUVJPJXF4WWtTeDg4UCQkbTs2CnpSKSRjamlfI3VNaFZ3UmkzZGhoVTl5bHh+Z2gxfCRq
aFoxZVZ1UHVXWGkzPVk9N0FwNVFxMVFhSj9MNSZzYHhXPgp6XkItaG0rWnxwbzhrMz14cXohak8z
MDReUzFkJVdaNERWTDdVeGN+QEM0YW1ZKWleYUVnMz9nP0RNIXBRbmdMRFoKejR4aFZ8O01OI0B3
ejxBfnZKb3VrdjM0IWlvc2Y0cmcobXczdXsjRH17Sj18fkJ4aXBISEsxVDRgMFBCMDx9ZGJyCnpg
Jlo7I05KXyU7KWJAXnZoM0Bwenkqan5PWCF9Y0NafD9jfW9IekNXU35mKDw1T1ZqPjUpX1B+dU1z
fFBGRXtgYgp6M1c2SkAhJUU4Vig+dDhKOCRBcSQlcDM1JGdtcGJjailGbmUzdCl9JSRaJl8hSF5m
fiFpWFBNXmA7I3dXQDdtOE0KejQ4aG9HPVB5c2dlX2hrSFZ9MWAtZzNpbyRwVFY5bWZte010ITQt
QH1vWmdiQiRGJGpwVmxlQ2VWXyUocyNxOSQtCnpLRVlzS28hZHIyJD9lfW8qWlhnTVQ7TklFSFBN
bG1tb0U+YyNKVytKV35FZzlgQC1uVWtseSUxcFRNUHNTJThWKQp6PmV0VHZPO1lPU1BXYSUteTcr
JS1UbF5uRF84KWYzeVVWKmlnKHZRfkJtc3ZMY3A4UkpCT0BJaVVaYDJ+MzgzSHEKeiUhQkBxb1l0
UWdzcll9YXc/OXd0Jmw5fEg/WXw5SWYwb2FtPEAwQ3h7UCN4dnBTfDtFQEJHPDJ7fno+RHduIyR0
ClkrNUwwaGAra0szN0t8fURZaGd0Qyt4SXtJRks1JUVHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMv
Zm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVy
aW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2JlMGRmZWU4NDAzMWU0ZWM4N2E1N2I1MmIy
NGU0MTU4MTUwNTViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxOSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJv
ZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0
ICgwLDApIHNpemUgNzg0eDM2CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDc4M3gzNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI0MzogIlRlc3Qg
Zm9yIGZvbnQtZmVhdHVyZS1zZXR0aW5ncyBwcm9wZXJ0eS4gIgorICAgICAgICAgIHRleHQgcnVu
IGF0ICgyNDMsMCkgd2lkdGggNTQwOiAiVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGZvbGxvd2luZyB0
aHJlZSB3b3JkcyBzaG91bGQgYmUgZGlzcGxheWVkIGxpa2UgXCJXZWJLaXRcIiwgd2hpbGUiCisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDI2NzogIm90aGVycyBzaG91bGQgYmUg
ZGlzcGxheWVkIGFzIGJsYWNrIGJveGVzLiIKKyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgw
LDUyKSBzaXplIDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAzMXgxNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxOiAiV2ViS2l0Igor
ICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsNjkpIHNpemUgNzg0eDE3CisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDk2eDE2CisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggOTY6ICJXZWJLaXQiCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAo
MCw4Nikgc2l6ZSA3ODR4MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgOTZ4MTYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA5NjogIldlYktpdCIK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAppbmRleCA1YTIxYzA3ZWViMGI0MjE4ZjEwMTk0NzRhNGE4NzcyMzdhNGYzOWQ5Li40ZGVj
ODBmN2ZjNGZkZmMzYzUyZjhjZTExNmUzOWJkNTcwMjk3YzZiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zMTcyLDgg
KzMxNzIsNiBAQCBCVUdDUjk3NzE2IDogZmFzdC9jbGlwL292ZXJmbG93LWJvcmRlci1yYWRpdXMt
Y29tYmluYXRpb25zLmh0bWwgPSBJTUFHRQogLy8gQ2F1c2VkIGJ5IHI5MjYxOAogQlVHV0s2NTg3
NCA6IGZhc3QvanMvcHJldmVudEV4dGVuc2lvbnMuaHRtbCA9IFRFWFQKIAotQlVHV0s2Mzc5NiBN
QUMgOiBjc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCA9IE1JU1NJTkcg
RkFJTAotCiBCVUdXSzY2NDE3IFdJTiA6IGZhc3QvdGV4dC9taWR3b3JkLWJyZWFrLWJlZm9yZS1z
dXJyb2dhdGUtcGFpci0yLmh0bWwgPSBJTUFHRStURVhUCiBCVUdXSzY2NDE3IE1BQyA6IGZhc3Qv
dGV4dC9taWR3b3JkLWJyZWFrLWJlZm9yZS1zdXJyb2dhdGUtcGFpci0yLmh0bWwgPSBJTUFHRQog
QlVHV0s2NjQxNyBMSU5VWCA6IGZhc3QvdGV4dC9taWR3b3JkLWJyZWFrLWJlZm9yZS1zdXJyb2dh
dGUtcGFpci0yLmh0bWwgPSBJTUFHRStURVhUIFRJTUVPVVQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130756</attachid>
            <date>2012-03-07 20:24:24 -0800</date>
            <delta_ts>2012-04-17 11:34:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69826-20120308132422.patch</filename>
            <type>text/plain</type>
            <size>84452</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJjMThkOTRmZWViYTMy
YzRlOTFhOTdkNDg2MmNhMmI0NjBiM2IyMi4uMzNkZGViYmUwY2I0OTljMTgyM2ExMmYwOTAwZDZk
ZWFkZjVhYThlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wMy0wNyAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVt
XSBJbXBsZW1lbnQgZm9udCBzaGFwaW5nIHdpdGggZm9udC1mZWF0dXJlLXNldHRpbmdzIG9uIE1h
YworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MjYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgSGFy
ZkJ1enotbmcgdGV4dCBzaGFwZXIuCisgICAgICAgIENocm9taXVtIG1hYyBwb3J0IHVzZXMgaXQg
YXMgc2Vjb25kYXJ5IHRleHQgc2hhcGVyIHRvIHN1cHBvcnQgT3BlblR5cGUgZmVhdHVyZXMuCisg
ICAgICAgIEhhcmZCdXp6LW5nIGlzIG9ubHkgdXNlZCB3aGVuIC13ZWJraXQtZm9udC1mZWF0dXJl
LXNldHRpbmdzIGlzIHNwZWNpZmllZCBhbmQKKyAgICAgICAgY29ycmVzcG9uZGluZyBmb250IGlz
IG5vdCBhbiBBQVQgZm9udC4KKworICAgICAgICBNb3ZlZCBzb21lIG1ldGhvZHMgaW4gRm9udCBj
bGFzcyBmb3IgY29tcGxleCB0ZXh0IGhhbmRsaW5nIGludG8gYSBzZXBhcmF0ZSBmaWxlCisgICAg
ICAgIHNvIHRoYXQgd2UgY2FuIHNoYXJlIHRoZSBjb2RlIGJldHdlZW4gbWFjIGFuZCBjaHJvbWl1
bSBtYWMgcG9ydHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBjc3MzL2ZvbnQtZmVhdHVyZS1z
ZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCBzaG91bGQgcGFzcyBvbiBDaHJvbWl1bSBtYWMgcG9ydC4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGRlZCBoYXJmYnV6ei1uZyBk
ZXBlbmRlbmNpZXMuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCBoYXJmYnV6ei1uZyBm
aWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVk
IEZvbnRDb21wbGV4VGV4dENvbW1vbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Lmg6CisgICAgICAgIChGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhKTogQWRkZWQgbV9oYXJm
YnV6ekZhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENvbXBs
ZXhUZXh0Q2hyb21pdW1NYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlZmVySGFyZkJ1enopOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhSW5pdCk6IENvcHkgbV9oYXJmYnV6ekZhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNBQVRGb250KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UpOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmFjZUNhY2hlRW50cnk6OkZhY2VD
YWNoZUVudHJ5KToKKyAgICAgICAgKEZhY2VDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OmhhcmZidXp6RmFjZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6SGFy
ZkJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6ekZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0VG9IYXJmQnV6elBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhI
b3Jpem9udGFsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoRXh0ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlbGVhc2VUYWJsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpD
b3JlVGV4dEdldFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRl
RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1
enpQb3NpdGlvblRvRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRp
b25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldHVwSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoSGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OnRvdGFsV2lkdGgpOgorICAgICAgICAoSGFyZkJ1enpSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUNoYXJh
Y3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpu
dW1HbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46
OnJ0bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dENv
bW1vbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHRDb21tb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0Q29tbW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dENvbW1vbik6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0Q29tbW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dCk6IENhbGwgc2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0Q29tbW9uKCkuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOiBDYWxsIGRyYXdDb21wbGV4VGV4dENv
bW1vbigpLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KTogQ2FsbCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOiBDYWxsIG9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoKS4KKwogMjAxMi0wMy0wNyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gSW5kZXhlZERCOiBWOExvY2FsQ29u
dGV4dCBjcmVhdGlvbiBpbiBJREJLZXkgZXh0cmFjdGlvbi9pbmplY3Rpb24gaXMgc2xvdwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCAzNzUxOTQ1MmI0NGY1OTkzZWY1
NWI4ZThjOTUwMThmMWMxYjVkMzhkLi4wZjZjZWQwNDg0NDg1MjU4OWE0ZDVjNmI1MGMzNzI2NWM2
ZGZmZmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMjA3LDYg
KzIwNyw4IEBACiAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL21hYycsCiAgICAgICAg
ICAgJy4uL3BsYXRmb3JtL21hYycsCiAgICAgICAgICAgJy4uL3BsYXRmb3JtL3RleHQvbWFjJywK
KyAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enonLAorICAgICAgICAgICcu
Li9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZycsCiAgICAgICAgIF0sCiAgICAgICB9XSwK
ICAgICAgIFsnT1M9PSJ3aW4iJywgewpAQCAtMTUwOSw2ICsxNTExLDcgQEAKICAgICAgICAgICBd
LAogICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAnd2Via2l0X3N5c3Rl
bV9pbnRlcmZhY2UnLAorICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwOmhhcmZidXp6LW5nJywKICAgICAgICAgICBdLAog
ICAgICAgICAgICdhY3Rpb25zJzogWwogICAgICAgICAgICAgewpAQCAtMTU4OSw2ICsxNTkyLDEz
IEBACiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25l
XFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZVxcLmgkJ10sCiAKKyAgICAgICAgICAgICMgTWFjIHVzZXMgSGFyZkJ1enotbmcuCisg
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4
VGV4dE1hY1xcLmNwcCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZVxcLihjcHB8aCkkJ10sCisgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNl
Q29yZVRleHRcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBl
clxcLihjcHB8aCkkJ10sCisKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcvY2hyb21lL2p1bmtc
XC50eHQkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJtYWMiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggNmNjODkyM2E4NDI5ZDQwYTFiZDVkMGYwNTI4ZWUzMDUwZmZiNTg4YS4uYTVj
ZWRkNWIxMTViMGZlN2FiNWNiZjhiOTc1MjQ1NTcwN2YyYjk4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzMyNyw2ICszMzI3LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q29tcGxleFRleHRDaHJvbWl1bU1hYy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBs
YXRmb3JtRGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmgnLApAQCAtMzYzNCw2ICsz
NjM1LDExIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTa2lhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2hhcGVyQmFzZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hh
cGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbScs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuaCcsCkBAIC0zNjQzLDYgKzM2NDksNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q29tcGxleFRleHRDb21tb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
MzhkMWQyM2I1N2Q0Y2ZiMjM0MGNmNjYwOWM1ZTI3MTQyNDUxZGVhLi5hYjBmYjQyNTA0YjM0MjJl
YzVjYWUyZjBlMjI1NDZjYTMxNmY5NzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzc3LDYgKzEzNzcsNyBAQAogCQk0QUQw
MTAwOTEyN0U2NDJBMDAxNTAzNUYgLyogSFRNTE91dHB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDAxMDA2MTI3RTY0MkEwMDE1MDM1
RiAvKiBIVE1MT3V0cHV0RWxlbWVudC5oICovOyB9OwogCQk0QUQwMTczQzEyN0U4Mjg2MDAxNTAz
NUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QUQwMTczQTEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0
cHV0RWxlbWVudC5jcHAgKi87IH07CiAJCTRBRDAxNzNEMTI3RTgyODYwMDE1MDM1RiAvKiBKU0hU
TUxPdXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QUQwMTczQjEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5o
ICovOyB9OworCQk0QUU3RDlCMDE1MDg1RjYwMDA4OUFBNTAgLyogRm9udENvbXBsZXhUZXh0Q29t
bW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRB
RTdEOUFGMTUwODVGNjAwMDg5QUE1MCAvKiBGb250Q29tcGxleFRleHRDb21tb24uY3BwICovOyB9
OwogCQk0QUYxQUQzRTEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRjFBRDND
MTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwICovOyB9OwogCQk0
QUYxQUQzRjEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUYxQUQzRDEzRkQyM0E0
MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8q
IFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IH07CkBAIC04
MjkxLDYgKzgyOTIsNyBAQAogCQk0QUQwMTAwNzEyN0U2NDJBMDAxNTAzNUYgLyogSFRNTE91dHB1
dEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxPdXRwdXRFbGVtZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEFEMDE3M0ExMjdFODI4NjAwMTUwMzVG
IC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNIVE1MT3V0cHV0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRBRDAxNzNCMTI3RTgyODYwMDE1MDM1RiAvKiBKU0hUTUxPdXRwdXRFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE91dHB1dEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEFFN0Q5QUYxNTA4NUY2MDAwODlBQTUwIC8q
IEZvbnRDb21wbGV4VGV4dENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250Q29tcGxleFRleHRDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0QUYxQUQzQzEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50RGlzcGF0Y2hN
ZWRpYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBRjFBRDNEMTNGRDIz
QTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXZlbnREaXNwYXRjaE1lZGlhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDU3LDYgKzE5MDU5LDcgQEAKIAkJCQlCMjc1MzU0QzBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovLAogCQkJCUIyNzUzNTREMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi8sCiAJCQkJQjJBRkZDNzQwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLywKKwkJCQk0QUU3RDlBRjE1MDg1RjYwMDA4OUFBNTAg
LyogRm9udENvbXBsZXhUZXh0Q29tbW9uLmNwcCAqLywKIAkJCQkzN0MyMzYwQTEwOTdFREVEMDBF
RjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCAqLywKIAkJCQlCMkFGRkM3NTBEMDBBNUMx
MDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8sCiAJCQkJQjJBRkZDNzYw
RDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLywKQEAgLTI3NTE2
LDYgKzI3NTE5LDcgQEAKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5j
RmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTBDRUJGMDE1MDczQkJFMDAyQkIx
NDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QUU3RDlCMDE1
MDg1RjYwMDA4OUFBNTAgLyogRm9udENvbXBsZXhUZXh0Q29tbW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGQxNWE3N2YzY2Q3
MzNmYWM4OWI4MDkxMWYxYzRiNDdhYTRkOTA3MmQuLjRjZjQzOWE0YWZkOGUxYWQyNzBmOWJlNTgy
ZjU3ZjQ3OGRhNGQyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
QEAgLTE2NSw2ICsxNjUsMTAgQEAgcHVibGljOgogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCA9IEF1dG9WYXJp
YW50KSBjb25zdDsKICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKSkKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIEZvbnREYXRh
VmFyaWFudCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dENvbW1vbihjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdDb21wbGV4VGV4dENvbW1vbihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OworICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dENvbW1vbihj
b25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzLCBHbHlwaE92ZXJmbG93KikgY29uc3Q7CisgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHRDb21tb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0OwogI2VuZGlmCiAgICAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5
cGhQYWdlKj4gZ2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJv
ciwgRm9udERhdGFWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OwogICAgIGJvb2wgcHJpbWFy
eUZvbnRIYXNHbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3MDVj
NTg4OTcxNDVkZjhiMmMyZmE0NDI3NzAxMWY4OTBlMzZlN2ZjLi41MDRiMzEzYTQxMzRmOTg3ZTU0
OWUzNTk3OGQ1MzEyODZhNzgxYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC03Miw2ICs3Miw3IEBAIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRSZWY7CiAKICNpZiBQTEFURk9STShDSFJPTUlV
TSkgJiYgT1MoREFSV0lOKQogI2luY2x1ZGUgIkNyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgiICAK
KyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpA
QCAtMjM2LDYgKzIzNywxMCBAQCBwdWJsaWM6CiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2Nh
bGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQorICAgIEhhcmZCdXp6RmFjZSogaGFyZmJ1
enpGYWNlKCk7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKICNp
ZiBQTEFURk9STShXSU4pICYmICFVU0UoQ0FJUk8pCkBAIC0zMzIsNiArMzM3LDcgQEAgcHJpdmF0
ZToKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAgICAgUmVmUHRyPE1l
bW9yeUFjdGl2YXRlZEZvbnQ+IG1faW5NZW1vcnlGb250OworICAgIFJlZlB0cjxIYXJmQnV6ekZh
Y2U+IG1faGFyZmJ1enpGYWNlOwogI2VuZGlmCiAKICAgICBib29sIG1faXNDb2xvckJpdG1hcEZv
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q29tcGxleFRleHRDaHJvbWl1bU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q29tcGxleFRleHRDaHJvbWl1bU1hYy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGY2NTE5OTUxYzI5OTg0ZGUwMmY3YjA2MTVjZjM0ZDg3MDExZWY2OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
b21wbGV4VGV4dENocm9taXVtTWFjLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkZvbnRDb21w
bGV4VGV4dENvbW1vbi5oIgorI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKKyNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkhhcmZCdXp6U2hhcGVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBib29sIHByZWZlckhhcmZCdXp6KGNvbnN0IEZvbnQqIGZvbnQpCit7CisgICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IGZvbnQtPmZvbnREZXNjcmlwdGlv
bigpOworICAgIHJldHVybiBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBkZXNjcmlw
dGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6ZSgpID4gMDsKK30KKworRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBp
ZiAocHJlZmVySGFyZkJ1enoodGhpcykpIHsKKyAgICAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVy
KHRoaXMsIHJ1bik7CisgICAgICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzaGFwZXIuc2VsZWN0aW9uUmVjdChwb2ludCwgaCwgZnJvbSwgdG8pOworICAgIH0KKyAg
ICByZXR1cm4gc2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0Q29tbW9uKHJ1biwgcG9pbnQsIGgs
IGZyb20sIHRvKTsKK30KKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlz
KSkgeworICAgICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAgICAgSGFyZkJ1enpT
aGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CisgICAgICAgIGlmIChzaGFwZXIuc2hhcGUoJmdseXBo
QnVmZmVyKSkgeworICAgICAgICAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHBvaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBkcmF3Q29tcGxleFRleHRDb21tb24oY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8p
OworfQorCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Cit7CisgICAgaWYgKHByZWZlckhhcmZC
dXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwor
ICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hhcGVyLnRv
dGFsV2lkdGgoKTsKKyAgICB9CisgICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dENv
bW1vbihydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworfQorCitpbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgaWYgKHByZWZlckhh
cmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4p
OworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hhcGVy
Lm9mZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dENvbW1vbihydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmlu
ZGV4IDdiMTM2MDg4MzQzYWUwODRlMmU0YWU0MDdiYmUwODlhZDg2N2M0NzQuLjg4ZDNmNTIwMWJh
NTYxOTNiMTViY2MzOTNiYTVkZGNhOTk2Mjk1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KQEAgLTg0LDYgKzg0LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURh
dGFJbml0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiAKICNpZiBQTEFURk9STShDSFJPTUlV
TSkgJiYgT1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsK
KyAgICBtX2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKIH0KIApAQCAt
MTAwLDYgKzEwMSw3IEBAIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6
OnBsYXRmb3JtRGF0YUFzc2lnbihjb25zdCBGb250UGxhdGZvcm1ECiAgICAgbV9DVEZvbnQgPSBm
Lm1fQ1RGb250OwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAgICAgbV9p
bk1lbW9yeUZvbnQgPSBmLm1faW5NZW1vcnlGb250OworICAgIG1faGFyZmJ1enpGYWNlID0gZi5t
X2hhcmZidXp6RmFjZTsKICNlbmRpZgogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTI3Niw2ICsy
NzgsMzcgQEAgQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fQ1RGb250LmdldCgpOwogfQogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikKK3N0YXRpYyBib29sIGlzQUFURm9udChDVEZvbnRSZWYgY3RGb250KQoreworICAg
IENGRGF0YVJlZiB0YWJsZSA9IENURm9udENvcHlUYWJsZShjdEZvbnQsIGtDVEZvbnRUYWJsZU1v
cnQsIGtDVEZvbnRPcHRpb25zRGVmYXVsdCk7CisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIENG
UmVsZWFzZSh0YWJsZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB0YWJsZSA9
IENURm9udENvcHlUYWJsZShjdEZvbnQsIGtDVEZvbnRUYWJsZU1vcngsIGtDVEZvbnRPcHRpb25z
RGVmYXVsdCk7CisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIENGUmVsZWFzZSh0YWJsZSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hhcmZC
dXp6RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkKK3sKKyAgICBDVEZvbnRS
ZWYgZm9udCA9IGN0Rm9udCgpOworICAgIC8vIEhhcmZCdXp6IGNhbid0IGhhbmRsZSBBQVQgZm9u
dAorICAgIGlmIChpc0FBVEZvbnQoZm9udCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KCFtX2hhcmZidXp6RmFjZSkgeworICAgICAgICB1aW50NjRfdCB1bmlxdWVJRCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihmb250KTsKKyAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJm
QnV6ekZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5p
cXVlSUQpOworICAgIH0KKyAgICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7Cit9CisjZW5k
aWYKKwogI2lmbmRlZiBOREVCVUcKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlv
bigpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZWRhMmQ3
NWEwM2ZkNWE0MTQ4M2U4ZDAwYTdlZjMzZWUzNjdmNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNw
cApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6
RmFjZS5oIgorCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgPGhiLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBU
aG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRoZSBjYWNoZSBt
ZWNoYW5pc20gZm9yCisvLyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRp
dGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CisvLyB0byByZWR1Y2UgdGhlIG1lbW9y
eSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRo
CisvLyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNlKS4KK3N0cnVj
dCBGYWNlQ2FjaGVFbnRyeSB7CisgICAgRmFjZUNhY2hlRW50cnkoaGJfZmFjZV90KiBmYWNlID0g
MCkKKyAgICAgICAgOiBtX2ZhY2UoZmFjZSkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCisgICAg
eworICAgIH0KKyAgICBoYl9mYWNlX3QqIG1fZmFjZTsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OworfTsKK3R5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgRmFjZUNhY2hlRW50cnksIFdURjo6SW50
SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0
X3Q+ID4gSGFyZkJ1enpGYWNlQ2FjaGU7CisKK3N0YXRpYyBIYXJmQnV6ekZhY2VDYWNoZSogaGFy
ZmJ1enpGYWNlQ2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFyZkJ1enpGYWNl
Q2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsKKyAgICByZXR1cm4gJnNfaGFyZmJ1enpG
YWNlQ2FjaGU7Cit9CisKK0hhcmZCdXp6RmFjZTo6SGFyZkJ1enpGYWNlKEZvbnRQbGF0Zm9ybURh
dGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQpCisgICAgOiBtX3BsYXRmb3JtRGF0
YShwbGF0Zm9ybURhdGEpCisgICAgLCBtX3VuaXF1ZUlEKHVuaXF1ZUlEKQoreworICAgIEhhcmZC
dXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5k
KG1fdW5pcXVlSUQpOworICAgIGlmIChyZXN1bHQgPT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5k
KCkpIHsKKyAgICAgICAgbV9mYWNlID0gY3JlYXRlRmFjZSgpOworICAgICAgICBBU1NFUlQobV9m
YWNlKTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VD
YWNoZUVudHJ5KG1fZmFjZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgICsrKHJlc3VsdC0+c2Vj
b25kLm1fcmVmQ291bnQpOworICAgICAgICBBU1NFUlQocmVzdWx0LT5zZWNvbmQubV9mYWNlKTsK
KyAgICAgICAgbV9mYWNlID0gcmVzdWx0LT5zZWNvbmQubV9mYWNlOworICAgIH0KK30KKworSGFy
ZkJ1enpGYWNlOjp+SGFyZkJ1enpGYWNlKCkKK3sKKyAgICBIYXJmQnV6ekZhY2VDYWNoZTo6aXRl
cmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKKyAg
ICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKKyAgICBBU1NF
UlQocmVzdWx0LT5zZWNvbmQubV9mYWNlKTsKKyAgICBBU1NFUlQocmVzdWx0LT5zZWNvbmQubV9y
ZWZDb3VudCA+IDApOworICAgIC0tKHJlc3VsdC0+c2Vjb25kLm1fcmVmQ291bnQpOworICAgIGlm
ICghcmVzdWx0LT5zZWNvbmQubV9yZWZDb3VudCkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3ko
cmVzdWx0LT5zZWNvbmQubV9mYWNlKTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVt
b3ZlKG1fdW5pcXVlSUQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMyNmIxYjFmMjBjM2ZmYTc5Yjg4ZmI2OGQ5
OWNhZDc5MmY0ODRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBfaGJfZmFjZV90OwordHlwZWRlZiBfaGJfZmFjZV90IGhi
X2ZhY2VfdDsKK3N0cnVjdCBfaGJfZm9udF90OwordHlwZWRlZiBfaGJfZm9udF90IGhiX2ZvbnRf
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworCitj
bGFzcyBIYXJmQnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmQnV6ekZhY2U+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+IGNyZWF0ZShGb250UGxh
dGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZvcm1EYXRhLCB1bmlxdWVJ
RCkpOworICAgIH0KKyAgICB+SGFyZkJ1enpGYWNlKCk7CisKKyAgICBoYl9mb250X3QqIGNyZWF0
ZUZvbnQoKTsKKworcHJpdmF0ZToKKyAgICBIYXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSos
IHVpbnQ2NF90KTsKKworICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOworCisgICAgRm9udFBs
YXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7CisgICAgdWludDY0X3QgbV91bmlxdWVJRDsKKyAg
ICBoYl9mYWNlX3QqIG1fZmFjZTsKK307CisKK30KKworI2VuZGlmIC8vIEhhcmZCdXp6RmFjZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZj
ZWI0NTE3OTZjNzcyY2Q3MTdjMTlkN2FkNDNkYWE5YzM4MDc1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFj
ZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkNvcmVUZXh0L0NvcmVUZXh0LmgiCisj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgImhiLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZmxvYXRUb0hhcmZCdXp6UG9z
aXRpb24oQ0dGbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRp
b25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBo
KGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29k
ZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlw
aCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgVW5pQ2hh
ciBjaGFyYWN0ZXJzWzRdOworICAgIENHR2x5cGggY2dHbHlwaHNbNF07CisgICAgc2l6ZV90IGxl
bmd0aCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY2hhcmFjdGVycywgbGVuZ3RoLCB1bmlj
b2RlKTsKKyAgICBpZiAoIUNURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoY3RGb250LCBjaGFy
YWN0ZXJzLCBjZ0dseXBocywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpn
bHlwaCA9IGNnR2x5cGhzWzBdOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfcG9z
aXRpb25fdCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAg
IENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihm
b250RGF0YSktPmN0Rm9udCgpOworICAgIENHR2x5cGggY2dHbHlwaCA9IGdseXBoOworICAgIENH
RmxvYXQgYWR2YW5jZSA9IENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGN0Rm9udCwga0NURm9u
dEhvcml6b250YWxPcmllbnRhdGlvbiwgJmNnR2x5cGgsIDAsIDEpOworICAgIHJldHVybiBmbG9h
dFRvSGFyZkJ1enpQb3NpdGlvbihhZHZhbmNlKTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBnZXRH
bHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25fdCogeSwg
dm9pZCogdXNlckRhdGEpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9ib29s
X3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJf
Y29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNl
ckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgQ0dSZWN0IGNnUmVjdDsKKyAg
ICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0Qm91bmRpbmdSZWN0
c0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnREZWZhdWx0T3JpZW50YXRpb24sICZjZ0dseXBoLCAm
Y2dSZWN0LCAxKSA9PSBDR1JlY3ROdWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXh0
ZW50cy0+eF9iZWFyaW5nID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0Lm9yaWdpbi54
KTsKKyAgICBleHRlbnRzLT55X2JlYXJpbmcgPSAtZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0Lm9yaWdpbi55KTsKKyAgICBleHRlbnRzLT53aWR0aCA9IGZsb2F0VG9IYXJmQnV6elBvc2l0
aW9uKGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBleHRlbnRzLT5oZWlnaHQgPSBmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS5oZWlnaHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCkK
K3sKKyAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
ID0gMDsKKworICAgIGlmICghaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcykgeworICAgICAgICBo
YXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVhdGUoKTsKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
LCBnZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2
YW5jZV9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbEFk
dmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9m
dW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwg
MCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBo
Yl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MpOwor
ICAgIH0KKyAgICByZXR1cm4gaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jczsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZVRhYmxlRGF0YSh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBDRkRhdGFSZWYg
Y2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KHVzZXJEYXRhKTsKKyAgICBDRlJl
bGVhc2UoY2ZEYXRhKTsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dFRhYmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPih1c2VyRGF0YSk7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHBsYXRm
b3JtRGF0YS0+Y3RGb250KCk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENURm9udENvcHlUYWJs
ZShjdEZvbnQsIHRhZywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKTsKKyAgICBpZiAoIWNm
RGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpKTsKKyAgICBj
b25zdCBzaXplX3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSk7CisgICAgaWYgKCFk
YXRhIHx8ICFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBoYl9ibG9iX2Ny
ZWF0ZShkYXRhLCBsZW5ndGgsIEhCX01FTU9SWV9NT0RFX1JFQURPTkxZLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjb25zdF9jYXN0PF9fQ0ZEYXRhKj4oY2ZEYXRhKSksIHJlbGVhc2VUYWJsZURh
dGEpOworfQorCitoYl9mYWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAg
aGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNvcmVU
ZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAg
cmV0dXJuIGZhY2U7Cit9CisKK2hiX2ZvbnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkK
K3sKKyAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOworICAgIGhi
X2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKSwgbV9w
bGF0Zm9ybURhdGEsIDApOworICAgIGNvbnN0IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+
bV9zaXplOworICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CisgICAgY29u
c3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICogc3RhdGljX2Nhc3Q8aW50PihzaXplKTsKKyAgICBo
Yl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOworICAgIGhiX2ZvbnRfbWFrZV9p
bW11dGFibGUoZm9udCk7CisgICAgcmV0dXJuIGZvbnQ7Cit9CisKK0dseXBoQnVmZmVyQWR2YW5j
ZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQpCit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZWVkODk3YmE2YTExYTcwZjA2NDcyOWJkODkyM2M1ZDc5MjU3NzM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1
bi5oIgorI2luY2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBoYXJmYnV6elBv
c2l0aW9uVG9GbG9hdChoYl9wb3NpdGlvbl90IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOworfQorCitIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OkhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCisgICAgOiBtX251bUNo
YXJhY3RlcnMobnVtQ2hhcmFjdGVycykKKyAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKK3sK
KyAgICBtX251bUdseXBocyA9IGhiX2J1ZmZlcl9nZXRfbGVuZ3RoKGhhcmZidXp6QnVmZmVyKTsK
KyAgICBtX2dseXBocy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fYWR2YW5jZXMucmVzaXpl
KG1fbnVtR2x5cGhzKTsKKyAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBt
X2dseXBoVG9DaGFyYWN0ZXJJbmRleC5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fbG9nQ2x1
c3RlcnMucmVzaXplKG1fbnVtQ2hhcmFjdGVycyk7CisKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGlu
Zm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpCisgICAgICAgIG1fZ2x5
cGhUb0NoYXJhY3RlckluZGV4W2ldID0gaW5mb3NbaV0uY2x1c3RlcjsKKworICAgIC8vIEZpbGwg
bG9naWNhbCBjbHVzdGVycworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5k
ZXggPCBtX251bUdseXBocykgeworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBpbmRleCAr
IDE7CisgICAgICAgIHdoaWxlIChuZXh0SW5kZXggPCBtX251bUdseXBocyAmJiBpbmZvc1tpbmRl
eF0uY2x1c3RlciA9PSBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIpCisgICAgICAgICAgICArK25l
eHRJbmRleDsKKyAgICAgICAgaWYgKHJ0bCgpKSB7CisgICAgICAgICAgICBpbnQgbmV4dENsdXN0
ZXIgPSBuZXh0SW5kZXggPCBtX251bUdseXBocyA/IGluZm9zW25leHRJbmRleF0uY2x1c3RlciA6
IC0xOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqID4g
bmV4dENsdXN0ZXI7IC0taikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5k
ZXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0Q2x1c3RlciA9
IG5leHRJbmRleCA8IG1fbnVtR2x5cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogbV9u
dW1DaGFyYWN0ZXJzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaW5mb3NbaW5kZXhd
LmNsdXN0ZXI7IGogPCBuZXh0Q2x1c3RlcjsgKytqKQorICAgICAgICAgICAgICAgIG1fbG9nQ2x1
c3RlcnNbal0gPSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IG5leHRJbmRleDsK
KyAgICB9Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFu
ZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgYWR2YW5jZSkKK3sKKyAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaElkOwor
ICAgIG1fb2Zmc2V0c1tpbmRleF0uc2V0KHgsIHkpOworICAgIG1fYWR2YW5jZXNbaW5kZXhdID0g
YWR2YW5jZTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVy
SW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0YXJnZXRYKSA8PSBtX3dpZHRoKTsKKyAgICBpbnQgY3VycmVudFggPSAwOwor
ICAgIGZsb2F0IHByZXZBZHZhbmNlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1HbHlwaHM7ICsraSkgeworICAgICAgICBmbG9hdCBjdXJyZW50QWR2YW5jZSA9IG1fYWR2
YW5jZXNbaV0gLyAyLjA7CisgICAgICAgIGludCBuZXh0WCA9IGN1cnJlbnRYICsgcm91bmRmKHBy
ZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2UpOworICAgICAgICBpZiAoY3VycmVudFggPD0gdGFy
Z2V0WCAmJiB0YXJnZXRYIDw9IG5leHRYKQorICAgICAgICAgICAgcmV0dXJuIG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4W2ldICsgKHJ0bCgpID8gMSA6IDApOworICAgICAgICBjdXJyZW50WCA9IG5l
eHRYOworICAgICAgICBwcmV2QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlOworICAgIH0KKworICAg
IHJldHVybiBydGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7Cit9CisKK2ludCBIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit7
CisgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CisgICAgdW5zaWduZWQgZ2x5
cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKKyAgICBBU1NFUlQoZ2x5cGhJbmRleCA8
IG1fbnVtR2x5cGhzKTsKKyAgICBmbG9hdCBwb3NpdGlvbiA9IG1fb2Zmc2V0c1tnbHlwaEluZGV4
XS54KCk7CisgICAgaWYgKHJ0bCgpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2ds
eXBoSW5kZXhdOworICAgIHJldHVybiByb3VuZGYocG9zaXRpb24pOworfQorCitIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
KQorICAgIDogSGFyZkJ1enpTaGFwZXJCYXNlKGZvbnQsIHJ1bikKKyAgICAsIG1fc3RhcnRJbmRl
eE9mQ3VycmVudFJ1bigwKQorICAgICwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuKDApCisg
ICAgLCBtX2hhcmZidXp6QnVmZmVyKDApCit7CisgICAgc2V0Tm9ybWFsaXplZEJ1ZmZlcigpOwor
ICAgIHNldEZvbnRGZWF0dXJlcygpOworfQorCitIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hh
cGVyKCkKK3sKKyAgICBpZiAobV9oYXJmYnV6ekJ1ZmZlcikKKyAgICAgICAgaGJfYnVmZmVyX2Rl
c3Ryb3kobV9oYXJmYnV6ekJ1ZmZlcik7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZv
bnRGZWF0dXJlcygpCit7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zv
bnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlmICghc2V0dGlu
Z3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGlu
Z3MtPnNpemUoKTsKKyAgICBtX2ZlYXR1cmVzLnJlc2l6ZShudW1GZWF0dXJlcyk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAg
IG1fZmVhdHVyZXNbaV0udGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1sz
XSk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUo
KTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5zdGFydCA9IDA7CisgICAgICAgIG1fZmVhdHVyZXNb
aV0uZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsKKyAgICB9Cit9CisKK2Jvb2wgSGFy
ZkJ1enpTaGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBtX3Rv
dGFsV2lkdGggPSAwOworICAgIHdoaWxlIChzZXR1cEhhcmZCdXp6UnVuKCkpIHsKKyAgICAgICAg
aWYgKCFzaGFwZUhhcmZCdXp6UnVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIpOworICAgIH0K
KworICAgIGlmICghbV9oYXJmYnV6elJ1bnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJm
QnV6elJ1bigpCit7CisgICAgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuICs9IG1fbnVtQ2hhcmFj
dGVyc09mQ3VycmVudFJ1bjsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdGV4dCB0byB0
YWtlIHRoZSBsYXJnZXN0IHJhbmdlIHRoYXQgc3RheXMgd2l0aGluCisgICAgLy8gYSBzaW5nbGUg
Zm9udC4KKyAgICBpbnQgZW5kT2ZSdW5JbmRleCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCAt
IG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IgaXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZD
dXJyZW50UnVuLCAwLCBlbmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKKyAgICBVQ2hhcjMy
IGNoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICBpZiAoIWl0
ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNj
cmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJF
KGVycm9yQ29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudFNjcmlw
dCA9PSBVU0NSSVBUX0lOSEVSSVRFRCkKKyAgICAgICAgY3VycmVudFNjcmlwdCA9IFVTQ1JJUFRf
Q09NTU9OOworICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0
b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNs
dXN0ZXJMZW5ndGgpKSB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERh
dGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250
RGF0YTsKKyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgaWYgKFVfRkFJTFVS
RShlcnJvckNvZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY3Vy
cmVudFNjcmlwdCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklU
RUQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAg
ICAgIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpOworCisgICAgaWYgKCFtX2hhcmZidXp6QnVmZmVyKSB7Cisg
ICAgICAgIG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7CisgICAgICAgIGhi
X2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3VfZ2V0X3Vu
aWNvZGVfZnVuY3MoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9yZXNldChtX2hh
cmZidXp6QnVmZmVyKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6QnVmZmVy
LCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7CisKKyAgICAvLyBXZWJL
aXQgYWx3YXlzIHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3VsYXRpb24u
CisgICAgLy8gV2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4cGxpY2l0
bHkgc2V0IHRvIFJUTCBzbyB0aGF0CisgICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRoIGNhbGN1
bGF0aW9uLgorICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJl
Y3Rpb24obV9oYXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7CisKKyAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fw
cy4KKyAgICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0
aGUgc2FtZSBjYXNlLCBiZWNhdXNlIGEKKyAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFs
bC1jYXBzIG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50CisgICAgLy8gRm9udERhdGEs
IHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KKyAg
ICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZm
ZXJbbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKKyAgICAgICAgU3RyaW5nIHVwcGVyVGV4
dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4sIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgICAgIHVwcGVyVGV4dC5t
YWtlVXBwZXIoKTsKKyAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250
RGF0YTsKKyAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVyLCB1cHBl
clRleHQuY2hhcmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVt
Q2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9h
ZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bigpCit7CisgICAgRm9udFBsYXRmb3Jt
RGF0YSogcGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJm1fY3Vy
cmVudEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0g
cGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBoYl9mb250X3QqIGhhcmZidXp6Rm9udCA9IGZhY2UtPmNyZWF0ZUZv
bnQoKTsKKyAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQsIG1faGFyZmJ1enpCdWZmZXIsIG1fZmVh
dHVyZXMuc2l6ZSgpID4gMCA/IG1fZmVhdHVyZXMuZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXpl
KCkpOworICAgIGhiX2ZvbnRfZGVzdHJveShoYXJmYnV6ekZvbnQpOworICAgIG1faGFyZmJ1enpS
dW5zLmFwcGVuZChIYXJmQnV6elJ1bjo6Y3JlYXRlKG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1
biwgbV9ydW4uZGlyZWN0aW9uKCksIG1faGFyZmJ1enpCdWZmZXIpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6
elJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgaGJfZ2x5cGhfaW5mb190KiBn
bHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhtX2hhcmZidXp6QnVmZmVyLCAw
KTsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9n
ZXRfZ2x5cGhfcG9zaXRpb25zKG1faGFyZmJ1enpCdWZmZXIsIDApOworICAgIEhhcmZCdXp6UnVu
KiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLmdldCgpOworCisgICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgZmxvYXQgdG90YWxB
ZHZhbmNlID0gMDsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zs
b2F0KGdseXBoUG9zaXRpb25zWzBdLnhfb2Zmc2V0KTsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WSA9
IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1swXS55X29mZnNldCk7Cisg
ICAgLy8gSGFyZkJ1enogcmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVy
LiBXZSBuZWVkIG5vdCB0byBmbGlwIHRoZW0gZm9yIFJUTC4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0g
bnVtR2x5cGhzOworICAgICAgICB1aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBv
aW50OworICAgICAgICBmbG9hdCBvZmZzZXRYID0gbmV4dE9mZnNldFg7CisgICAgICAgIGZsb2F0
IG9mZnNldFkgPSBuZXh0T2Zmc2V0WTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZidXp6
UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7CisgICAgICAgIG5l
eHRPZmZzZXRYID0gcnVuRW5kID8gMCA6IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9z
aXRpb25zW2kgKyAxXS54X29mZnNldCk7CisgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8g
MCA6IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZz
ZXQpOworCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJ
bmRleE9mQ3VycmVudFJ1biArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBp
c0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5m
b3NbaSArIDFdLmNsdXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSBpc0NsdXN0ZXJFbmQg
PyBtX2xldHRlclNwYWNpbmcgOiAwOworCisgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNX
b3JkRW5kKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCkpCisgICAgICAgICAgICBzcGFjaW5nICs9IGRl
dGVybWluZVdvcmRCcmVha1NwYWNpbmcoKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9udERh
dGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRS
dW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCAwLCAwLCAwKTsKKyAgICAgICAgICAg
IGlmIChnbHlwaEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBo
LCBtX2N1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAsIDApKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSArPSBzcGFj
aW5nOworICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwg
dG90YWxBZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisgICAgICAgIGlmIChn
bHlwaEJ1ZmZlcikgeworICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWCA9IGFkdmFuY2Ug
KyBuZXh0T2Zmc2V0WCAtIG9mZnNldFg7CisgICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VZ
ID0gbmV4dE9mZnNldFkgLSBvZmZzZXRZOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChn
bHlwaCwgbV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbEFkdmFu
Y2UgKz0gYWR2YW5jZTsKKyAgICB9CisgICAgY3VycmVudFJ1bi0+c2V0V2lkdGgodG90YWxBZHZh
bmNlID4gMC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsKKyAgICBtX3RvdGFsV2lkdGggKz0gY3Vy
cmVudFJ1bi0+d2lkdGgoKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3Np
dGlvbihmbG9hdCB0YXJnZXRYKQoreworICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOworICAg
IGludCBjdXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICAgICAgaW50IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+
d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFgg
PD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBp
cyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGluZGV4ID0gbV9oYXJmYnV6elJ1bnNbaV0tPmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKHRh
cmdldFggLSBjdXJyZW50WCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0Zh
ciArIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFggPSBuZXh0WDsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2hhcmZidXp6UnVucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG5leHRYID0g
Y3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRl
eEZvclhQb3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgpOworICAgICAgICAgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNo
YXJhY3RlcnNTb0ZhciArPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAg
ICAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXI7Cit9CisKK0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0
aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGlu
dCB0bykKK3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CisgICAgaW50IGN1cnJlbnRY
ID0gMDsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwg
b3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGlu
dGVyZXN0LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hhcmZidXp6UnVucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFyZmJ1enpSdW5zW2ld
LT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAg
JiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBmcm9tWCA9IG1faGFyZmJ1enpS
dW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICh0b1gg
PT0gLTEgJiYgdG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICB0b1gg
PSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAg
IGlmIChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAg
Ly8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQu
CisgICAgaWYgKGZyb21YID09IC0xKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKHRvWCA9
PSAtMSkKKyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisg
ICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJvbVggPCB0
b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBvaW50Lnko
KSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkg
KyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZWZmNWQ3
MmNkYzU0Zjg4ODhkNmMyMGFjYTFkNmVkYjAzMzIzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6elNoYXBlcl9oCisjZGVmaW5lIEhhcmZC
dXp6U2hhcGVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyQmFzZS5oIgorI2luY2x1ZGUgIlRleHRS
dW4uaCIKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFz
cyBTaW1wbGVGb250RGF0YTsKKworY2xhc3MgSGFyZkJ1enpTaGFwZXIgOiBwdWJsaWMgSGFyZkJ1
enpTaGFwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250Kiwg
Y29uc3QgVGV4dFJ1biYpOworICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CisKKyAgICBi
b29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIGZsb2F0IHRvdGFsV2lkdGgoKSB7IHJl
dHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFy
Z2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2YXRlOgorICAgIGNsYXNzIEhhcmZC
dXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhcmZCdXp6
UnVuPiBjcmVhdGUodW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIGhiX2J1ZmZlcl90KiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBidWZmZXIp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWdu
ZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0KTsKKyAg
ICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKwor
ICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpOworICAg
ICAgICBpbnQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICAgICAg
dW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2hhcmFjdGVyczsg
fQorICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX251bUdseXBo
czsgfQorICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHRE
aXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1cm4gbV9k
aXJlY3Rpb24gPT0gUlRMOyB9CisKKyAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKKyAg
ICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CisgICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoczsKKyAgICAgICAg
VmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50
LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fbG9nQ2x1
c3RlcnM7CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJ
bmRleDsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisgICAgdm9pZCBzZXRGb250
RmVhdHVyZXMoKTsKKworICAgIGJvb2wgc2V0dXBIYXJmQnV6elJ1bigpOworICAgIGJvb2wgc2hh
cGVIYXJmQnV6elJ1bigpOworICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1
bihHbHlwaEJ1ZmZlciopOworCisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVm
ZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOworCisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4g
bV9mZWF0dXJlczsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAg
dW5zaWduZWQgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuOworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBtX2N1cnJlbnRGb250RGF0YTsKKyAgICBoYl9idWZmZXJfdCogbV9oYXJmYnV6ekJ1
ZmZlcjsKKyAgICBWZWN0b3I8T3duUHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZmJ1enpSdW5z
OworCisgICAgZmxvYXQgbV90b3RhbFdpZHRoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dENvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0Q29tbW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYTFmYzQzZmQ1ZDA5YzE5OTE5OTlmMzAzNjMzYWVlM2Y0ZGUyZGQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDb21wbGV4VGV4dENvbW1vbi5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNp
bmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGb250RmFsbGJhY2tM
aXN0LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
KyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0Q29tbW9uKGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAor
eworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CisgICAg
Y29udHJvbGxlci5hZHZhbmNlKGZyb20pOworICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJv
bGxlci5ydW5XaWR0aFNvRmFyKCk7CisgICAgY29udHJvbGxlci5hZHZhbmNlKHRvKTsKKyAgICBm
bG9hdCBhZnRlcldpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CisKKyAgICAvLyBV
c2luZyByb3VuZGYoKSByYXRoZXIgdGhhbiBjZWlsZigpIGZvciB0aGUgcmlnaHQgZWRnZSBhcyBh
IGNvbXByb21pc2UgdG8gZW5zdXJlIGNvcnJlY3QgY2FyZXQgcG9zaXRpb25pbmcKKyAgICBpZiAo
cnVuLnJ0bCgpKSB7CisgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBjb250cm9sbGVyLnRvdGFs
V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90
YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3Rh
bFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBh
ZnRlcldpZHRoKSwgaCk7CisgICAgfSAKKworICAgIHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBv
aW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsgYWZ0
ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKK30KKwordm9p
ZCBGb250OjpkcmF3Q29tcGxleFRleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAoreworICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMg
KyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KKyAgICBHbHlwaEJ1ZmZlciBn
bHlwaEJ1ZmZlcjsKKworICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOworCisg
ICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gR2l2ZSB1
cC4KKyAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1
cm5lZCBpbiBzdGFydFguCisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQu
eSgpKTsKKyAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3Rh
cnRQb2ludCk7Cit9CisKKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0Q29t
bW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAoreworICAg
IENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJh
Y2tGb250cyk7CisgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKKyAgICAgICAgZ2x5cGhPdmVyZmxv
dy0+dG9wID0gbWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5t
aW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8g
MCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90
dG9tID0gbWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBjZWlsZihjb250cm9sbGVyLm1h
eEdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAw
IDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVm
dCA9IG1heDxpbnQ+KDAsIGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hYKCkp
KTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+cmlnaHQgPSBtYXg8aW50PigwLCBjZWlsZihjb250
cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hYKCkgLSBjb250cm9sbGVyLnRvdGFsV2lkdGgoKSkp
OworICAgIH0KKyAgICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7Cit9CisKK2ludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0Q29tbW9uKGNvbnN0IFRleHRSdW4m
IHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOworICAgIHJldHVybiBj
b250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKK30K
KworZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAoreworICAgIGZsb2F0
IGluaXRpYWxBZHZhbmNlOworCisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
dGhpcywgcnVuLCBmYWxzZSwgMCwgZm9yVGV4dEVtcGhhc2lzKTsKKyAgICBjb250cm9sbGVyLmFk
dmFuY2UoZnJvbSk7CisgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRo
U29GYXIoKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CisKKyAg
ICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZs
b2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKKworICAgIGlmIChy
dW4ucnRsKCkpIHsKKyAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBjb250cm9sbGVyLnRvdGFsV2lk
dGgoKSArIGNvbnRyb2xsZXIuZmluYWxSb3VuZGluZ1dpZHRoKCkgLSBhZnRlcldpZHRoOworICAg
ICAgICBmb3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gMTsgaSA8IGds
eXBoQnVmZmVyLnNpemUoKSAvIDI7ICsraSwgLS1lbmQpCisgICAgICAgICAgICBnbHlwaEJ1ZmZl
ci5zd2FwKGksIGVuZCk7CisgICAgfSBlbHNlCisgICAgICAgIGluaXRpYWxBZHZhbmNlID0gYmVm
b3JlV2lkdGg7CisKKyAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7Cit9CisKK3ZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKKyAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFk
dmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpcyk7CisKKyAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBt
YXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsK
K30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIEZv
bnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAoreworICAgIFVDaGFyMzIgYmFzZUNoYXJhY3Rl
cjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgVTE2X05FWFQoY2hh
cmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKKwor
ICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCB2YXJpYW50KTsKKworICAgIGlmIChsZW5ndGggPT0g
YmFzZUNoYXJhY3Rlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZ2x5cGggPyBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnREYXRhIDogMDsKKworICAgIGJv
b2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERhdGEgPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIGkg
PSAwOworICAgIGZvciAoY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdCgwKTsg
Zm9udERhdGE7IGZvbnREYXRhID0gZm9udERhdGFBdCgrK2kpKSB7CisgICAgICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJh
Y3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFu
dCkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERh
dGEgPSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2
YXJpYW50KSkKKyAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250RGF0
YTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaW1wbGVGb250RGF0YSA9PSBiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmZvbnREYXRhKQorICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFjdGVyRm9u
dERhdGEgPSB0cnVlOworCisgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICB9CisKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJh
Y3RlckZvbnREYXRhICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGEgJiYgYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5mb250RGF0YS0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZm9udERhdGE7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAppbmRleCBjM2RkYTE1NWE0ZjdmYTUzNTlkMjdk
NjFhYjUxNTBmY2M1YTg5ZmI4Li5hYTUwZjE1NzVmNDViZGVmYTY3MTY1MDRhZTk3NWVlNDY0MWQz
YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAtMjUsMTM4ICsyNSwyOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKIAotI2luY2x1ZGUgIkNvbXBsZXhUZXh0
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKLSNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4u
aCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgY29udHJvbGxlci5hZHZhbmNlKGZyb20pOwotICAg
IGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgY29u
dHJvbGxlci5hZHZhbmNlKHRvKTsKLSAgICBmbG9hdCBhZnRlcldpZHRoID0gY29udHJvbGxlci5y
dW5XaWR0aFNvRmFyKCk7Ci0KLSAgICAvLyBVc2luZyByb3VuZGYoKSByYXRoZXIgdGhhbiBjZWls
ZigpIGZvciB0aGUgcmlnaHQgZWRnZSBhcyBhIGNvbXByb21pc2UgdG8gZW5zdXJlIGNvcnJlY3Qg
Y2FyZXQgcG9zaXRpb25pbmcKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIGZsb2F0IHRv
dGFsV2lkdGggPSBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55
KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3Jm
KHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7Ci0gICAgfSAKLQotICAg
IHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQu
eSgpLCByb3VuZGYocG9pbnQueCgpICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsg
YmVmb3JlV2lkdGgpLCBoKTsKLX0KLQotZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lz
KSBjb25zdAotewotICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwotCi0gICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBmYWxzZSwgMCwgZm9yVGV4dEVtcGhhc2lz
KTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8s
ICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRo
U29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaW5pdGlhbEFkdmFuY2Ug
PSBjb250cm9sbGVyLnRvdGFsV2lkdGgoKSArIGNvbnRyb2xsZXIuZmluYWxSb3VuZGluZ1dpZHRo
KCkgLSBhZnRlcldpZHRoOwotICAgICAgICBmb3IgKGludCBpID0gMCwgZW5kID0gZ2x5cGhCdWZm
ZXIuc2l6ZSgpIC0gMTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAvIDI7ICsraSwgLS1lbmQpCi0g
ICAgICAgICAgICBnbHlwaEJ1ZmZlci5zd2FwKGksIGVuZCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7Ci0KLSAgICByZXR1cm4gaW5pdGlhbEFkdmFu
Y2U7CisgICAgcmV0dXJuIHNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dENvbW1vbihydW4sIHBv
aW50LCBoLCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKLSAgICAvLyBUaGlzIGdseXBoIGJ1
ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5
cGguCi0gICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0KLSAgICBmbG9hdCBzdGFydFggPSBw
b2ludC54KCkgKyBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwg
dG8sIGdseXBoQnVmZmVyKTsKLQotICAgIC8vIFdlIGNvdWxkbid0IGdlbmVyYXRlIGFueSBnbHlw
aHMgZm9yIHRoZSBydW4uICBHaXZlIHVwLgotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQg
dGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwotICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKLX0KLQotdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOwotICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
KTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZs
b2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOworICAgIGRy
YXdDb21wbGV4VGV4dENvbW1vbihjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAK
IGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwotICAgIGlmIChnbHlw
aE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IG1heDxpbnQ+KGdseXBo
T3ZlcmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2Vu
dCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IG1heDxpbnQ+KGdseXBoT3Zl
cmZsb3ctPmJvdHRvbSwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAt
IChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuZGVzY2Vu
dCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmxlZnQgPSBtYXg8aW50PigwLCBjZWlsZigt
Y29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZs
b3ctPnJpZ2h0ID0gbWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5n
Qm94WCgpIC0gY29udHJvbGxlci50b3RhbFdpZHRoKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNv
bnRyb2xsZXIudG90YWxXaWR0aCgpOworICAgIHJldHVybiBmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHRDb21tb24ocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAogaW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBm
bG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewotICAgIENvbXBsZXhU
ZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgcmV0dXJuIGNvbnRyb2xs
ZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi1jb25z
dCBTaW1wbGVGb250RGF0YSogRm9udDo6Zm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJp
YW50IHZhcmlhbnQpIGNvbnN0Ci17Ci0gICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIHNp
emVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKLSAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBi
YXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotCi0gICAgR2x5cGhE
YXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3RlciwgZmFsc2UsIHZhcmlhbnQpOwotCi0gICAgaWYgKGxlbmd0aCA9PSBiYXNlQ2hhcmFj
dGVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCA/
IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udERhdGEgOiAwOwotCi0gICAgYm9vbCB0cmllZEJh
c2VDaGFyYWN0ZXJGb250RGF0YSA9IGZhbHNlOwotCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAg
Zm9yIChjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBmb250RGF0YUF0KDApOyBmb250RGF0YTsg
Zm9udERhdGEgPSBmb250RGF0YUF0KCsraSkpIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIHNpbXBsZUZvbnREYXRhID0gZm9udERhdGEtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOwotICAgICAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KSB7Ci0gICAg
ICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBs
ZUZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpKQot
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFudEZvbnREYXRhOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhID09IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZm9udERhdGEpCi0gICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250RGF0YSA9IHRy
dWU7Ci0KLSAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnREYXRhOwotICAgIH0KLQotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udERh
dGEgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250RGF0YSAmJiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnREYXRhLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250RGF0YTsKLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0Q29tbW9uKHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmE1ODcwNzU4NWFkMTA5NTUyNDRkZmVkZGE4
MTE0MGVkZTAwYjYwYy4uMDJlOTk3NWU1MWM4NTBkYzUyZTBhZjBjMzQ0N2M4ZWY4ZjhjNzllMSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAzLTA3ICBLZW5pY2hpIElzaGliYXNoaSAgPGJh
c2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBmb250IHNo
YXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFjCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBleHBlY3RhdGlvbiBmb3Ig
c3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5n
LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2Nz
czMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogUmVtb3Zl
ZCBjc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmcuaHRtbC4KKwogMjAxMi0wMy0w
NyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmlu
Zy1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9m
b250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NDgyZmI5NTQzOWExOGE1YWE4YmIyNDNjYWMwZWJhY2RiOGY2M2ViCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAxNDk4MQp6Y21lSHRkMDNOWW57UkNVKW9IMHZzKD1mTil6MnlAQWVEV0t7WGBLRVEx
K2IpRDRQTTwqQVRtKTJtKTRGNmE9YW0KemtTJm9WVkpFRXVRNHhfZjVTQTFvSjBYTX1MWHZZbyVy
fHErb05zMlhZdiM7OT1lcWlibW98a3JAQjYmPntrd241CnplZnkkP0B2aEpKZX4hVW1jQTE8dnZj
aDBLSzhWNDU8blR8USFZNWhiS1ZGQnc2aHFIQ2duSWcxQCQ/U34hKHB5Pwp6VWNJY05zb2AtJilB
UThIRTA8NHRZRzN1eHk2a256ISVNXktxfVI5S00qUk42YVNZfWwjPkQ3NW81KTk7O2gyVz4KenVw
SEZ8P3p6KnktUHhvND9CS3pmT0x4YDNKbXBwT3lII249d30oR0ROQGxDMmhnS1hiSmFQMkV0SWtl
K0hDK3BgCnpOfHdBLWRncGhRNzste2xnM3NrQVBkYD1zUlhTbmxAPUlZM0huIVg/Q2FeRWVKPGgz
LU1ZYm9xXyM1eXlUPVE2IQp6aE5hI0hCYFU8VWtLb0lINjZjMmYxJXRVa2xsJG5PRnFwZl44Mkhm
WkBDfHNEZnF5IVAhSk85bzQ/WlRTP2VKPHoKemw7WFdWQmhnWjlUT3ZIUCU4eWZDNlpuazNOJDJy
ZEI0SCF4KTh0YTtZOEFIXzRuPWQ9bzI/XmFYaWZ9TGFZLWBuCnp2RXt3fHFBUlhHVCh4NGFySE9X
NF5LUSR1KnJDNFFqKSR2THRoR3ZOKjJfVWtndmQ1NEZyOFQkRmtJKEF6MitFVwp6Z1MlQlI9cj5Q
WVE/b05BSGVHV2dQakg1N2Y7PisrUnk7TUlza3I+fHJiQko7NihiYG15UnZOM2woPSFYR0M0aF4K
emRtOz9pcnNKUz9MemJ8YEUxJTRiWCpEXlR2JlZoMkU3UE1lQ3A7MHFIbXFlfnUrcFF3K1ZBTihu
Rz0hWHpCTUw7Cnp2d0NQSDxjYjZ8OSFuJShwPDhTSTxNKkZEO1dvTG1mK3FKaUpnc2k3cUhTeWBQ
cVk9fG5vTnVDbTJabX00enIpRAp6b3kta2RZUypmRTlCN34xQjQpYTYrTWstfUZ5dnA4amg9Y09H
KyNTT159fHcxI2RLUHF4b2oqPWNCRCFrS0RWZCEKemAzOElTWmIqKCNzdH1MJEZWU2dtamFoUmla
ckJ3V1VffjFwYE5wYThMMnlecHNOdXgpVmQpU3B4fC1idVYkJXNiCnpheDE1aUtWUDQzblAoVyh1
RUQ0PiFJTnF5dmI1S1JMZjk9Yj9zczs0e0hZTmhrMmYtTWlRNT9PQiR7UFR5Pz1hVwp6PT0jZkRs
OUR7T2Y9SWhBZi00XnU3OFcjY0M5QD9AeExsWiF1LT1efit+WTE+JSorcCZlODxaWlpSQX5QRF5h
KDwKeitNWHEpQVg9eUFsU25FeiNwVSkjMzxWaCo4TkpRY1FXZUs7RSVabEM9Q0hGX1RVU3JHKUk0
OSVOfW83V3EpRGF0CnpyRjZIMztnKW5CREQ2RlVeQDA8eyZ2ckJAUV5tRHdwWkI5bmsrRjJTaF5H
ZXZZOTRuNW1eeEpseFlsdS1fQCsldwp6QEk1X25uPzNLfS0/Y0tHaE5KVGZhXnk2IU9tViltITZr
fVohTEx5VSo7cUdQOTZwK3p0VG1FVSt7bVNqP19+c14KemtkVzhjSHFUTm9HSm03MklxN19BZj1p
RFFySVRaaSRsO2VlbTQkcjJ6VzUxRjBGPkI9RVBzK29XNllZJE1vayVJCnpPfThed3p8WmBaNT5p
dlVJIWBsUUR6bDEjKlBwdWxRYkc5S3BxUDRRMEgrWiMkbHJVTVh5dlgrd3FJSjZrTldWLQp6Xmx8
cU0pOWp2Y3RkTmNFYWBldGdBQmtpcVNJdl5ASEtSQ1ZOdmFsLXpldWFQeGtTenpWPmQ0KUNhOHhA
eSF+ZC0KemFRJTs7ZTgtd14rb243RWw3XnR2NmMyVFVGPGs4PD1oTi1vT2NhQyp4NEtWdD12VGc2
WlJaem1GcyhfK3hVI013CnpXJjtWUXYtNWJ8TjVQJEVXbSpGMklkK1JIOXIqYld3YX1eZSgoIXI5
JmVVZWIhYmV8cT1yM0ooam1zcW5Ifk9oSwp6PWJxbCl2cXNHI0F4bCgkXzZsViF1RWZ7T0lsfnpq
I2lkTkZvVXIzVTFEKWxMR19wI1JuZ1NeKz0tP3ZlYHBadW0KekpEMm83M1k+bUdWQD1AQ29IPTc7
Ryp7SmEoZlJtSDhgLUM8TkBiNktMYD4/WEJrZ1UwWkpUPyNiN3pmVyowXzh9Cno9bDBQRlgxJk9p
THUwTzE4NEZDKWh3VmJOKSpmQitiPU0zR0VWUmdCbVg3ZX1EbE0wMThMSDgxXkt2YG9CZnIxVAp6
WGopN3M4e0hDQCVXX0UlWTJEey1SMj91cFIqKVV3U0hZP0I/SCpHUWp3JSFAUmEoKXdiK2FVTUEp
KWloUysjKG4Kem5pQEQ8a04pU0VeeyVtTTIjSTl8PElNZyhCfSY8YjE5ZT1zdzEjO3tSO09aYUhi
KnhzRipSO0VVeT9WIV4zdDhwCnpXUTxNYXI9fGNEWHcrS0ZRM25IKHB3Xy03KXkpKVprMGwmRmJq
YWdQbnhkTTJVK0Zya2FCYTl6UHI+R2pgS3E4WQp6UGpFdG93emIkXzd2fUYwSVUzSnY0fiNvPz11
bHMmPEw9JHhUdTJDdldnaUd5ZTBgTXVeSmx3MUMrRyFeRy15dmcKejNLe0QlUSUmWClNRXVUNT9+
Y2ZzcUMhQn1vZUhyaFRUfG8/eFFqTCFZJnVwTEcqezFVM2lAcncmZ0skd2xhc0NVCnpueztPcTN3
NCFmSEJjbU4/OzIoYyYrJT5DUVp7UmtHSXRfN0Z2U3FSKl9AX200WXhZZVE/Jmh5blk2OSgzVntg
QQp6JkxjNnx2c1AxYEpsU2pTS0t5fSl6SXB3M2lNVEhuYDJGPGFuYVBCTm0wMVNldz1oUnEjeD9a
UDllRCM/YlIra1YKelRCWnpDZFN7ay1kWS0hYUhsZl47LVV7dXRmQT4qfkowcCFUIztoajFYWH5B
UFNOSjdFdlBEJUwhMitBb2hURlQzCnpZRUdBQTJoPUhrRGpfZFJTMEtiVEVPKGl+Ml9LKlhXSHNs
Zjhham0hOXJEeDVJNlRyZ3pjJERjaE5ISkZ0fj5RPgp6PGFvTmg1O2VjcEJQNEYxOyk7MXxnTj1L
JlM5PVloP2kyNWhUOzRfcCFPKUtFQ1AhT3VRR0hAaGJfPCMtciVUVT4KenB6VGhrPSp+UVFhcGF0
YHFoKCoydmtYOTwrbDU/eDloSTZ0ZXZJNmxFXkolSClxWlBRQ1lHRzs3Wkg8dWlLdUl6CnpLZzQz
X1RDYDdJYTR5fGxIcUZXP0UkbUk5XlJJfjhTRWtyOE5rZHlGPj9pZk80Vjd+bnI0TzdeVW5mTE56
NS1tNwp6MXE0OH4oWCFObWImbzh8Mj1UMH4kbkZAbiFyUWZQPGt3bnBCPzQlSSl4Xm9mVjI7MHVk
eG4zWVhOU1I+JU5HaVUKemBjMXMjeiYkaDBYNl9RUSs5eDtIeEMpWXojJlRnY19aZ3BsdkcrXjVl
OVgwPjs1T3g3dFA8Z1M5MDdNeHRDeHAhCnptPGI3fW89IU1iOVROdkFjKV93T0sydXhVKSZKdlAj
S3hlfWtfSDNuJWNpZyYpVlg7Y3srNnx4OFF1M05obzNBNQp6SXIqTF9uWGF6ejZURXU1YXBrflpG
TjBDWVBTSH4tZ0VefDl1S3JYXnJSTHp1Uk9qSWBtKWRWfTB+SlNoOW5kVSYKeiZTQjdtRF48OGJZ
TVBibCREZSsyOV5TZiY8QV98dSZAWn43UXhfd0wwOVI5PjE0M3Vacy1AcV5zZCpVZkg7NHszCnpS
VX5Abk10eUBXQ0t2cWJZdjBZfj5GRm0pRHlIT3lNYm5ac3t2PWtVQk56Rns1N1dQV0VPN3k5PVhf
Zyt2ZXszYwp6P2xTZXghLXJwMU5NfkE9NGgwTFN6VEV7P0BQWjMmRGEyX0wpNEpCMCkqNkBMTUte
Z3g7clhrJCNZQGJvJml3OE4KellNIVI2WkR5KkNIV2hPb3JsXmVmbHo2bDBDM2E8fCZ8bHtiVnBk
RCpeMm0qPSV3PGNfdlpXJDElPytBeGtLe0MoCnp6dW9AaU0hUnM1I19IeFF4ZSNpJEBRMDZnN0RP
I2c1UmN9P2VrJXV+d0ZzdSo1JnJDV3JuYCFzdUBhfSExKUg4Iwp6LU9kbF9kM01QY3srTGc2JFRU
ZylLVmpSTjZuV3xwKTZsekV7dnxjYHVrRT04ZFN3cGZoanoqOSpQUSRgeXx1bn0KekJCV3tLZnM4
KnROd3VrZU9vUlJXck1RMD0kdWYzcV93O2hOcksqMEArREpeZFk4KT5xJjhtJVl6Y2Imc3V6dFIt
Cno8YXVmbm8/cWFacUVxMDVTNHpLQm53c2M0R1FUUkQ/PkRvUnVPSythRFd9VnlSal4tTHF1akF9
Q2hzb2V1JCZtKAp6UElQdS0/I29fTXt5Nm5HZ1Y2Z25IRiZaekUmTElJQjcxKnU0ZVJ5bHR+encz
eTcjK0JSamZFWjV5dHNiITJLUzUKenhBOFh0aDdvMmZqPklNN0J+QU5pIW9fKSlPR1M5Zj5KQGdo
TXFyPytCQVI+Q0ZUXytZQz0lN0x5aCNoP2JFPnQ5Cno/M01BWj8oUl9We2Ewe1dCYXhubzNDcGh6
ciM/Kl5ZNG49OVhRcEJ6YEFnaHRXZ2FvallJQjg1ODFAUlZNUCspPQp6JTJZeXM7ZEVqYD1zVFVz
cnhJfXNLbHc3TmUyPyZwOVlwSHhGLW55M01eMWV5WD5Tdz9UVnxNJXJUJWpENlVAMSMKektJZ3pq
NFFqeWZlbUpQVzNwdShQaDZfSlBHYH5xZD96dVdRZkk0RUc2Ryg3Z3xFZEYrbEpvZ08keEdkSTlZ
OGwjCnpjMlF3JnFNQiFgUUZGYiomWVpBNU5CSC1oTkkoYUt8Snh2Vl92PHJiS2t2M2tmTGhTfVI5
dj15TXo5S0h5RUA+Vgp6eDR2KS1Efm96P2o+MiRMXlhxeCQmPTQ3UFUobURKWDtUfEZKNShGO0N+
RCRpZTQ3WDJKVzB+Wk57KChvTXpad2gKem5IMnhncHpecWZkSnpHeUUwUHA3UXBUQVZpYH1XJTVu
VDFLJE5PS3Vpe0gzdGolN2gjQlhtemwqc0pieWFlMDFOCnprQlM/VmhRY24+Vz45Q2wzb1Z5OWdJ
WDUpeWtfbVc9UCQ9Ujc1RU1wdmVYcWJsJTF1O1dLPlF0LU8oNVJPSEYyMQp6Qy1kaF4reSNGNmk/
MHNIM25RMDFqb0hBdUxPWGVXV2dXMi1yLURCR1YlI2JwR2JmcFVFP0hebEZUXmFLTitHSm8Kejdf
d1dWUV5Rc0M3YCQwYGt1SkllTmxBaWVqaTNOR2tQM3hpV1lxbGo7VkpmcWA8NXZROEQmUz9HRjRM
QEUzZFl3CnooUGdjbG5ib1IydnBKYG5SYkFpTWBpdjRybiZBNUhFMk8jfEg3JWtOezlQXm08eDx6
OCNxSH02WVRBZndQaHNFVwp6Yll4fHBeMHFMaWUrVnpraTtJP3huSlpUZHtfdmAxRWIrTDw+dzhE
a2ZaMWZWbVJKR0I0SmF9ITJeSVF+eTcpZkAKelotYl88ZHhsQDJDdzZPOCFaUSFRZEsrZXFiWipI
P3w1U2d1PVVmd2lVUStVYHN5fX5kKG9pTnhGRzlzN1NPWkAyCnpkTTA1YnZwPEkwRDMqRDNJRjhS
amdGa0VMcTh+fH1gdSo9ZVBXMlI3eUlsWU1GR3NqMVk+TnE1PyhkdlAkPlRqMAp6O24oYkV3M1cz
b0IrSVpKUmdSYl83YDsjMlg+c0t1QSloWWZhfjBzYXd9RH5QVTtUMn1iOFI+eHdjOFNGJjsmRTUK
emIpQ25+aGUxQHtaSntTNnEtSlB3RVV8Km48KGJ+Jnk1VnlVa0BFe0xCfmxZMnUqe14kaHx3OG5a
fVMhTVJUfVZRCnpeTz87YkJ4MWs2clBwJGVmRkZHa0FKaWdjemVsKFJzeip3PitKKUJKK3VRUWc8
bz1paFZmfkI/e0o7M3JfTX4rQwp6PGNhTj55YGw9MHdRNjBRbzI7UDRXdGErdjVMZWpaKFp5MEBt
WnZWUUtkOSgoQHBycWAlQWc+VSo7eU1oOE0qTkwKeiZaSmQpTzMyZTUhe2FOfk1OeHdfcylrRHNK
QiZtXmZtcDt3NFlieEVoamM4dGpSUk9YeHxyYkNUQXpqMmxJVGJ0Cno5TGRzUHImKEx2dTRjdjZV
d15DWVFnZjFlWlF2X0Y/cWdNdG92UTtSSjFiVmFwYnlvMi12N0coJDQ7ejZCbmR0fQp6R0hZWUx1
VTlFVDc2PihrYG1UMml1Z3REJEVXPVNPKHlWWnpiM040REszI2U0aVl6SHl1NTRUekgkPWNpVTlq
b1MKendXN0xMRG9EbitVMnV5VVBsdE5Rc3lOV204O3JNYGUkP1lZVC0hUFJQSExSVj1tTCNhSnV3
TElZKFEjUWQ/VGthCno+Nl40PDt5R0wmaz9OVWhwZzlrOCYhT2h9V3pATGtPWWlqUEg5X3BMUEdn
MVNPdDxMbTl6c09ZSm5XYzt7cj51Pwp6Q3JLV0ZLanAjV1o/czIkLVc/dUV2bSs2aEdjaSZXUWJ+
SlRLK2AqXmxHKlN3eCUhbEp0KWgxQGBGQVQ0d1VeKFkKek5vbz9fJilmUno+Uj0kUDIxeiErb2dg
cEdHUXpPcGoxKTROb1R8bCZKJXVRViFzaCMxel99THdfYE1VIyleNTFDCnp2fjBEJFE1bVNCcUQj
eV4tYU9AWWlfSl9tTkF5d2ZhMlRVeW0pNmt4ND9pPCY4WndVQXVhMzFPQ0gyd3p3ZTlAUQp6bHQp
dHdNbnFkM0IzVnkqTjsyWXRiKW5OPTBtYnlNYyRTeytLT1Z8cVlTZXx6UWVYYUY+dU5TfW97aEti
d3JvK0sKekZBPG0xWlFodjdRQHtlQjgoVkJzTypQTmZKaTloTz85WClmciZQJk57SEMrWWZpMUxy
Y0okR2dhS3xCWWFCe298CnohZGdUcCNoKzJMKCZ4PFBSST5zVyR5bnVtLVEjVlVedV9WRSFeRW5X
Kj5ebWMhUl5KWEhOS3BHZVlaVmRyVDUrVAp6VkVQLUJoM1N0LWd3IXlAcypjUiFvYiV9WjJIengy
MUU4UjVxYzdgS2NULWxaWEZgaXhENkkqOTlqYmxlIWU+NUYKelAxMmNvOzVvKmxFMk1eVzctKnFh
XytwNkBXVmpFYy1jU1MhQUg/KTZaMjlvfHteM0pvSj1UYFYkSEApZlRJZ31BCnpVS3xabkU8M31u
P0hVNDMlJlVRNDh4dzhpaUZVSztzaWBzWndTfnBtZFI0WDxVdjN6c3lmNEt5OH47JVMlKUooSgp6
Kyk5Wjw8eUdfMVN8QzVJZjtFLWBQeXtFQ2ArcnJie2MhSUFBYT9eaWRrYFd1KVo7NVczJC0maHpx
cC1kMUBlQDwKekZqUjQrJjExSCZPYnYjcUc9c01OSFYrJTgreVR1Izg4NkJTZXhyRHtUOXB3ZkNW
az5xWXwhKGI1NyROX3BjfjVTCnpOYUpyKj5faz48aFg1PmIjPEFeem1YPTN6ZjtQOGQkcGVnemF2
KGMzcGpiYUEraCtOWEghUXBtRTAxMjhjfG1LfAp6VkJGS2BpcD1YPndwTUhCJnktZmFPSDRrWCll
MzM+JHFgYTk0cCY2dkpVaT5weE8ze0FfRipCUENla0MoZ3F6eXoKekpFejhnUyl7X2IpNSEkRT5e
R3YlTkE5VXtTVHNVfFYwR3thP2ROX01YT2QmRHlqR2M5ZXFVY0xsU1U0STxuJn1uCnpfbVppOUEy
QXB8YSpyM09JKGVOaz50bl9rXnFZMHpZP1N0U1J5K1Y5LTNuRmF2QSFePmshKVhmaDAqMGJ7PzRT
Zwp6MGVkV3JiZDFxTm9xfU4pJmVATCY9Pm9LNyt+V05fOHs1bmJUYClUR3RxVSM2TCNNbWVLT0R2
R2xheiFDekFoWDMKent5UX5MSmFWTXsmblYpX2xjczdRZUpvcjtKSUBBajhgb04hWnxeUUM0KU8y
SG9uVkh6O3p9dT1fU1RwSVY3PUV5Cno4Z3hjdG0paG1yXys2UHpkKkE+cT9pfG9rJHZFTm9SZyNR
cTNLYEd3NTkrXnN0MGhhcmUrPTMpSDZoe2duT20odgp6YlU3SXExYCRSTHtHYm5Rc3goPGVxQz5l
eWkjUSgtT2VYKkY8SHkoNmUhT3BLcn4/I1dGQ3E/TmdLelYmU2FGPlgKemNWOEZ7UiRNV0FvIWFE
NyQlNXtZQjkkYVh0fnRHSDYqKlpLRFl2eylXJnskcCphfWRWd355dX5wcUdRblhfaTR3CnotUTMq
dEAkdTxAKyVXcGA3WDVJbHsjWDdDUXU1Zyg9QCNoZz80SkI2VEg1alkyVCV7YiohSjBoRWdzTVlx
IzVJIwp6Z3w7KTNwcDt0WT4kJm9JVE9XP0hWUns1RWxFdWErb1lheUQhPWEhWmdOQjBXRW5uWX53
V157T0tSaTZYPlI2UFEKeipnb2hIUVZnflo4Z3ZnZGFaYnBWR04tYmhVcTE1KXc3ZTd7dGFfK2lt
TilOdWs9b0o4TnYmcC1eK2syWnpCNnRYCnpfWiheOWxzU1NaSihuc2tyP0NGcCZMP257YT9yQEZo
JEleV04kP059KSZoZW8wJHhYZDNtNHh1WEokJnNERzNxVwp6Z0IzN0w5aHpkSnRedUZBUmNCKjt1
SDRYJTZqZVZNYTtMYXhzV3RnUHcjI0RBZEp1KGZOQDRGUVhGdXw3Klg/OHEKemxiXyliTzg4QUB1
UmkkU1QoemdSWW9uQUdUZTkrQ0QxYVp2bGpPUGB6e1lLQEJZdEdnd2x5Q31vKHYjMURNd2lOCno0
TmFKR0JAVVY5OWUrYjFBSGZnQURqJWFaWHtvQz5LZm5CUHRmRWFOTmxkbGpyMVN9Z2l7JmNIRH5+
MWMkSWQxMQp6bSZ5WnJAQzBmd2V2K1BpS3hVXzA9ekRSTjdeeSY8SUFMbkVONXpwVEphYkRAKCV1
fihDTDZhdGlrej16IVdOeU4KenUxSm0mKkBSZE8ySnt4JjI3JHJRezg5cXo1fWZWUypLMGNLdlEo
IWpLV21yallVXiVtc2ZlYXg0bHBUalZvM0cjCnpTIWdVUiFATikqbX1vcl5jKV8oaysrNlkoWGxk
S14lanVKTzFqQWk+UGFicTcydigrWlc5Q2laZ0UlSVhIc35nOQp6PzQleEMwe0JHNGBvdERnPFU9
SHtLKEhXd0h5VTZeO30zSllmVXxaMTZuMjllJW1nWCE5TFdLSlohdWdLVyhHUmMKenFJeCpveHN6
SnVNVSVqOFU3dndqJklDYTFNd2lPUHVNVmhSfEtxbkZVO3tgOEI7cGs5MUImN1hwK0AlV2hXZ0JP
Cno1elkydjw2QCkjXytoNk5JNE5CcXVEWEQ3aDlCY1R6OW55SjVXUmRKPntrME0/SH5fYlh1R2JY
aFA+UDhHV1BebAp6I2Q5OFNLenM/KiRzb1E/ZEIzez1xQWhZJVRtJH1EK1RTcnF4YVB3YmdAWSo9
SWBQb0VwZ21nKVQhV0M4dzxJamoKeishOG0+Yk98PXVvUjZTbzg/Rj50TzJzYFIrWXIqVDUydnA+
bEpaUWA/Zm9vfW4jemZ1RGJsTiZqK2IjZTU0MzMtCnpFRkxBRGw9UEpHQkowOGVtfmxAKG1lNDxg
P0N8YGMhUDQ3UCg+RmRBS00kazl4KD9LJVFjOHFwJWZ1RzJfM1MkIQp6OSkoTUMlI2tqUXtCbWZw
Zj11X2dTYCZCYWBvbkghZWZJJT9pU3h0dGc+aXlTOyUqRD11WDk0WE9ye2VLcjx8YEkKejNPNEpr
T0ZOJDVRfV5ENTlXR2lmI05ycmcjV3NfMGh5PyZHMXF0Vl4zb2UrWDhtdjBwcilPJmdrfE0hUE0r
U21GCno8OTZSX3BqbHRIUXk8ZjV2IUtnPzspVkVkMjl1UGZAdzk4fVNjSVghcC0zfXUjQVFpc0wl
PTBxY2tOZHtDWVlyTwp6e2o9MTR0P0pndGxEZVVQb1ludFhuZ1Eoe3hRQlAxLXxCMj1GUj5AOUBQ
KiZrVE9uPi1MUjN2RWAlQ2c1QTktfFUKel4+WTx3YCVpdjxJdlVXWjN5aCZHYm0lPzYzYDAyLU0m
QSZsY2U0WG4jNDszOUAjXyVQcmdlfGF6VW42MVA9MFhPCnpGKWUhLWl0YT0oVnhBX1BoWCVQPTJo
N1JaUjhjVVlNS2VLT089NXpMeT95Mzh0WX5XKTFUKilmMD1vQVY5YzV3fgp6cztlRzJpcU5VWXc9
I3hGUyhOOzN4M1EmZnF3a0p1ZC1aNlU3YnlIYHVxSiZnOUI/I2M3TGNZS2FBVEBwdmJMcnoKejM0
V0l4WCg5byk4KlowYmt4MT4xYjdwM0UyJmx0MWNPQSZPVz4wRT5hKj80MUhzUT9QMWVBN1pYQUR7
e01OX050Cnp0VzEzdUtmTHpramtRY3koKihGXlY3fWR8Z3BJYVBhQ0hoRnA3T1JVXzRHcykyN3ky
akBgS3d+Nmc3O0MyZlFoUQp6TSVRd3w3SzAkTEE1RkZrMzJhPWt2KnFLO29DWXI/UTV7WmM7K1F0
OEtfTHxSSDMkPXFfdkdecVdLdkokKkUmdTUKekleVmhFS2tHOGheX01JM09Mc25NPmYyc2Q8eXZi
PDJDYEc0PEhGSChZS3dMQHQ8X35qOH5WUmkra2w9PWxUQ0dNCnpFbiF4KXR2SCYhR1pgT0ljeG9l
YnhrU1AlUHErMj8lcjNwJlQkIzFUO3wxYSFUQjJKXlBCUncrTkw2O3F7djkqRAp6Q0Vje0dIZEAr
bkwxU085aG0mcjJtP0M4fi11d04jSTJiY3ZhdH0hJmBGd3hVYHxTZnNhT3dsK2ZSKT5GWFRlZlAK
eiUxX1pQVWJxekU/MzBTdXE9RzJrTXJ5PkNeeVh7V2ZuJTlqa0xfQF43Tj1Fa1FOcnRfXzFQNjxQ
OHgxQHJjITVPCnpJPURNPTtXOCYpVTJhYTAzPnVBPlhAJVkmMTA5bCNDUiVvMig+XyFJPTdDRTRf
d1Y9RVNSQl9JSSFEJUVkZ2Rofgp6M3skKU87XiEkS2N3NWpLVlNvR0tFMmR4MDRIeEYoKX5FfVEh
RmhWJExNZUpEaUtjRzJWXm5wVUt0bmFBZkxtfUYKelY3ZDIrKSpofGxRMG9UYT1CJVdvOGJIJUdT
a29SV1BJKlZHVTczPjw7Qnw1YlNQMTB8dzswTkYoPHM+LU91NCZlCnomYmlufSRKZm1jWnBUUGYx
Nj1nQ09fJDBKRkYtJlopMU9TQ2xib002JlFea3o2QTY2KURGRkNhay1RY2V2ISo2Ngp6dGlNP2sy
QUgrQ3hrMDRVIWIqNXtqO0w5a1heSjBeUiFUTkBycl9ERiQ+bTxKP2BmOUVWMTlHfFFCJmdKelhA
UGcKend5JTdPQWwleGs9RnUhcEUzRi1fPkBZbFZPRnI3PzV6eClFP3ZTa3o8Tit4WWtWKTcrWWdh
bmdyY3ooKDx5dkF9CnopWG85aHBCaXQ8P3pGP3Z7IVBaeGhgfFcwcyFUQUJrVkF+aG45fjtHUmdH
d0kwO1dlYj9uJmU5c28zPn1iKVkmbgp6aXp8cjlUciFyRWxHQnI+anJLcUUmZk56bGE3PXdxblp0
bFI9cTImJGY+UFVtXkVkKUh7XkR1clhwVzkwMXszVFQKemg1YDR+Pj1BSE8tckd8aGR2YSZ7JWh+
KUhZOVBsbyZ4KzN5Y0NSNFYxWWZWTldIM0xEXyt9b082cyhFKlVWZXVgCnpZd3prNj1WdmBzcyRV
RzRAcVd3PktCd2oqakwrQGprPUpGOG1FVX1HO2xZPXpeO1dHaDxRMDZqYDxyR2NANUJHLQp6aWk+
cHc0cE5ueTFlYCEpYykrbj1lLWlmIzR4RSliWnI5OWNUQlRAalBVVSs3ayUqdDJvQH4jUypgfFpo
KD9sTFoKeiRMUTYkZVU9NipIYmRjcXhTKkgydzM9PTBVOFJnPWdOJEJCWEFGe0RATlh6d3NJRUt6
elJQYFkjUWBBVFFOJjE7CnpUR1prUEBQNVV7clZIfih7ZEMwQno/MEtQaU5lZDl5T0xsTUgrY3x4
b21QUzVrTHw+K2UtfUlGc2M/TUlgIyo4Rwp6a0ZAMXpffWdzXyhnZTtmVlpGQTwocFUkUmY0OEow
Ry1re2ZrUnpwRmgzaz0hSnNtblUyM2ljSWJLNiNUSWtNTV4KenFTTzVSNn58bGlHcm5iei00JDRY
JDc5N01xKG9+QW9nO2B0Sm1FKHx6SzBrJElLe0V+dVVRTiRhX35+Kj8/MylVCnpFcVp4c3VZVGxw
ZUtAcG9VfTQlSD93LWtWJCNNdmdeXyRraSteQTN6KmhFQTJxNl9ndlM2VEgpbVgmRXlRPEd1eAp6
VWJSRVhAJjxMIStpJmRuNz9COUVSRWRBYnckI282TlJPdnMwWE1wVUBtcy0jPmZxRkBRc29XMHo7
IzNFKHRZXjsKelVsMmk3JDhSbkpYX3B9YSlUKFdwIyN8JmhkO3ZrdjU8WU0wMl9LKWFIc14xeWE8
YWNNJiQ1WnNodT40YmB1NCNLCnp3dGBeRipjYXhlJipHK1EjSVM4WTBXeVBiPFNrWENeNUxnJWV6
RVQhe007YFNaeSgtQUkkUW53LSk+WjBZMEliKAp6Kmp9aXV1ckc1O2hvWlgrYj5UP3VhMDN8WHNn
S3x5Y0IybE9WajBTPztFYVRVYFUpckBwS0w4MEdpYE0hcSs9UFYKemJScFEwQldxMldoUn5gcVI1
PVlsb0JpLS1HemplViVAO0NGN3VVSmxMJCQzcGVgeEYzNkA1UChmMUJzUE1acDNgCnpwKTB0WUFn
JG1zeF5WS3tLdUkzSkVRMHVGOGc1ZTZEYkhgbHdwfjlDRUheOG9yPVUyciVzfm02S20zLXM7OFl2
Kgp6akw1fWNsIzEzcmR4Yl83Tl9JVG5LMlU9STxqTyhzb0c/NTFfaElucSUzcC1IdE0xeCg+dXRF
KFNVJD1OKyk4PDUKektmY0lHM1RSeUVMKGN5WVR2I25eclUlSG47Z2BxbE5xNHx7cGQ8UFYpRjxL
VkdkRykmbyhJc3hBcXkmd0tnZkMkCnpWcno9UT49IzQzME1icGQwOUJMY2xvcT4+ZkZ4MF9jUC1r
cT4yNllTdHlBfVBYT0xYWSsmJX18X1VIanJ3UVJeKwp6d2ZNTFZ6OylONlkmSF48JFgrPkBCRD5H
dENGbV5EJVU5biRhLWBEeWx3KksoQ1ZsdFFyJjYwbG4+O3g1cXd1fkQKejlMPGdOa1BZdkAlcXZn
RHBNYU9ZMldVVzJ5cUxgViNlbTZvSWMkS1NKQWkyQ2pFdW1NQFB1JEtvPFpCfUNBVDgyCnpncnI8
VGcwVFg9PkxNQjUyU3BYJE43dlN+YUQ2e1RAQ2hINWAqYzEqJk0zNmhWVEZ6SkM/KE9gST4tZDA+
fTVacwp6MnAka1o5K3xaK2FfZkR8UDZjX2taNjA3bk9JU01pZShiSEs0JU5CcEE/K1MhMU9fdjFe
VG9seG57XzN4V2VDOFQKejdaTWBaRHRfVCkoWV9BY3MpPD5mazJtYCs3d0cye155ZUgrQi19T3dW
TEV5VXc+RDYtISV3JXpMMF4xTXMwVUR8CnoxRnAhVXNOWnZJb3JldEdlI3AoanBMcjhHcm9EeUNS
YV5nbUBYNGdlIXp7PmQjWUJ5UXVaalQwaTNvcWZVMHEjQQp6Z0s3OytOPXAwfVU2YkhNelNXSkdt
cW8yQUtIbTMjKkA4UzZAaCNBJHBPWG1fcn1BeksxJDtYQU5NQX15QkN+dXsKeiNjR15zQDkmO2JW
b1hgYHNrZFRaR0o2T29zUTh4MUxGKTxZP3s2N0dQZUtkVkVXU0NPP0lMWSZRNTA+Zm1yOTBZCnpH
Wkh4QzctVlNJQEFIKGsjM2AkQ25BMTheZmskb0otNHoweEhtO1ZzSFAkVihgdV5TN2RQWEx6VWJF
KzlkYUB3OQp6S2Q7eVZpb3ElRDJtdmdCV15pOStHRmAoUl48aiVaRW9PQ1kzYVR9IStUVm08T29g
b0NNQyRRclQ2aVNleSRwZGoKemheUEphOUlDVXFwIVoleTM4I3xlVDdNMy0kUEA1VCZhUERvY0hh
WUdzdUVCJGRVTTxCQiFeQUN7fkElIT9ZdDVRCnplYmhCKGxfR05GQ0M0WXZtX2hVe3VsIUkhKHdx
K1gzalBlMTRpVlgjZEh3Xj5sLW9kUF54cWsqNFdUcXhzZ0cjVwp6aDtzTWgzMHtHRF84Mzd4N0Q9
SEplKn0/MUMtQ2lyWFIkOFNEcm54VTVAPXF+VXgkYyRVfkEqSmUpWUExM2U9SkoKejJOVWRLT2pe
O1NxOGojUyYoZXNXK3p1PlExVlNncjlmWHJaZ19ucy1AYXJSTDUlV1dsVUBlVjdzRGF+IUU4fCEm
CnpXPXM2cyFHPVh7bitsJmVaa25PdXgqdDVJQihNJGBKP0BrWVNGXm12em5lbUchbjRAMVZPOHh3
VEZ+akQ+KH4xbgp6eTwwI2hjKXN9Z3ZtaH0zV3BZJitPLV9VOHhwViZoKyZqVjJGdzBjSVMmNmBy
aD1qME5FVmNlMFQkKChPbUV2JUQKeiFkZzhtOFJjIV5FZDFJITVQISRXclhsVUJnNiMrMmQpbVRx
PEhLSTw+KSgkPzcjPG9DczhQPnw+LV5QbDxGKTB2Cno9SzlSKWhPTmFtTkdqMVJNOztNfU5yfnEk
JUFEPE1QSz13bVooMjJnbm4yYkJJKXhLJTRjYWo3JHhAe0lFWmAmZQp6K2FnZE5qPmFYfUdrUllG
JCN0MSlUcFE4cnNUfSZ9O2MtKCFLfFdQfkBxRFJreXs1RlgoO2tFbEBJYHk1RVpFWFAKemhSfnJ5
YTBXOEt4azZtPEU0PWB5IWAwdmJlMkRASm1gR2BKbE1yVT81eWsqPXNRdWtpWGM3OUFXPm87KDlZ
N3I1Cno9Rk9YbF9gIUFpWUh2dTsoZjcralptQ3piMHBRX2pXQ1N0SD8oIWdaWVlwVDgkZkxPZ3A7
cncpMEdpJW9zM3U0YQp6JEU/eTh1Q3ZBWCU1ZTFqM0tzK0xlTy1JP2lgQ15SUlJaTGp5TV8tT1gt
IXA3ZldFczhmenBYNEZxcjd5P1ViYFEKejJGfXlocG1VXkFkIVkzSURYZn5KRSFsNV5odD9NJDxu
dmh1Q2BEVGFITjRnWHA2PyMlTllOaDs9QDB6ZilJcUNJCnpQMWhRQ1VfTE0yREE/cjJ0PHxmZWdi
eWZBRDctJStfe3t8ZlAhPXtMbndFMCpOY3NYS08mNE1YekI5MTJxcjMzaQp6JEtCOGtVMSpleFl5
V1dyZkAzYCo0MkdrU3daYmFRMTkwLVA0am8jNzBXdThzRDxyMUBPJmIkRXB4ViUhNElSVykKekwj
YEpzKz9lYn1MfUc+RW8oRDR9SHh4YzdnckF3ZU5WZ2deJihXb0w7RlQhPHhxRn12P1Z0YFRDfiR1
O00xNyZGCnpQIyN6V3oqX3stJVFSJGo9YTEldVQ1YTxmPD8xMTtEZ3NpQWcpblB+MU9iQyFlKllW
RFF6WWAzUHpzfGZSQD53Tgp6cmJ7OzNCbD8lMTdkWDBlTWNeJDdnPFJNKiUwZUZSQC1SMH0zcU5D
PlhOc2E/TVdQKEQwbyltTUE4MWBqOWcxV2IKeigmP3VsN2w7clU/d09aT3c9eEFadzx2XkJBUmVY
eUZNMlo9MjstNGk5PyVMfmpaX2QxV2pMNClkfX47VHV7TF4mCnoqMXlgcEw0P0RFazwrYkdLWChy
entreXAhTlM0N25EP2xaJkdCPEZfNkBXb0c+Kik5ZD88V2J2MlhHN05YbDNKUgp6bnczK1AmIXJq
Mngwbz5NeVRRSV9PRjJ7UHgkdTcpQVdxKHg4eHUyRCNsbW4rUm9ZZkNUQ3BoeWVsb1lmTHtAWWIK
ej1gJDJWMDB+ZnJ5I25gRHY5ZXZlY0VKa0hFci1WRnUrVyh2TWRTP0Y7cHtESFM1ZXJIdk9oNFhr
XnYlNkhhMzhWCnpqZXVzQHloSDAxJGVmLTZaPlZMRjEtfFAmX2t9VztfPUAhfGQyJXFAZ0wqQyp3
P0lOSmU/VGpzKWJFO0J6fGRafQp6aiZlX1JsITlRTGohbDd4eGZ1d0l2byt0Myk4P19fXkxwITtt
Vjlxb3QqZmN4TmMzISg9RWphIXo/Y0gkP1g5bEsKekR5PEJvckxoK2dDV3N7fC1kTCNpaktLYFZa
Q0x4RyN0JEVmbiQld0R2NCkrNmAzMyhHNDJKTnNjPUpmOGtnNSoxCnozYypDdU5JMkR3O1pER1ph
el9rU3A9aS02JkNlM0JkPkNaNzxNUGdiKXRTOGNvSlc4Ymo0XnpmNkdmQE9CND5ZfAp6Vjl3aFU1
Jip2dnJIP1FSR056YXY3KShYYlhWVStiam03XzlrP3xpczJEKlg3TUVZXzJgR3FaSE01e0l8e0xN
RTAKeitFOSZKZm59YU5HTFJaP1ZuQk4pQytfJXc3IzlTdG9RMTY7bkohO0pGSkl9VCl1TjA4VnI/
YjtJOU9SNTB9WCEtCnpQS1BSRzN3eEhyRjU1Mi1lIU5yczRyQyN6bDlGaHt1ZUd7cXI3UiU8dHZO
MXBTK3BxQDc+dW1qaComTXVrVnh+eAp6RkxaMGgjTmFuR1klaEYqPzFVM1EwfW1hVjBRcUk5Jm9l
U2dsUTs7T1lDdiRVWjdwVUlRaFdvSE5yUThLKjJvQ2EKenpaOGdeX2gtWCNaNT8/d3YtPlYqaHUz
ciR2RH5rPjdAWTN9NWMmQ0RtfXd7ezc/USs9bmtiQjhVOHBZX2YjdEJNCno2YlV5c0hXSV5DekUl
JlU5P2QxXmt3WH5GQU5aMDIlaFBFN0F6b1dPNWBCRFRjRDYrTGlCfi1rJDUhbXRPWUFuRQp6dXIl
RThMUXd7PEVEKFIoNE1aWlcqJV40dTU3cU1LRG16LUNubXF2UGRDK09waVlQY3V6S0o8JjJse3Ey
aFJXZX4Kem98VGomZnp7WFlCM19MQnFuSnY5WHA8fmJpaygzQD42NSUwVGY7MVl0M0plaEwyJCZh
dSRRITd6K1gkMWFmfCU9Cno5WWliSiFASGcoMiM1dHs0SjtLbyNkcDkwYy1EVTQzazs/cXFJbU5Z
RlBRJWpGQ19ORWN0YTJsRH0xdG10PT14cwp6P20+e2woJFM3eSZFYHlyPU80ZlF6PUxhJUsxN15P
ZmRtWmNMPTxvLUg+YHJFK1h9QWp6SENpZ0F7YmgmMExwdE0KekNERz40NzhAKHtKZkowbSE5PVJV
M2tTdHVpfj5NLTtAdjsobHR7QG5oLW5RWkBDVDwqK3lrc0c9IzY0d0dmRXwzCnpYJkAyZ0pSTUM2
KWE5a0g+MD8qd0FnTV9GOHdTMz87eCRYJDd2NVYhMD9iUyFCZVlEJUVLV3dKWFZpa1J2YlVFKAp6
bTQlY0JART8+QiNBN018dS0xVmdldTt1eyRoRDFPNzAmfjdBM0RZd0lCQz5XaTYtfklrXjFOcktw
N2tNVTlUKzsKenI9KGZrN29sN05iXy1pVHZrJUYwcG1heWgqYX1ZNGZCV0hNSGxSaClQdld9SVVM
UVJPJXF4WWtTeDg4UCQkbTs2CnpSKSRjamlfI3VNaFZ3UmkzZGhoVTl5bHh+Z2gxfCRqaFoxZVZ1
UHVXWGkzPVk9N0FwNVFxMVFhSj9MNSZzYHhXPgp6XkItaG0rWnxwbzhrMz14cXohak8zMDReUzFk
JVdaNERWTDdVeGN+QEM0YW1ZKWleYUVnMz9nP0RNIXBRbmdMRFoKejR4aFZ8O01OI0B3ejxBfnZK
b3VrdjM0IWlvc2Y0cmcobXczdXsjRH17Sj18fkJ4aXBISEsxVDRgMFBCMDx9ZGJyCnpgJlo7I05K
XyU7KWJAXnZoM0Bwenkqan5PWCF9Y0NafD9jfW9IekNXU35mKDw1T1ZqPjUpX1B+dU1zfFBGRXtg
Ygp6M1c2SkAhJUU4Vig+dDhKOCRBcSQlcDM1JGdtcGJjailGbmUzdCl9JSRaJl8hSF5mfiFpWFBN
XmA7I3dXQDdtOE0KejQ4aG9HPVB5c2dlX2hrSFZ9MWAtZzNpbyRwVFY5bWZte010ITQtQH1vWmdi
QiRGJGpwVmxlQ2VWXyUocyNxOSQtCnpLRVlzS28hZHIyJD9lfW8qWlhnTVQ7TklFSFBNbG1tb0U+
YyNKVytKV35FZzlgQC1uVWtseSUxcFRNUHNTJThWKQp6PmV0VHZPO1lPU1BXYSUteTcrJS1UbF5u
RF84KWYzeVVWKmlnKHZRfkJtc3ZMY3A4UkpCT0BJaVVaYDJ+MzgzSHEKeiUhQkBxb1l0UWdzcll9
YXc/OXd0Jmw5fEg/WXw5SWYwb2FtPEAwQ3h7UCN4dnBTfDtFQEJHPDJ7fno+RHduIyR0ClkrNUww
aGAra0szN0t8fURZaGd0Qyt4SXtJRks1JUVHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1m
ZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2JlMGRmZWU4NDAzMWU0ZWM4N2E1N2I1MmIyNGU0MTU4
MTUwNTViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0t
bWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxOSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkge0JP
RFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDAp
IHNpemUgNzg0eDM2CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc4
M3gzNgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI0MzogIlRlc3QgZm9yIGZv
bnQtZmVhdHVyZS1zZXR0aW5ncyBwcm9wZXJ0eS4gIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgy
NDMsMCkgd2lkdGggNTQwOiAiVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSB3
b3JkcyBzaG91bGQgYmUgZGlzcGxheWVkIGxpa2UgXCJXZWJLaXRcIiwgd2hpbGUiCisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDI2NzogIm90aGVycyBzaG91bGQgYmUgZGlzcGxh
eWVkIGFzIGJsYWNrIGJveGVzLiIKKyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDUyKSBz
aXplIDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMXgx
NgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxOiAiV2ViS2l0IgorICAgICAg
UmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsNjkpIHNpemUgNzg0eDE3CisgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDk2eDE2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggOTY6ICJXZWJLaXQiCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw4Nikg
c2l6ZSA3ODR4MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgOTZ4
MTYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA5NjogIldlYktpdCIKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dApp
bmRleCA1YzU1OTUyYzdjMTJhMTIyYjhiNTQ5ZmYxZThkN2JkNjRlNjEyMWU2Li5jMzAyMTY2NjQx
YzBmZWU4YjBlMGNjYmI0MjNlM2JlNjc5Yjg2ZDI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zMTkwLDggKzMxOTAs
NiBAQCBCVUdDUjk3NzE2IDogZmFzdC9jbGlwL292ZXJmbG93LWJvcmRlci1yYWRpdXMtY29tYmlu
YXRpb25zLmh0bWwgPSBJTUFHRQogLy8gQ2F1c2VkIGJ5IHI5MjYxOAogQlVHV0s2NTg3NCA6IGZh
c3QvanMvcHJldmVudEV4dGVuc2lvbnMuaHRtbCA9IFRFWFQKIAotQlVHV0s2Mzc5NiBNQUMgOiBj
c3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCA9IE1JU1NJTkcgRkFJTAot
CiBCVUdXSzY2NDE3IFdJTiBMSU5VWCA6IGZhc3QvdGV4dC9taWR3b3JkLWJyZWFrLWJlZm9yZS1z
dXJyb2dhdGUtcGFpci0yLmh0bWwgPSBJTUFHRStURVhUCiAKIEJVR1dLNjY0MTkgOiBodHRwL3Rl
c3RzL21pc2MvYXV0aGVudGljYXRpb24tcmVkaXJlY3QtMS9hdXRoZW50aWNhdGlvbi1zZW50LXRv
LXJlZGlyZWN0LWNyb3NzLW9yaWdpbi5odG1sID0gVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137568</attachid>
            <date>2012-04-17 11:34:31 -0700</date>
            <delta_ts>2012-06-04 18:32:33 -0700</delta_ts>
            <desc>rebased to ToT</desc>
            <filename>bug-69826-20120417113430.patch</filename>
            <type>text/plain</type>
            <size>62503</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmIyZTIzNWQ1MTcyNDU2
YTE5YWQzZDljN2YwYmRkMTBlMmJmMmJhMy4uMmY0Y2FmZjUzNjYzODQ2NTRmN2U1ZjY5MDg4MTIx
NzJkYjNkMDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTA0LTE3ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBIYXJm
QnV6ei1uZyB0ZXh0IHNoYXBlci4KKyAgICAgICAgQ2hyb21pdW0gbWFjIHBvcnQgdXNlcyBpdCBh
cyBzZWNvbmRhcnkgdGV4dCBzaGFwZXIgdG8gc3VwcG9ydCBPcGVuVHlwZSBmZWF0dXJlcy4KKyAg
ICAgICAgSGFyZkJ1enotbmcgaXMgb25seSB1c2VkIHdoZW4gLXdlYmtpdC1mb250LWZlYXR1cmUt
c2V0dGluZ3MgaXMgc3BlY2lmaWVkIGFuZAorICAgICAgICBjb3JyZXNwb25kaW5nIGZvbnQgaXMg
bm90IGFuIEFBVCBmb250LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gY3NzMy9mb250LWZlYXR1
cmUtc2V0dGluZ3MtcmVuZGVyaW5nLmh0bWwgc2hvdWxkIHBhc3Mgb24gQ2hyb21pdW0gbWFjIHBv
cnQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQgaGFyZmJ1enot
bmcgZGVwZW5kZW5jaWVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgaGFyZmJ1enot
bmcgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6IEFkZGVkIG1faGFyZmJ1enpGYWNlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQpOiBD
b3B5IG1faGFyZmJ1enpGYWNlLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
cGxhdGZvcm1EYXRhQXNzaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzQUFURm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXJmYnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6RmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXJmYnV6ekZhY2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZh
Y2U6OkhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6On5IYXJm
QnV6ekZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6RmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGFyZkJ1enpG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEV4dGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZWxlYXNlVGFibGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Omhh
cmZidXp6Q29yZVRleHRHZXRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6
OmNyZWF0ZUZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFk
dmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
U2hhcGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OmhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1
enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6
eFBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpI
YXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6fkhhcmZC
dXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVh
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXR1cEhhcmZCdXp6UnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp0b3RhbFdpZHRoKToKKyAgICAgICAgKEhhcmZCdXp6
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6c2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpu
dW1DaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6bnVtR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJm
QnV6elJ1bjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpydGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxl
eFRleHRNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVm
ZXJIYXJmQnV6eik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KTogVXNlIEhhcmZCdXp6U2hhcGVyIGlmIGZvbnQtZmVhdHVyZS1zZXR0
aW5ncyBleGlzdHMuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dCk6IERpdHRvLgorCiAyMDEyLTA0LTE2ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGluc2VydGVkSW50b0RvY3VtZW50IGFuZCBpbnNlcnRl
ZEludG9UcmVlIHNob3VsZCBiZSB1bml0aWZlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAKaW5kZXggMzNkYzhiN2IzYTFlODVlZDM3YzI5YjJhODg2YjdkN2NiYWU2MDg3YS4u
OGZiODRmNGRmOTIxNGRhMDYzMjhkMDBmOWNlMWFhNjNmY2U4NmQ4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTIxMiw2ICsyMTIsOCBAQAogICAgICAgICAgICcu
Li9wbGF0Zm9ybS9ncmFwaGljcy9tYWMnLAogICAgICAgICAgICcuLi9wbGF0Zm9ybS9tYWMnLAog
ICAgICAgICAgICcuLi9wbGF0Zm9ybS90ZXh0L21hYycsCisgICAgICAgICAgJy4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6JywKKyAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcnLAogICAgICAgICBdLAogICAgICAgfV0sCiAgICAgICBbJ09TPT0id2luIicsIHsK
QEAgLTE1NDEsNiArMTU0Myw3IEBACiAgICAgICAgICAgXSwKICAgICAgICAgICAnZGVwZW5kZW5j
aWVzJzogWwogICAgICAgICAgICAgJ3dlYmtpdF9zeXN0ZW1faW50ZXJmYWNlJywKKyAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL2hhcmZidXp6
Lmd5cDpoYXJmYnV6ei1uZycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnYWN0aW9ucyc6IFsK
ICAgICAgICAgICAgIHsKQEAgLTE2MzMsNiArMTYzNiwxMiBAQAogICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3Bw
JCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2lt
cGxlRm9udERhdGFTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRm
b3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFjXFwuY3BwJCddLAorCisgICAgICAgICAg
ICAjIE1hYyB1c2VzIEhhcmZidXp6LW5nLgorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZVxcLihjcHB8aCkkJ10sCisg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlQ29yZVRleHRcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlXFwuKGNwcHxoKSQnXSwKKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlclxcLihjcHB8aCkkJ10sICAgICAgICAgICAgCiAgICAgICAgICAgXSwKICAgICAg
ICAgfSx7ICMgT1MhPSJtYWMiCiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IDY1YjRiMTcxNTQ2OTE4Y2U1NDk4NDliMDJjYWUxZWQ3NTljZDBkN2YuLjRmMTU1NzBm
MDRhOGU5YzcyYmJiODg1Y2JkYWJkNDRjYzFmMWY1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4
MzEsNiArMzgzMSwxMSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JN
YWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGU4MjJlNTA2ZDc3MGY5N2Y4MzE4NWZjOWJm
ZmJmNjM2NzE0NmJjZTkuLjYzYTkxYTQyNDFhMDQzODhiNmQ5NGVkZGNkZjk4ZTIzYTRhNjkzMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgKQEAgLTcyLDYgKzcyLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQq
IENURm9udFJlZjsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAjaW5j
bHVkZSAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIgIAorI2luY2x1ZGUgIkhhcmZCdXp6RmFj
ZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0yNTUsNiArMjU2LDEwIEBAIHB1
YmxpYzoKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZWRGb250OyB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pCisgICAgSGFyZkJ1enpGYWNlKiBoYXJmYnV6ekZhY2UoKTsKKyNlbmRpZgorCiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVT
RShDQUlSTykKQEAgLTM1OCw2ICszNjMsNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikKICAgICBSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9udD4gbV9p
bk1lbW9yeUZvbnQ7CisgICAgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CiAj
ZW5kaWYKIAogICAgIGJvb2wgbV9pc0NvbG9yQml0bWFwRm9udDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbQppbmRleCBkMTA5OTY2OWFkMzBkNTllNDdmZmNjOTFjNjFkZjIwYTgzNjBjNWFm
Li5mMzZkMmY5ZjEyNjBhNjI4YzRhYTBlMzQ5Yjk0YTRjMTg2YTlmYTBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBs
YXRmb3JtRGF0YUNvY29hLm1tCkBAIC05Miw2ICs5Miw3IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0
YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQogCiAjaWYgUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBtX2luTWVtb3J5Rm9udCA9IGYubV9p
bk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBmLm1faGFyZmJ1enpGYWNlOwogI2Vu
ZGlmCiB9CiAKQEAgLTEwOCw2ICsxMDksNyBAQCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29uc3QgRm9udFBsYXRmb3JtRAogICAg
IG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFS
V0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsKKyAgICBtX2hhcmZi
dXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKICAgICByZXR1cm4gKnRoaXM7CiB9
CkBAIC0yOTcsNiArMjk5LDM3IEBAIENURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQo
KSBjb25zdAogICAgIHJldHVybiBtX0NURm9udC5nZXQoKTsKIH0KIAorI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBPUyhEQVJXSU4pCitzdGF0aWMgYm9vbCBpc0FBVEZvbnQoQ1RGb250UmVmIGN0
Rm9udCkKK3sKKyAgICBDRkRhdGFSZWYgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCBr
Q1RGb250VGFibGVNb3J0LCBrQ1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJsZSkg
eworICAgICAgICBDRlJlbGVhc2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgdGFibGUgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCBrQ1RGb250VGFibGVNb3J4LCBr
Q1RGb250T3B0aW9uc0RlZmF1bHQpOworICAgIGlmICh0YWJsZSkgeworICAgICAgICBDRlJlbGVh
c2UodGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitIYXJmQnV6ekZhY2UqIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpCit7
CisgICAgQ1RGb250UmVmIGZvbnQgPSBjdEZvbnQoKTsKKyAgICAvLyBIYXJmQnV6eiBjYW4ndCBo
YW5kbGUgQUFUIGZvbnQKKyAgICBpZiAoaXNBQVRGb250KGZvbnQpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghbV9oYXJmYnV6ekZhY2UpIHsKKyAgICAgICAgdWludDY0X3QgdW5pcXVl
SUQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZm9udCk7CisgICAgICAgIG1faGFyZmJ1
enpGYWNlID0gSGFyZkJ1enpGYWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRh
Kj4odGhpcyksIHVuaXF1ZUlEKTsKKyAgICB9CisgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdl
dCgpOworfQorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiBTdHJpbmcgRm9udFBsYXRmb3JtRGF0
YTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDlkZGJhYmIyMmJkYTk2NzdhNTU4NzEwYTUxNzkyZmI1YmFhMTQxZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6RmFjZS5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNp
bmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVGhvdWdoIHdlIGhhdmUgRm9udENhY2hlIGNsYXNzLCB3aGljaCBwcm92aWRl
cyB0aGUgY2FjaGUgbWVjaGFuaXNtIGZvcgorLy8gV2ViS2l0J3MgZm9udCBvYmplY3RzLCB3ZSBh
bHNvIG5lZWQgYWRkaXRpb25hbCBjYWNoaW5nIGxheWVyIGZvciBIYXJmQnV6egorLy8gdG8gcmVk
dWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gYmVjYXVzZSBoYl9mYWNlX3Qgc2hvdWxkIGJlIGFz
c29jaWF0ZWQgd2l0aAorLy8gdW5kZXJsaW5nIGZvbnQgZGF0YSAoZS5nLiBDVEZvbnRSZWYsIEZU
RmFjZSkuCit0eXBlZGVmIHBhaXI8aGJfZmFjZV90KiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVudHJ5
OwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNo
PHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4g
PiBIYXJmQnV6ekZhY2VDYWNoZTsKKworc3RhdGljIEhhcmZCdXp6RmFjZUNhY2hlKiBoYXJmYnV6
ekZhY2VDYWNoZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXJmQnV6ekZhY2VDYWNo
ZSwgc19oYXJmYnV6ekZhY2VDYWNoZSwgKCkpOworICAgIHJldHVybiAmc19oYXJmYnV6ekZhY2VD
YWNoZTsKK30KKworSGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRCkKKyAgICA6IG1fcGxhdGZvcm1EYXRhKHBs
YXRmb3JtRGF0YSkKKyAgICAsIG1fdW5pcXVlSUQodW5pcXVlSUQpCit7CisgICAgSGFyZkJ1enpG
YWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91
bmlxdWVJRCk7CisgICAgaWYgKHJlc3VsdCA9PSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSkg
eworICAgICAgICBtX2ZhY2UgPSBjcmVhdGVGYWNlKCk7CisgICAgICAgIEFTU0VSVChtX2ZhY2Up
OworICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hl
RW50cnkobV9mYWNlLCAxKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKysocmVzdWx0LmdldCgp
LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3Q7CisgICAgfQorfQorCitIYXJmQnV6ekZhY2U6On5IYXJmQnV6ekZhY2UoKQoreworICAg
IEhhcmZCdXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgp
LT5maW5kKG1fdW5pcXVlSUQpOworICAgIEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2Fj
aGUoKS0+ZW5kKCkpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAw
KTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOworICAgIGlmICghKHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKKyAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVt
b3ZlKG1fdW5pcXVlSUQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMyNmIxYjFmMjBjM2ZmYTc5Yjg4ZmI2OGQ5
OWNhZDc5MmY0ODRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK3N0cnVjdCBfaGJfZmFjZV90OwordHlwZWRlZiBfaGJfZmFjZV90IGhi
X2ZhY2VfdDsKK3N0cnVjdCBfaGJfZm9udF90OwordHlwZWRlZiBfaGJfZm9udF90IGhiX2ZvbnRf
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworCitj
bGFzcyBIYXJmQnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmQnV6ekZhY2U+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+IGNyZWF0ZShGb250UGxh
dGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZvcm1EYXRhLCB1bmlxdWVJ
RCkpOworICAgIH0KKyAgICB+SGFyZkJ1enpGYWNlKCk7CisKKyAgICBoYl9mb250X3QqIGNyZWF0
ZUZvbnQoKTsKKworcHJpdmF0ZToKKyAgICBIYXJmQnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSos
IHVpbnQ2NF90KTsKKworICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOworCisgICAgRm9udFBs
YXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7CisgICAgdWludDY0X3QgbV91bmlxdWVJRDsKKyAg
ICBoYl9mYWNlX3QqIG1fZmFjZTsKK307CisKK30KKworI2VuZGlmIC8vIEhhcmZCdXp6RmFjZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZj
ZWI0NTE3OTZjNzcyY2Q3MTdjMTlkN2FkNDNkYWE5YzM4MDc1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFj
ZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkNvcmVUZXh0L0NvcmVUZXh0LmgiCisj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
CisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgImhiLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZmxvYXRUb0hhcmZCdXp6UG9z
aXRpb24oQ0dGbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRp
b25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBo
KGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29k
ZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlw
aCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgVW5pQ2hh
ciBjaGFyYWN0ZXJzWzRdOworICAgIENHR2x5cGggY2dHbHlwaHNbNF07CisgICAgc2l6ZV90IGxl
bmd0aCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY2hhcmFjdGVycywgbGVuZ3RoLCB1bmlj
b2RlKTsKKyAgICBpZiAoIUNURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoY3RGb250LCBjaGFy
YWN0ZXJzLCBjZ0dseXBocywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpn
bHlwaCA9IGNnR2x5cGhzWzBdOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfcG9z
aXRpb25fdCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAg
IENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihm
b250RGF0YSktPmN0Rm9udCgpOworICAgIENHR2x5cGggY2dHbHlwaCA9IGdseXBoOworICAgIENH
RmxvYXQgYWR2YW5jZSA9IENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGN0Rm9udCwga0NURm9u
dEhvcml6b250YWxPcmllbnRhdGlvbiwgJmNnR2x5cGgsIDAsIDEpOworICAgIHJldHVybiBmbG9h
dFRvSGFyZkJ1enpQb3NpdGlvbihhZHZhbmNlKTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBnZXRH
bHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25fdCogeSwg
dm9pZCogdXNlckRhdGEpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9ib29s
X3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJf
Y29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNl
ckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgQ0dSZWN0IGNnUmVjdDsKKyAg
ICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0Qm91bmRpbmdSZWN0
c0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnREZWZhdWx0T3JpZW50YXRpb24sICZjZ0dseXBoLCAm
Y2dSZWN0LCAxKSA9PSBDR1JlY3ROdWxsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXh0
ZW50cy0+eF9iZWFyaW5nID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0Lm9yaWdpbi54
KTsKKyAgICBleHRlbnRzLT55X2JlYXJpbmcgPSAtZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0Lm9yaWdpbi55KTsKKyAgICBleHRlbnRzLT53aWR0aCA9IGZsb2F0VG9IYXJmQnV6elBvc2l0
aW9uKGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBleHRlbnRzLT5oZWlnaHQgPSBmbG9hdFRvSGFy
ZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS5oZWlnaHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCkK
K3sKKyAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
ID0gMDsKKworICAgIGlmICghaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcykgeworICAgICAgICBo
YXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVhdGUoKTsKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
LCBnZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2
YW5jZV9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbEFk
dmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9m
dW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwg
MCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBo
Yl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MpOwor
ICAgIH0KKyAgICByZXR1cm4gaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jczsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZVRhYmxlRGF0YSh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBDRkRhdGFSZWYg
Y2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KHVzZXJEYXRhKTsKKyAgICBDRlJl
bGVhc2UoY2ZEYXRhKTsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dFRhYmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPih1c2VyRGF0YSk7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHBsYXRm
b3JtRGF0YS0+Y3RGb250KCk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENURm9udENvcHlUYWJs
ZShjdEZvbnQsIHRhZywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKTsKKyAgICBpZiAoIWNm
RGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpKTsKKyAgICBj
b25zdCBzaXplX3QgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSk7CisgICAgaWYgKCFk
YXRhIHx8ICFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBoYl9ibG9iX2Ny
ZWF0ZShkYXRhLCBsZW5ndGgsIEhCX01FTU9SWV9NT0RFX1JFQURPTkxZLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjb25zdF9jYXN0PF9fQ0ZEYXRhKj4oY2ZEYXRhKSksIHJlbGVhc2VUYWJsZURh
dGEpOworfQorCitoYl9mYWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAg
aGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNvcmVU
ZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAg
cmV0dXJuIGZhY2U7Cit9CisKK2hiX2ZvbnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkK
K3sKKyAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOworICAgIGhi
X2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKSwgbV9w
bGF0Zm9ybURhdGEsIDApOworICAgIGNvbnN0IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+
bV9zaXplOworICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CisgICAgY29u
c3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICogc3RhdGljX2Nhc3Q8aW50PihzaXplKTsKKyAgICBo
Yl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOworICAgIGhiX2ZvbnRfbWFrZV9p
bW11dGFibGUoZm9udCk7CisgICAgcmV0dXJuIGZvbnQ7Cit9CisKK0dseXBoQnVmZmVyQWR2YW5j
ZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQpCit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZWVkODk3YmE2YTExYTcwZjA2NDcyOWJkODkyM2M1ZDc5MjU3NzM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1
bi5oIgorI2luY2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBoYXJmYnV6elBv
c2l0aW9uVG9GbG9hdChoYl9wb3NpdGlvbl90IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOworfQorCitIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OkhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCisgICAgOiBtX251bUNo
YXJhY3RlcnMobnVtQ2hhcmFjdGVycykKKyAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKK3sK
KyAgICBtX251bUdseXBocyA9IGhiX2J1ZmZlcl9nZXRfbGVuZ3RoKGhhcmZidXp6QnVmZmVyKTsK
KyAgICBtX2dseXBocy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fYWR2YW5jZXMucmVzaXpl
KG1fbnVtR2x5cGhzKTsKKyAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBt
X2dseXBoVG9DaGFyYWN0ZXJJbmRleC5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fbG9nQ2x1
c3RlcnMucmVzaXplKG1fbnVtQ2hhcmFjdGVycyk7CisKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGlu
Zm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpCisgICAgICAgIG1fZ2x5
cGhUb0NoYXJhY3RlckluZGV4W2ldID0gaW5mb3NbaV0uY2x1c3RlcjsKKworICAgIC8vIEZpbGwg
bG9naWNhbCBjbHVzdGVycworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5k
ZXggPCBtX251bUdseXBocykgeworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBpbmRleCAr
IDE7CisgICAgICAgIHdoaWxlIChuZXh0SW5kZXggPCBtX251bUdseXBocyAmJiBpbmZvc1tpbmRl
eF0uY2x1c3RlciA9PSBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIpCisgICAgICAgICAgICArK25l
eHRJbmRleDsKKyAgICAgICAgaWYgKHJ0bCgpKSB7CisgICAgICAgICAgICBpbnQgbmV4dENsdXN0
ZXIgPSBuZXh0SW5kZXggPCBtX251bUdseXBocyA/IGluZm9zW25leHRJbmRleF0uY2x1c3RlciA6
IC0xOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqID4g
bmV4dENsdXN0ZXI7IC0taikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5k
ZXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0Q2x1c3RlciA9
IG5leHRJbmRleCA8IG1fbnVtR2x5cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogbV9u
dW1DaGFyYWN0ZXJzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaW5mb3NbaW5kZXhd
LmNsdXN0ZXI7IGogPCBuZXh0Q2x1c3RlcjsgKytqKQorICAgICAgICAgICAgICAgIG1fbG9nQ2x1
c3RlcnNbal0gPSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IG5leHRJbmRleDsK
KyAgICB9Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFu
ZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgYWR2YW5jZSkKK3sKKyAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaElkOwor
ICAgIG1fb2Zmc2V0c1tpbmRleF0uc2V0KHgsIHkpOworICAgIG1fYWR2YW5jZXNbaW5kZXhdID0g
YWR2YW5jZTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVy
SW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0YXJnZXRYKSA8PSBtX3dpZHRoKTsKKyAgICBpbnQgY3VycmVudFggPSAwOwor
ICAgIGZsb2F0IHByZXZBZHZhbmNlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1HbHlwaHM7ICsraSkgeworICAgICAgICBmbG9hdCBjdXJyZW50QWR2YW5jZSA9IG1fYWR2
YW5jZXNbaV0gLyAyLjA7CisgICAgICAgIGludCBuZXh0WCA9IGN1cnJlbnRYICsgcm91bmRmKHBy
ZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2UpOworICAgICAgICBpZiAoY3VycmVudFggPD0gdGFy
Z2V0WCAmJiB0YXJnZXRYIDw9IG5leHRYKQorICAgICAgICAgICAgcmV0dXJuIG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4W2ldICsgKHJ0bCgpID8gMSA6IDApOworICAgICAgICBjdXJyZW50WCA9IG5l
eHRYOworICAgICAgICBwcmV2QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlOworICAgIH0KKworICAg
IHJldHVybiBydGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7Cit9CisKK2ludCBIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit7
CisgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CisgICAgdW5zaWduZWQgZ2x5
cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKKyAgICBBU1NFUlQoZ2x5cGhJbmRleCA8
IG1fbnVtR2x5cGhzKTsKKyAgICBmbG9hdCBwb3NpdGlvbiA9IG1fb2Zmc2V0c1tnbHlwaEluZGV4
XS54KCk7CisgICAgaWYgKHJ0bCgpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2ds
eXBoSW5kZXhdOworICAgIHJldHVybiByb3VuZGYocG9zaXRpb24pOworfQorCitIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
KQorICAgIDogSGFyZkJ1enpTaGFwZXJCYXNlKGZvbnQsIHJ1bikKKyAgICAsIG1fc3RhcnRJbmRl
eE9mQ3VycmVudFJ1bigwKQorICAgICwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuKDApCisg
ICAgLCBtX2hhcmZidXp6QnVmZmVyKDApCit7CisgICAgc2V0Tm9ybWFsaXplZEJ1ZmZlcigpOwor
ICAgIHNldEZvbnRGZWF0dXJlcygpOworfQorCitIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hh
cGVyKCkKK3sKKyAgICBpZiAobV9oYXJmYnV6ekJ1ZmZlcikKKyAgICAgICAgaGJfYnVmZmVyX2Rl
c3Ryb3kobV9oYXJmYnV6ekJ1ZmZlcik7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZv
bnRGZWF0dXJlcygpCit7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zv
bnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlmICghc2V0dGlu
Z3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGlu
Z3MtPnNpemUoKTsKKyAgICBtX2ZlYXR1cmVzLnJlc2l6ZShudW1GZWF0dXJlcyk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAg
IG1fZmVhdHVyZXNbaV0udGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1sz
XSk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUo
KTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5zdGFydCA9IDA7CisgICAgICAgIG1fZmVhdHVyZXNb
aV0uZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsKKyAgICB9Cit9CisKK2Jvb2wgSGFy
ZkJ1enpTaGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBtX3Rv
dGFsV2lkdGggPSAwOworICAgIHdoaWxlIChzZXR1cEhhcmZCdXp6UnVuKCkpIHsKKyAgICAgICAg
aWYgKCFzaGFwZUhhcmZCdXp6UnVuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIpOworICAgIH0K
KworICAgIGlmICghbV9oYXJmYnV6elJ1bnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2V0dXBIYXJm
QnV6elJ1bigpCit7CisgICAgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuICs9IG1fbnVtQ2hhcmFj
dGVyc09mQ3VycmVudFJ1bjsKKworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdGV4dCB0byB0
YWtlIHRoZSBsYXJnZXN0IHJhbmdlIHRoYXQgc3RheXMgd2l0aGluCisgICAgLy8gYSBzaW5nbGUg
Zm9udC4KKyAgICBpbnQgZW5kT2ZSdW5JbmRleCA9IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCAt
IG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IgaXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZD
dXJyZW50UnVuLCAwLCBlbmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKKyAgICBVQ2hhcjMy
IGNoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICBpZiAoIWl0
ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9y
Q29kZSA9IFVfWkVST19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNj
cmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJF
KGVycm9yQ29kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY3VycmVudFNjcmlw
dCA9PSBVU0NSSVBUX0lOSEVSSVRFRCkKKyAgICAgICAgY3VycmVudFNjcmlwdCA9IFVTQ1JJUFRf
Q09NTU9OOworICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0
b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNs
dXN0ZXJMZW5ndGgpKSB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERh
dGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250
RGF0YTsKKyAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlw
dF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgaWYgKFVfRkFJTFVS
RShlcnJvckNvZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoY3Vy
cmVudFNjcmlwdCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklU
RUQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKKyAgICAgICAg
ICAgIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpOworCisgICAgaWYgKCFtX2hhcmZidXp6QnVmZmVyKSB7Cisg
ICAgICAgIG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7CisgICAgICAgIGhi
X2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3VfZ2V0X3Vu
aWNvZGVfZnVuY3MoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9yZXNldChtX2hh
cmZidXp6QnVmZmVyKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6QnVmZmVy
LCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7CisKKyAgICAvLyBXZWJL
aXQgYWx3YXlzIHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3VsYXRpb24u
CisgICAgLy8gV2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4cGxpY2l0
bHkgc2V0IHRvIFJUTCBzbyB0aGF0CisgICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRoIGNhbGN1
bGF0aW9uLgorICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJl
Y3Rpb24obV9oYXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7CisKKyAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fw
cy4KKyAgICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0
aGUgc2FtZSBjYXNlLCBiZWNhdXNlIGEKKyAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFs
bC1jYXBzIG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50CisgICAgLy8gRm9udERhdGEs
IHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KKyAg
ICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZm
ZXJbbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKKyAgICAgICAgU3RyaW5nIHVwcGVyVGV4
dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4sIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgICAgIHVwcGVyVGV4dC5t
YWtlVXBwZXIoKTsKKyAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250
RGF0YTsKKyAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVyLCB1cHBl
clRleHQuY2hhcmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVt
Q2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisgICAgfSBlbHNlCisgICAgICAgIGhiX2J1ZmZlcl9h
ZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bigpCit7CisgICAgRm9udFBsYXRmb3Jt
RGF0YSogcGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJm1fY3Vy
cmVudEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0g
cGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBoYl9mb250X3QqIGhhcmZidXp6Rm9udCA9IGZhY2UtPmNyZWF0ZUZv
bnQoKTsKKyAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQsIG1faGFyZmJ1enpCdWZmZXIsIG1fZmVh
dHVyZXMuc2l6ZSgpID4gMCA/IG1fZmVhdHVyZXMuZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXpl
KCkpOworICAgIGhiX2ZvbnRfZGVzdHJveShoYXJmYnV6ekZvbnQpOworICAgIG1faGFyZmJ1enpS
dW5zLmFwcGVuZChIYXJmQnV6elJ1bjo6Y3JlYXRlKG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1
biwgbV9ydW4uZGlyZWN0aW9uKCksIG1faGFyZmJ1enpCdWZmZXIpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6
elJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgaGJfZ2x5cGhfaW5mb190KiBn
bHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhtX2hhcmZidXp6QnVmZmVyLCAw
KTsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9n
ZXRfZ2x5cGhfcG9zaXRpb25zKG1faGFyZmJ1enpCdWZmZXIsIDApOworICAgIEhhcmZCdXp6UnVu
KiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLmdldCgpOworCisgICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgZmxvYXQgdG90YWxB
ZHZhbmNlID0gMDsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zs
b2F0KGdseXBoUG9zaXRpb25zWzBdLnhfb2Zmc2V0KTsKKyAgICBmbG9hdCBuZXh0T2Zmc2V0WSA9
IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1swXS55X29mZnNldCk7Cisg
ICAgLy8gSGFyZkJ1enogcmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVy
LiBXZSBuZWVkIG5vdCB0byBmbGlwIHRoZW0gZm9yIFJUTC4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0g
bnVtR2x5cGhzOworICAgICAgICB1aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBv
aW50OworICAgICAgICBmbG9hdCBvZmZzZXRYID0gbmV4dE9mZnNldFg7CisgICAgICAgIGZsb2F0
IG9mZnNldFkgPSBuZXh0T2Zmc2V0WTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZidXp6
UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7CisgICAgICAgIG5l
eHRPZmZzZXRYID0gcnVuRW5kID8gMCA6IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9z
aXRpb25zW2kgKyAxXS54X29mZnNldCk7CisgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8g
MCA6IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZz
ZXQpOworCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJ
bmRleE9mQ3VycmVudFJ1biArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBp
c0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5m
b3NbaSArIDFdLmNsdXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSBpc0NsdXN0ZXJFbmQg
PyBtX2xldHRlclNwYWNpbmcgOiAwOworCisgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNX
b3JkRW5kKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCkpCisgICAgICAgICAgICBzcGFjaW5nICs9IGRl
dGVybWluZVdvcmRCcmVha1NwYWNpbmcoKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9udERh
dGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRS
dW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCAwLCAwLCAwKTsKKyAgICAgICAgICAg
IGlmIChnbHlwaEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBo
LCBtX2N1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAsIDApKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSArPSBzcGFj
aW5nOworICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwg
dG90YWxBZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisgICAgICAgIGlmIChn
bHlwaEJ1ZmZlcikgeworICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWCA9IGFkdmFuY2Ug
KyBuZXh0T2Zmc2V0WCAtIG9mZnNldFg7CisgICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VZ
ID0gbmV4dE9mZnNldFkgLSBvZmZzZXRZOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChn
bHlwaCwgbV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbEFkdmFu
Y2UgKz0gYWR2YW5jZTsKKyAgICB9CisgICAgY3VycmVudFJ1bi0+c2V0V2lkdGgodG90YWxBZHZh
bmNlID4gMC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsKKyAgICBtX3RvdGFsV2lkdGggKz0gY3Vy
cmVudFJ1bi0+d2lkdGgoKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3Np
dGlvbihmbG9hdCB0YXJnZXRYKQoreworICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOworICAg
IGludCBjdXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICAgICAgaW50IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+
d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFgg
PD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBp
cyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGluZGV4ID0gbV9oYXJmYnV6elJ1bnNbaV0tPmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKHRh
cmdldFggLSBjdXJyZW50WCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0Zh
ciArIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVudFggPSBuZXh0WDsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2hhcmZidXp6UnVucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG5leHRYID0g
Y3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChj
dXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRl
eEZvclhQb3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgpOworICAgICAgICAgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNo
YXJhY3RlcnNTb0ZhciArPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAg
ICAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXI7Cit9CisKK0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0
aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGlu
dCB0bykKK3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CisgICAgaW50IGN1cnJlbnRY
ID0gMDsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwg
b3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGlu
dGVyZXN0LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hhcmZidXp6UnVucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFyZmJ1enpSdW5zW2ld
LT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAg
JiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICBmcm9tWCA9IG1faGFyZmJ1enpS
dW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICh0b1gg
PT0gLTEgJiYgdG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpCisgICAgICAgICAgICB0b1gg
PSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAg
IGlmIChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAg
Ly8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQu
CisgICAgaWYgKGZyb21YID09IC0xKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKHRvWCA9
PSAtMSkKKyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisg
ICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJvbVggPCB0
b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBvaW50Lnko
KSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkg
KyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZWZmNWQ3
MmNkYzU0Zjg4ODhkNmMyMGFjYTFkNmVkYjAzMzIzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6elNoYXBlcl9oCisjZGVmaW5lIEhhcmZC
dXp6U2hhcGVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyQmFzZS5oIgorI2luY2x1ZGUgIlRleHRS
dW4uaCIKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFz
cyBTaW1wbGVGb250RGF0YTsKKworY2xhc3MgSGFyZkJ1enpTaGFwZXIgOiBwdWJsaWMgSGFyZkJ1
enpTaGFwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250Kiwg
Y29uc3QgVGV4dFJ1biYpOworICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CisKKyAgICBi
b29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIGZsb2F0IHRvdGFsV2lkdGgoKSB7IHJl
dHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFy
Z2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2YXRlOgorICAgIGNsYXNzIEhhcmZC
dXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhcmZCdXp6
UnVuPiBjcmVhdGUodW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIGhiX2J1ZmZlcl90KiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBidWZmZXIp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWdu
ZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0KTsKKyAg
ICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKwor
ICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdldFgpOworICAg
ICAgICBpbnQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICAgICAg
dW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2hhcmFjdGVyczsg
fQorICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX251bUdseXBo
czsgfQorICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHRE
aXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1cm4gbV9k
aXJlY3Rpb24gPT0gUlRMOyB9CisKKyAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKKyAg
ICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CisgICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoczsKKyAgICAgICAg
VmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50
LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fbG9nQ2x1
c3RlcnM7CisgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJ
bmRleDsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisgICAgdm9pZCBzZXRGb250
RmVhdHVyZXMoKTsKKworICAgIGJvb2wgc2V0dXBIYXJmQnV6elJ1bigpOworICAgIGJvb2wgc2hh
cGVIYXJmQnV6elJ1bigpOworICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1
bihHbHlwaEJ1ZmZlciopOworCisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVm
ZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOworCisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4g
bV9mZWF0dXJlczsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAg
dW5zaWduZWQgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuOworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBtX2N1cnJlbnRGb250RGF0YTsKKyAgICBoYl9idWZmZXJfdCogbV9oYXJmYnV6ekJ1
ZmZlcjsKKyAgICBWZWN0b3I8T3duUHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZmJ1enpSdW5z
OworCisgICAgZmxvYXQgbV90b3RhbFdpZHRoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAppbmRl
eCBjM2RkYTE1NWE0ZjdmYTUzNTlkMjdkNjFhYjUxNTBmY2M1YTg5ZmI4Li5hNzI2ZGMzNGMyZmFl
MmRmNWZiNmUzYjRkMjZhZTExMjE0NWUzYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAt
MzQsMTMgKzM0LDMyIEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJIYXJmQnV6elNo
YXBlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorc3RhdGljIGJvb2wgcHJlZmVySGFyZkJ1
enooY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uID0gZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpICYmIGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLT5zaXpl
KCkgPiAwOworfQorI2VuZGlmCisKIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKHByZWZl
ckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBy
dW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hh
cGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGgsIGZyb20sIHRvKTsKKyAgICB9CisjZW5kaWYKICAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIGNvbnRy
b2xsZXIuYWR2YW5jZShmcm9tKTsKICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIu
cnVuV2lkdGhTb0ZhcigpOwpAQCAtODIsNiArMTAxLDE2IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwg
aW50CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVy
SGFyZkJ1enoodGhpcykpIHsKKyAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAg
ICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOworICAgICAgICBpZiAoc2hhcGVy
LnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250
ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBwb2ludCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIg
Z2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAKQEAgLTEwOSw2ICsxMzgsMTMgQEAgdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFIKIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogeworI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBIYXJmQnV6
elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNoYXBlci50b3RhbFdpZHRoKCk7CisgICAgfQorI2VuZGlmCiAg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCB0cnVlLCBmYWxs
YmFja0ZvbnRzKTsKICAgICBpZiAoZ2x5cGhPdmVyZmxvdykgewogICAgICAgICBnbHlwaE92ZXJm
bG93LT50b3AgPSBtYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1jb250cm9sbGVy
Lm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMg
PyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwpAQCAtMTIxLDYgKzE1NywxMyBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbgogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYgKHByZWZlckhh
cmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4p
OworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1cm4gc2hhcGVy
Lm9mZnNldEZvclBvc2l0aW9uKHgpOworICAgIH0KKyNlbmRpZgogICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zm
c2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY3MmE4
MTU0NTdhZmI2ODg4MjE5YWViYWIyOTU3MzMyNWYyYTgyZDguLmM1MzNiY2EwZTRjZTcyY2ZmN2M5
NDU0ZmI2N2UxZGMwZmE2ZjUxNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNC0xNyAg
S2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9t
aXVtXSBJbXBsZW1lbnQgZm9udCBzaGFwaW5nIHdpdGggZm9udC1mZWF0dXJlLXNldHRpbmdzIG9u
IE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4
MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCB0aGUgZXhwZWN0YXRpb24gZm9yIHNzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmlu
Zy5odG1sLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0
dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmct
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQ6IFJlbW92ZWQgY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVy
aW5nLmh0bWwuCisKKwogMjAxMi0wNC0xNiAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZsb3cgaW4gQ1NTIHBhcnNlciBjYXVzZWQgYnkg
cmVjdXJzaXZlIHN0eWxlc2hlZXQgaW1wb3J0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4
cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQt
ZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0ODJm
Yjk1NDM5YTE4YTVhYThiYjI0M2NhYzBlYmFjZGI4ZjYzZWIKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDE0OTgxCnpjbWVIdGQwM05ZbntSQ1Upb0gwdnMoPWZOKXoyeUBBZURXS3tYYEtFUTErYilE
NFBNPCpBVG0pMm0pNEY2YT1hbQp6a1Mmb1ZWSkVFdVE0eF9mNVNBMW9KMFhNfUxYdllvJXJ8cStv
TnMyWFl2Izs5PWVxaWJtb3xrckBCNiY+e2t3bjUKemVmeSQ/QHZoSkplfiFVbWNBMTx2dmNoMEtL
OFY0NTxuVHxRIVk1aGJLVkZCdzZocUhDZ25JZzFAJD9TfiEocHk/CnpVY0ljTnNvYC0mKUFROEhF
MDw0dFlHM3V4eTZrbnohJU1eS3F9UjlLTSpSTjZhU1l9bCM+RDc1bzUpOTs7aDJXPgp6dXBIRnw/
enoqeS1QeG80P0JLemZPTHhgM0ptcHBPeUgjbj13fShHRE5AbEMyaGdLWGJKYVAyRXRJa2UrSEMr
cGAKek58d0EtZGdwaFE3Oy17bGczc2tBUGRgPXNSWFNubEA9SVkzSG4hWD9DYV5FZUo8aDMtTVli
b3FfIzV5eVQ9UTYhCnpoTmEjSEJgVTxVa0tvSUg2NmMyZjEldFVrbGwkbk9GcXBmXjgySGZaQEN8
c0RmcXkhUCFKTzlvND9aVFM/ZUo8egp6bDtYV1ZCaGdaOVRPdkhQJTh5ZkM2Wm5rM04kMnJkQjRI
IXgpOHRhO1k4QUhfNG49ZD1vMj9eYVhpZn1MYVktYG4KenZFe3d8cUFSWEdUKHg0YXJIT1c0XktR
JHUqckM0UWopJHZMdGhHdk4qMl9Va2d2ZDU0RnI4VCRGa0koQXoyK0VXCnpnUyVCUj1yPlBZUT9v
TkFIZUdXZ1BqSDU3Zjs+KytSeTtNSXNrcj58cmJCSjs2KGJgbXlSdk4zbCg9IVhHQzRoXgp6ZG07
P2lyc0pTP0x6YnxgRTElNGJYKkReVHYmVmgyRTdQTWVDcDswcUhtcWV+dStwUXcrVkFOKG5HPSFY
ekJNTDsKenZ3Q1BIPGNiNnw5IW4lKHA8OFNJPE0qRkQ7V29MbWYrcUppSmdzaTdxSFN5YFBxWT18
bm9OdUNtMlptfTR6cilECnpveS1rZFlTKmZFOUI3fjFCNClhNitNay19Rnl2cDhqaD1jT0crI1NP
Xn18dzEjZEtQcXhvaio9Y0JEIWtLRFZkIQp6YDM4SVNaYiooI3N0fUwkRlZTZ21qYWhSaVpyQndX
VV9+MXBgTnBhOEwyeV5wc051eClWZClTcHh8LWJ1ViQlc2IKemF4MTVpS1ZQNDNuUChXKHVFRDQ+
IUlOcXl2YjVLUkxmOT1iP3NzOzR7SFlOaGsyZi1NaVE1P09CJHtQVHk/PWFXCno9PSNmRGw5RHtP
Zj1JaEFmLTRedTc4VyNjQzlAP0B4TGxaIXUtPV5+K35ZMT4lKitwJmU4PFpaWlJBflBEXmEoPAp6
K01YcSlBWD15QWxTbkV6I3BVKSMzPFZoKjhOSlFjUVdlSztFJVpsQz1DSEZfVFVTckcpSTQ5JU59
bzdXcSlEYXQKenJGNkgzO2cpbkJERDZGVV5AMDx7JnZyQkBRXm1Ed3BaQjluaytGMlNoXkdldlk5
NG41bV54Smx4WWx1LV9AKyV3CnpASTVfbm4/M0t9LT9jS0doTkpUZmFeeTYhT21WKW0hNmt9WiFM
THlVKjtxR1A5NnArenRUbUVVK3ttU2o/X35zXgp6a2RXOGNIcVROb0dKbTcySXE3X0FmPWlEUXJJ
VFppJGw7ZWVtNCRyMnpXNTFGMEY+Qj1FUHMrb1c2WVkkTW9rJUkKek99OF53enxaYFo1Pml2VUkh
YGxRRHpsMSMqUHB1bFFiRzlLcHFQNFEwSCtaIyRsclVNWHl2WCt3cUlKNmtOV1YtCnpebHxxTSk5
anZjdGROY0VhYGV0Z0FCa2lxU0l2XkBIS1JDVk52YWwtemV1YVB4a1N6elY+ZDQpQ2E4eEB5IX5k
LQp6YVElOztlOC13XitvbjdFbDdedHY2YzJUVUY8azg8PWhOLW9PY2FDKng0S1Z0PXZUZzZaUlp6
bUZzKF8reFUjTXcKelcmO1ZRdi01YnxONVAkRVdtKkYySWQrUkg5cipiV3dhfV5lKCghcjkmZVVl
YiFiZXxxPXIzSihqbXNxbkh+T2hLCno9YnFsKXZxc0cjQXhsKCRfNmxWIXVFZntPSWx+emojaWRO
Rm9VcjNVMUQpbExHX3AjUm5nU14rPS0/dmVgcFp1bQp6SkQybzczWT5tR1ZAPUBDb0g9NztHKntK
YShmUm1IOGAtQzxOQGI2S0xgPj9YQmtnVTBaSlQ/I2I3emZXKjBfOH0Kej1sMFBGWDEmT2lMdTBP
MTg0RkMpaHdWYk4pKmZCK2I9TTNHRVZSZ0JtWDdlfURsTTAxOExIODFeS3Zgb0JmcjFUCnpYaik3
czh7SENAJVdfRSVZMkR7LVIyP3VwUiopVXdTSFk/Qj9IKkdRanclIUBSYSgpd2IrYVVNQSkpaWhT
KyMobgp6bmlARDxrTilTRV57JW1NMiNJOXw8SU1nKEJ9JjxiMTllPXN3MSM7e1I7T1phSGIqeHNG
KlI7RVV5P1YhXjN0OHAKeldRPE1hcj18Y0RYdytLRlEzbkgocHdfLTcpeSkpWmswbCZGYmphZ1Bu
eGRNMlUrRnJrYUJhOXpQcj5HamBLcThZCnpQakV0b3d6YiRfN3Z9RjBJVTNKdjR+I28/PXVscyY8
TD0keFR1MkN2V2dpR3llMGBNdV5KbHcxQytHIV5HLXl2Zwp6M0t7RCVRJSZYKU1FdVQ1P35jZnNx
QyFCfW9lSHJoVFR8bz94UWpMIVkmdXBMRyp7MVUzaUBydyZnSyR3bGFzQ1UKem57O09xM3c0IWZI
QmNtTj87MihjJislPkNRWntSa0dJdF83RnZTcVIqX0BfbTRZeFllUT8maHluWTY5KDNWe2BBCnom
TGM2fHZzUDFgSmxTalNLS3l9KXpJcHczaU1USG5gMkY8YW5hUEJObTAxU2V3PWhScSN4P1pQOWVE
Iz9iUitrVgp6VEJaekNkU3trLWRZLSFhSGxmXjstVXt1dGZBPip+SjBwIVQjO2hqMVhYfkFQU05K
N0V2UEQlTCEyK0FvaFRGVDMKellFR0FBMmg9SGtEal9kUlMwS2JURU8oaX4yX0sqWFdIc2xmOGFq
bSE5ckR4NUk2VHJnemMkRGNoTkhKRnR+PlE+Cno8YW9OaDU7ZWNwQlA0RjE7KTsxfGdOPUsmUzk9
WWg/aTI1aFQ7NF9wIU8pS0VDUCFPdVFHSEBoYl88Iy1yJVRVPgp6cHpUaGs9Kn5RUWFwYXRgcWgo
KjJ2a1g5PCtsNT94OWhJNnRldkk2bEVeSiVIKXFaUFFDWUdHOzdaSDx1aUt1SXoKektnNDNfVENg
N0lhNHl8bEhxRlc/RSRtSTleUkl+OFNFa3I4TmtkeUY+P2lmTzRWN35ucjRPN15VbmZMTno1LW03
CnoxcTQ4fihYIU5tYiZvOHwyPVQwfiRuRkBuIXJRZlA8a3ducEI/NCVJKXheb2ZWMjswdWR4bjNZ
WE5TUj4lTkdpVQp6YGMxcyN6JiRoMFg2X1FRKzl4O0h4QylZeiMmVGdjX1pncGx2RyteNWU5WDA+
OzVPeDd0UDxnUzkwN014dEN4cCEKem08Yjd9bz0hTWI5VE52QWMpX3dPSzJ1eFUpJkp2UCNLeGV9
a19IM24lY2lnJilWWDtjeys2fHg4UXUzTmhvM0E1CnpJcipMX25YYXp6NlRFdTVhcGt+WkZOMENZ
UFNIfi1nRV58OXVLclheclJMenVST2pJYG0pZFZ9MH5KU2g5bmRVJgp6JlNCN21EXjw4YllNUGJs
JERlKzI5XlNmJjxBX3x1JkBafjdReF93TDA5Ujk+MTQzdVpzLUBxXnNkKlVmSDs0ezMKelJVfkBu
TXR5QFdDS3ZxYll2MFl+PkZGbSlEeUhPeU1iblpze3Y9a1VCTnpGezU3V1BXRU83eTk9WF9nK3Zl
ezNjCno/bFNleCEtcnAxTk1+QT00aDBMU3pURXs/QFBaMyZEYTJfTCk0SkIwKSo2QExNS15neDty
WGskI1lAYm8maXc4Tgp6WU0hUjZaRHkqQ0hXaE9vcmxeZWZsejZsMEMzYTx8Jnxse2JWcGREKl4y
bSo9JXc8Y192WlckMSU/K0F4a0t7QygKenp1b0BpTSFSczUjX0h4UXhlI2kkQFEwNmc3RE8jZzVS
Y30/ZWsldX53RnN1KjUmckNXcm5gIXN1QGF9ITEpSDgjCnotT2RsX2QzTVBjeytMZzYkVFRnKUtW
alJONm5XfHApNmx6RXt2fGNgdWtFPThkU3dwZmhqeio5KlBRJGB5fHVufQp6QkJXe0tmczgqdE53
dWtlT29SUldyTVEwPSR1ZjNxX3c7aE5ySyowQCtESl5kWTgpPnEmOG0lWXpjYiZzdXp0Ui0Kejxh
dWZubz9xYVpxRXEwNVM0ektCbndzYzRHUVRSRD8+RG9SdU9LK2FEV31WeVJqXi1McXVqQX1DaHNv
ZXUkJm0oCnpQSVB1LT8jb19Ne3k2bkdnVjZnbkhGJlp6RSZMSUlCNzEqdTRlUnlsdH56dzN5NyMr
QlJqZkVaNXl0c2IhMktTNQp6eEE4WHRoN28yZmo+SU03Qn5BTmkhb18pKU9HUzlmPkpAZ2hNcXI/
K0JBUj5DRlRfK1lDPSU3THloI2g/YkU+dDkKej8zTUFaPyhSX1Z7YTB7V0JheG5vM0NwaHpyIz8q
Xlk0bj05WFFwQnpgQWdodFdnYW9qWUlCODU4MUBSVk1QKyk9CnolMll5cztkRWpgPXNUVXNyeEl9
c0tsdzdOZTI/JnA5WXBIeEYtbnkzTV4xZXlYPlN3P1RWfE0lclQlakQ2VUAxIwp6S0lnemo0UWp5
ZmVtSlBXM3B1KFBoNl9KUEdgfnFkP3p1V1FmSTRFRzZHKDdnfEVkRitsSm9nTyR4R2RJOVk4bCMK
emMyUXcmcU1CIWBRRkZiKiZZWkE1TkJILWhOSShhS3xKeHZWX3Y8cmJLa3Yza2ZMaFN9Ujl2PXlN
ejlLSHlFQD5WCnp4NHYpLUR+b3o/aj4yJExeWHF4JCY9NDdQVShtREpYO1R8Rko1KEY7Q35EJGll
NDdYMkpXMH5aTnsoKG9Nelp3aAp6bkgyeGdwel5xZmRKekd5RTBQcDdRcFRBVmlgfVclNW5UMUsk
Tk9LdWl7SDN0aiU3aCNCWG16bCpzSmJ5YWUwMU4KemtCUz9WaFFjbj5XPjlDbDNvVnk5Z0lYNSl5
a19tVz1QJD1SNzVFTXB2ZVhxYmwlMXU7V0s+UXQtTyg1Uk9IRjIxCnpDLWRoXit5I0Y2aT8wc0gz
blEwMWpvSEF1TE9YZVdXZ1cyLXItREJHViUjYnBHYmZwVUU/SF5sRlReYUtOK0dKbwp6N193V1ZR
XlFzQzdgJDBga3VKSWVObEFpZWppM05Ha1AzeGlXWXFsajtWSmZxYDw1dlE4RCZTP0dGNExARTNk
WXcKeihQZ2NsbmJvUjJ2cEpgblJiQWlNYGl2NHJuJkE1SEUyTyN8SDcla057OVBebTx4PHo4I3FI
fTZZVEFmd1Boc0VXCnpiWXh8cF4wcUxpZStWemtpO0k/eG5KWlRke192YDFFYitMPD53OERrZlox
ZlZtUkpHQjRKYX0hMl5JUX55NylmQAp6Wi1iXzxkeGxAMkN3Nk84IVpRIVFkSytlcWJaKkg/fDVT
Z3U9VWZ3aVVRK1Vgc3l9fmQob2lOeEZHOXM3U09aQDIKemRNMDVidnA8STBEMypEM0lGOFJqZ0Zr
RUxxOH58fWB1Kj1lUFcyUjd5SWxZTUZHc2oxWT5OcTU/KGR2UCQ+VGowCno7bihiRXczVzNvQitJ
WkpSZ1JiXzdgOyMyWD5zS3VBKWhZZmF+MHNhd31EflBVO1QyfWI4Uj54d2M4U0YmOyZFNQp6YilD
bn5oZTFAe1pKe1M2cS1KUHdFVXwqbjwoYn4meTVWeVVrQEV7TEJ+bFkydSp7XiRofHc4blp9UyFN
UlR9VlEKel5PPztiQngxazZyUHAkZWZGRkdrQUppZ2N6ZWwoUnN6Knc+K0opQkordVFRZzxvPWlo
VmZ+Qj97Sjszcl9NfitDCno8Y2FOPnlgbD0wd1E2MFFvMjtQNFd0YSt2NUxlalooWnkwQG1adlZR
S2Q5KChAcHJxYCVBZz5VKjt5TWg4TSpOTAp6JlpKZClPMzJlNSF7YU5+TU54d19zKWtEc0pCJm1e
Zm1wO3c0WWJ4RWhqYzh0alJST1h4fHJiQ1RBemoybElUYnQKejlMZHNQciYoTHZ1NGN2NlV3XkNZ
UWdmMWVaUXZfRj9xZ010b3ZRO1JKMWJWYXBieW8yLXY3RygkNDt6NkJuZHR9CnpHSFlZTHVVOUVU
NzY+KGtgbVQyaXVndEQkRVc9U08oeVZaemIzTjRESzMjZTRpWXpIeXU1NFR6SCQ9Y2lVOWpvUwp6
d1c3TExEb0RuK1UydXlVUGx0TlFzeU5XbTg7ck1gZSQ/WVlULSFQUlBITFJWPW1MI2FKdXdMSVko
USNRZD9Ua2EKej42XjQ8O3lHTCZrP05VaHBnOWs4JiFPaH1XekBMa09ZaWpQSDlfcExQR2cxU090
PExtOXpzT1lKbldjO3tyPnU/CnpDcktXRktqcCNXWj9zMiQtVz91RXZtKzZoR2NpJldRYn5KVEsr
YCpebEcqU3d4JSFsSnQpaDFAYEZBVDR3VV4oWQp6Tm9vP18mKWZSej5SPSRQMjF6IStvZ2BwR0dR
ek9wajEpNE5vVHxsJkoldVFWIXNoIzF6X31Md19gTVUjKV41MUMKenZ+MEQkUTVtU0JxRCN5Xi1h
T0BZaV9KX21OQXl3ZmEyVFV5bSk2a3g0P2k8Jjhad1VBdWEzMU9DSDJ3endlOUBRCnpsdCl0d01u
cWQzQjNWeSpOOzJZdGIpbk49MG1ieU1jJFN7K0tPVnxxWVNlfHpRZVhhRj51TlN9b3toS2J3cm8r
Swp6RkE8bTFaUWh2N1FAe2VCOChWQnNPKlBOZkppOWhPPzlYKWZyJlAmTntIQytZZmkxTHJjSiRH
Z2FLfEJZYUJ7b3wKeiFkZ1RwI2grMkwoJng8UFJJPnNXJHludW0tUSNWVV51X1ZFIV5FblcqPl5t
YyFSXkpYSE5LcEdlWVpWZHJUNStUCnpWRVAtQmgzU3QtZ3cheUBzKmNSIW9iJX1aMkh6eDIxRThS
NXFjN2BLY1QtbFpYRmBpeEQ2SSo5OWpibGUhZT41Rgp6UDEyY287NW8qbEUyTV5XNy0qcWFfK3A2
QFdWakVjLWNTUyFBSD8pNloyOW98e14zSm9KPVRgViRIQClmVElnfUEKelVLfFpuRTwzfW4/SFU0
MyUmVVE0OHh3OGlpRlVLO3NpYHNad1N+cG1kUjRYPFV2M3pzeWY0S3k4fjslUyUpSihKCnorKTla
PDx5R18xU3xDNUlmO0UtYFB5e0VDYCtycmJ7YyFJQUFhP15pZGtgV3UpWjs1VzMkLSZoenFwLWQx
QGVAPAp6RmpSNCsmMTFIJk9idiNxRz1zTU5IVislOCt5VHUjODg2QlNleHJEe1Q5cHdmQ1ZrPnFZ
fCEoYjU3JE5fcGN+NVMKek5hSnIqPl9rPjxoWDU+YiM8QV56bVg9M3pmO1A4ZCRwZWd6YXYoYzNw
amJhQStoK05YSCFRcG1FMDEyOGN8bUt8CnpWQkZLYGlwPVg+d3BNSEImeS1mYU9INGtYKWUzMz4k
cWBhOTRwJjZ2SlVpPnB4TzN7QV9GKkJQQ2VrQyhncXp5egp6SkV6OGdTKXtfYik1ISRFPl5HdiVO
QTlVe1NUc1V8VjBHe2E/ZE5fTVhPZCZEeWpHYzllcVVjTGxTVTRJPG4mfW4Kel9tWmk5QTJBcHxh
KnIzT0koZU5rPnRuX2tecVkwelk/U3RTUnkrVjktM25GYXZBIV4+ayEpWGZoMCowYns/NFNnCnow
ZWRXcmJkMXFOb3F9TikmZUBMJj0+b0s3K35XTl84ezVuYlRgKVRHdHFVIzZMI01tZUtPRHZHbGF6
IUN6QWhYMwp6e3lRfkxKYVZNeyZuVilfbGNzN1FlSm9yO0pJQEFqOGBvTiFafF5RQzQpTzJIb25W
SHo7en11PV9TVHBJVjc9RXkKejhneGN0bSlobXJfKzZQemQqQT5xP2l8b2skdkVOb1JnI1FxM0tg
R3c1OStec3QwaGFyZSs9MylINmh7Z25PbSh2CnpiVTdJcTFgJFJMe0diblFzeCg8ZXFDPmV5aSNR
KC1PZVgqRjxIeSg2ZSFPcEtyfj8jV0ZDcT9OZ0t6ViZTYUY+WAp6Y1Y4RntSJE1XQW8hYUQ3JCU1
e1lCOSRhWHR+dEdINioqWktEWXZ7KVcmeyRwKmF9ZFZ3fnl1fnBxR1FuWF9pNHcKei1RMyp0QCR1
PEArJVdwYDdYNUlseyNYN0NRdTVnKD1AI2hnPzRKQjZUSDVqWTJUJXtiKiFKMGhFZ3NNWXEjNUkj
CnpnfDspM3BwO3RZPiQmb0lUT1c/SFZSezVFbEV1YStvWWF5RCE9YSFaZ05CMFdFbm5ZfndXXntP
S1JpNlg+UjZQUQp6KmdvaEhRVmd+WjhndmdkYVpicFZHTi1iaFVxMTUpdzdlN3t0YV8raW1OKU51
az1vSjhOdiZwLV4razJaekI2dFgKel9aKF45bHNTU1pKKG5za3I/Q0ZwJkw/bnthP3JARmgkSV5X
TiQ/Tn0pJmhlbzAkeFhkM200eHVYSiQmc0RHM3FXCnpnQjM3TDloemRKdF51RkFSY0IqO3VINFgl
NmplVk1hO0xheHNXdGdQdyMjREFkSnUoZk5ANEZRWEZ1fDcqWD84cQp6bGJfKWJPODhBQHVSaSRT
VCh6Z1JZb25BR1RlOStDRDFhWnZsak9QYHp7WUtAQll0R2d3bHlDfW8odiMxRE13aU4KejROYUpH
QkBVVjk5ZStiMUFIZmdBRGolYVpYe29DPktmbkJQdGZFYU5ObGRsanIxU31naXsmY0hEfn4xYyRJ
ZDExCnptJnlackBDMGZ3ZXYrUGlLeFVfMD16RFJON155JjxJQUxuRU41enBUSmFiREAoJXV+KENM
NmF0aWt6PXohV055Tgp6dTFKbSYqQFJkTzJKe3gmMjckclF7ODlxejV9ZlZTKkswY0t2USghaktX
bXJqWVVeJW1zZmVheDRscFRqVm8zRyMKelMhZ1VSIUBOKSptfW9yXmMpXyhrKys2WShYbGRLXiVq
dUpPMWpBaT5QYWJxNzJ2KCtaVzlDaVpnRSVJWEhzfmc5Cno/NCV4QzB7Qkc0YG90RGc8VT1Ie0so
SFd3SHlVNl47fTNKWWZVfFoxNm4yOWUlbWdYITlMV0tKWiF1Z0tXKEdSYwp6cUl4Km94c3pKdU1V
JWo4VTd2d2omSUNhMU13aU9QdU1WaFJ8S3FuRlU7e2A4QjtwazkxQiY3WHArQCVXaFdnQk8KejV6
WTJ2PDZAKSNfK2g2Tkk0TkJxdURYRDdoOUJjVHo5bnlKNVdSZEo+e2swTT9Ifl9iWHVHYlhoUD5Q
OEdXUF5sCnojZDk4U0t6cz8qJHNvUT9kQjN7PXFBaFklVG0kfUQrVFNycXhhUHdiZ0BZKj1JYFBv
RXBnbWcpVCFXQzh3PElqagp6KyE4bT5iT3w9dW9SNlNvOD9GPnRPMnNgUitZcipUNTJ2cD5sSlpR
YD9mb299biN6ZnVEYmxOJmorYiNlNTQzMy0KekVGTEFEbD1QSkdCSjA4ZW1+bEAobWU0PGA/Q3xg
YyFQNDdQKD5GZEFLTSRrOXgoP0slUWM4cXAlZnVHMl8zUyQhCno5KShNQyUja2pRe0JtZnBmPXVf
Z1NgJkJhYG9uSCFlZkklP2lTeHR0Zz5peVM7JSpEPXVYOTRYT3J7ZUtyPHxgSQp6M080SmtPRk4k
NVF9XkQ1OVdHaWYjTnJyZyNXc18waHk/JkcxcXRWXjNvZStYOG12MHByKU8mZ2t8TSFQTStTbUYK
ejw5NlJfcGpsdEhReTxmNXYhS2c/OylWRWQyOXVQZkB3OTh9U2NJWCFwLTN9dSNBUWlzTCU9MHFj
a05ke0NZWXJPCnp7aj0xNHQ/Smd0bERlVVBvWW50WG5nUSh7eFFCUDEtfEIyPUZSPkA5QFAqJmtU
T24+LUxSM3ZFYCVDZzVBOS18VQp6Xj5ZPHdgJWl2PEl2VVdaM3loJkdibSU/NjNgMDItTSZBJmxj
ZTRYbiM0OzM5QCNfJVByZ2V8YXpVbjYxUD0wWE8KekYpZSEtaXRhPShWeEFfUGhYJVA9Mmg3UlpS
OGNVWU1LZUtPTz01ekx5P3kzOHRZflcpMVQqKWYwPW9BVjljNXd+CnpzO2VHMmlxTlVZdz0jeEZT
KE47M3gzUSZmcXdrSnVkLVo2VTdieUhgdXFKJmc5Qj8jYzdMY1lLYUFUQHB2Ykxyegp6MzRXSXhY
KDlvKTgqWjBia3gxPjFiN3AzRTImbHQxY09BJk9XPjBFPmEqPzQxSHNRP1AxZUE3WlhBRHt7TU5f
TnQKenRXMTN1S2ZMemtqa1FjeSgqKEZeVjd9ZHxncElhUGFDSGhGcDdPUlVfNEdzKTI3eTJqQGBL
d342Zzc7QzJmUWhRCnpNJVF3fDdLMCRMQTVGRmszMmE9a3YqcUs7b0NZcj9RNXtaYzsrUXQ4S19M
fFJIMyQ9cV92R15xV0t2SiQqRSZ1NQp6SV5WaEVLa0c4aF5fTUkzT0xzbk0+ZjJzZDx5dmI8MkNg
RzQ8SEZIKFlLd0xAdDxffmo4flZSaStrbD09bFRDR00KekVuIXgpdHZIJiFHWmBPSWN4b2VieGtT
UCVQcSsyPyVyM3AmVCQjMVQ7fDFhIVRCMkpeUEJSdytOTDY7cXt2OSpECnpDRWN7R0hkQCtuTDFT
TzlobSZyMm0/Qzh+LXV3TiNJMmJjdmF0fSEmYEZ3eFVgfFNmc2FPd2wrZlIpPkZYVGVmUAp6JTFf
WlBVYnF6RT8zMFN1cT1HMmtNcnk+Q155WHtXZm4lOWprTF9AXjdOPUVrUU5ydF9fMVA2PFA4eDFA
cmMhNU8Kekk9RE09O1c4JilVMmFhMDM+dUE+WEAlWSYxMDlsI0NSJW8yKD5fIUk9N0NFNF93Vj1F
U1JCX0lJIUQlRWRnZGh+CnozeyQpTzteISRLY3c1aktWU29HS0UyZHgwNEh4RigpfkV9USFGaFYk
TE1lSkRpS2NHMlZebnBVS3RuYUFmTG19Rgp6VjdkMispKmh8bFEwb1RhPUIlV284YkglR1Nrb1JX
UEkqVkdVNzM+PDtCfDViU1AxMHx3OzBORig8cz4tT3U0JmUKeiZiaW59JEpmbWNacFRQZjE2PWdD
T18kMEpGRi0mWikxT1NDbGJvTTYmUV5rejZBNjYpREZGQ2FrLVFjZXYhKjY2Cnp0aU0/azJBSCtD
eGswNFUhYio1e2o7TDlrWF5KMF5SIVROQHJyX0RGJD5tPEo/YGY5RVYxOUd8UUImZ0p6WEBQZwp6
d3klN09BbCV4az1GdSFwRTNGLV8+QFlsVk9Gcjc/NXp4KUU/dlNrejxOK3hZa1YpNytZZ2FuZ3Jj
eigoPHl2QX0KeilYbzlocEJpdDw/ekY/dnshUFp4aGB8VzBzIVRBQmtWQX5objl+O0dSZ0d3STA7
V2ViP24mZTlzbzM+fWIpWSZuCnppenxyOVRyIXJFbEdCcj5qcktxRSZmTnpsYTc9d3FuWnRsUj1x
MiYkZj5QVW1eRWQpSHteRHVyWHBXOTAxezNUVAp6aDVgNH4+PUFITy1yR3xoZHZhJnslaH4pSFk5
UGxvJngrM3ljQ1I0VjFZZlZOV0gzTERfK31vTzZzKEUqVVZldWAKell3ems2PVZ2YHNzJFVHNEBx
V3c+S0J3aipqTCtAams9SkY4bUVVfUc7bFk9el47V0doPFEwNmpgPHJHY0A1QkctCnppaT5wdzRw
Tm55MWVgISljKStuPWUtaWYjNHhFKWJacjk5Y1RCVEBqUFVVKzdrJSp0Mm9AfiNTKmB8WmgoP2xM
Wgp6JExRNiRlVT02KkhiZGNxeFMqSDJ3Mz09MFU4Umc9Z04kQkJYQUZ7REBOWHp3c0lFS3p6UlBg
WSNRYEFUUU4mMTsKelRHWmtQQFA1VXtyVkh+KHtkQzBCej8wS1BpTmVkOXlPTGxNSCtjfHhvbVBT
NWtMfD4rZS19SUZzYz9NSWAjKjhHCnprRkAxel99Z3NfKGdlO2ZWWkZBPChwVSRSZjQ4SjBHLWt7
ZmtSenBGaDNrPSFKc21uVTIzaWNJYks2I1RJa01NXgp6cVNPNVI2fnxsaUdybmJ6LTQkNFgkNzk3
TXEob35Bb2c7YHRKbUUofHpLMGskSUt7RX51VVFOJGFffn4qPz8zKVUKekVxWnhzdVlUbHBlS0Bw
b1V9NCVIP3cta1YkI012Z15fJGtpK15BM3oqaEVBMnE2X2d2UzZUSCltWCZFeVE8R3V4CnpVYlJF
WEAmPEwhK2kmZG43P0I5RVJFZEFidyQjbzZOUk92czBYTXBVQG1zLSM+ZnFGQFFzb1cwejsjM0Uo
dFleOwp6VWwyaTckOFJuSlhfcH1hKVQoV3AjI3wmaGQ7dmt2NTxZTTAyX0spYUhzXjF5YTxhY00m
JDVac2h1PjRiYHU0I0sKend0YF5GKmNheGUmKkcrUSNJUzhZMFd5UGI8U2tYQ141TGclZXpFVCF7
TTtgU1p5KC1BSSRRbnctKT5aMFkwSWIoCnoqan1pdXVyRzU7aG9aWCtiPlQ/dWEwM3xYc2dLfHlj
QjJsT1ZqMFM/O0VhVFVgVSlyQHBLTDgwR2lgTSFxKz1QVgp6YlJwUTBCV3EyV2hSfmBxUjU9WWxv
QmktLUd6amVWJUA7Q0Y3dVVKbEwkJDNwZWB4RjM2QDVQKGYxQnNQTVpwM2AKenApMHRZQWckbXN4
XlZLe0t1STNKRVEwdUY4ZzVlNkRiSGBsd3B+OUNFSF44b3I9VTJyJXN+bTZLbTMtczs4WXYqCnpq
TDV9Y2wjMTNyZHhiXzdOX0lUbksyVT1JPGpPKHNvRz81MV9oSW5xJTNwLUh0TTF4KD51dEUoU1Uk
PU4rKTg8NQp6S2ZjSUczVFJ5RUwoY3lZVHYjbl5yVSVIbjtnYHFsTnE0fHtwZDxQVilGPEtWR2RH
KSZvKElzeEFxeSZ3S2dmQyQKelZyej1RPj0jNDMwTWJwZDA5QkxjbG9xPj5mRngwX2NQLWtxPjI2
WVN0eUF9UFhPTFhZKyYlfXxfVUhqcndRUl4rCnp3Zk1MVno7KU42WSZIXjwkWCs+QEJEPkd0Q0Zt
XkQlVTluJGEtYER5bHcqSyhDVmx0UXImNjBsbj47eDVxd3V+RAp6OUw8Z05rUFl2QCVxdmdEcE1h
T1kyV1VXMnlxTGBWI2VtNm9JYyRLU0pBaTJDakV1bU1AUHUkS288WkJ9Q0FUODIKemdycjxUZzBU
WD0+TE1CNTJTcFgkTjd2U35hRDZ7VEBDaEg1YCpjMSomTTM2aFZURnpKQz8oT2BJPi1kMD59NVpz
CnoycCRrWjkrfForYV9mRHxQNmNfa1o2MDduT0lTTWllKGJISzQlTkJwQT8rUyExT192MV5Ub2x4
bntfM3hXZUM4VAp6N1pNYFpEdF9UKShZX0Fjcyk8PmZrMm1gKzd3RzJ7XnllSCtCLX1Pd1ZMRXlV
dz5ENi0hJXclekwwXjFNczBVRHwKejFGcCFVc05adklvcmV0R2UjcChqcExyOEdyb0R5Q1JhXmdt
QFg0Z2Uhens+ZCNZQnlRdVpqVDBpM29xZlUwcSNBCnpnSzc7K049cDB9VTZiSE16U1dKR21xbzJB
S0htMyMqQDhTNkBoI0EkcE9YbV9yfUF6SzEkO1hBTk1BfXlCQ351ewp6I2NHXnNAOSY7YlZvWGBg
c2tkVFpHSjZPb3NROHgxTEYpPFk/ezY3R1BlS2RWRVdTQ08/SUxZJlE1MD5mbXI5MFkKekdaSHhD
Ny1WU0lAQUgoayMzYCRDbkExOF5mayRvSi00ejB4SG07VnNIUCRWKGB1XlM3ZFBYTHpVYkUrOWRh
QHc5CnpLZDt5VmlvcSVEMm12Z0JXXmk5K0dGYChSXjxqJVpFb09DWTNhVH0hK1RWbTxPb2BvQ01D
JFFyVDZpU2V5JHBkagp6aF5QSmE5SUNVcXAhWiV5MzgjfGVUN00zLSRQQDVUJmFQRG9jSGFZR3N1
RUIkZFVNPEJCIV5BQ3t+QSUhP1l0NVEKemViaEIobF9HTkZDQzRZdm1faFV7dWwhSSEod3ErWDNq
UGUxNGlWWCNkSHdePmwtb2RQXnhxayo0V1RxeHNnRyNXCnpoO3NNaDMwe0dEXzgzN3g3RD1ISmUq
fT8xQy1DaXJYUiQ4U0RybnhVNUA9cX5VeCRjJFV+QSpKZSlZQTEzZT1KSgp6Mk5VZEtPal47U3E4
aiNTJihlc1crenU+UTFWU2dyOWZYclpnX25zLUBhclJMNSVXV2xVQGVWN3NEYX4hRTh8ISYKelc9
czZzIUc9WHtuK2wmZVprbk91eCp0NUlCKE0kYEo/QGtZU0ZebXZ6bmVtRyFuNEAxVk84eHdURn5q
RD4ofjFuCnp5PDAjaGMpc31ndm1ofTNXcFkmK08tX1U4eHBWJmgrJmpWMkZ3MGNJUyY2YHJoPWow
TkVWY2UwVCQoKE9tRXYlRAp6IWRnOG04UmMhXkVkMUkhNVAhJFdyWGxVQmc2IysyZCltVHE8SEtJ
PD4pKCQ/NyM8b0NzOFA+fD4tXlBsPEYpMHYKej1LOVIpaE9OYW1OR2oxUk07O019TnJ+cSQlQUQ8
TVBLPXdtWigyMmdubjJiQkkpeEslNGNhajckeEB7SUVaYCZlCnorYWdkTmo+YVh9R2tSWUYkI3Qx
KVRwUThyc1R9Jn07Yy0oIUt8V1B+QHFEUmt5ezVGWCg7a0VsQElgeTVFWkVYUAp6aFJ+cnlhMFc4
S3hrNm08RTQ9YHkhYDB2YmUyREBKbWBHYEpsTXJVPzV5ayo9c1F1a2lYYzc5QVc+bzsoOVk3cjUK
ej1GT1hsX2AhQWlZSHZ1OyhmNytqWm1DemIwcFFfaldDU3RIPyghZ1pZWXBUOCRmTE9ncDtydykw
R2klb3MzdTRhCnokRT95OHVDdkFYJTVlMWozS3MrTGVPLUk/aWBDXlJSUlpManlNXy1PWC0hcDdm
V0VzOGZ6cFg0RnFyN3k/VWJgUQp6MkZ9eWhwbVVeQWQhWTNJRFhmfkpFIWw1Xmh0P00kPG52aHVD
YERUYUhONGdYcDY/IyVOWU5oOz1AMHpmKUlxQ0kKelAxaFFDVV9MTTJEQT9yMnQ8fGZlZ2J5ZkFE
Ny0lK197e3xmUCE9e0xud0UwKk5jc1hLTyY0TVh6QjkxMnFyMzNpCnokS0I4a1UxKmV4WXlXV3Jm
QDNgKjQyR2tTd1piYVExOTAtUDRqbyM3MFd1OHNEPHIxQE8mYiRFcHhWJSE0SVJXKQp6TCNgSnMr
P2VifUx9Rz5FbyhENH1IeHhjN2dyQXdlTlZnZ14mKFdvTDtGVCE8eHFGfXY/VnRgVEN+JHU7TTE3
JkYKelAjI3pXeipfey0lUVIkaj1hMSV1VDVhPGY8PzExO0Rnc2lBZyluUH4xT2JDIWUqWVZEUXpZ
YDNQenN8ZlJAPndOCnpyYns7M0JsPyUxN2RYMGVNY14kN2c8Uk0qJTBlRlJALVIwfTNxTkM+WE5z
YT9NV1AoRDBvKW1NQTgxYGo5ZzFXYgp6KCY/dWw3bDtyVT93T1pPdz14QVp3PHZeQkFSZVh5Rk0y
Wj0yOy00aTk/JUx+alpfZDFXakw0KWR9fjtUdXtMXiYKeioxeWBwTDQ/REVrPCtiR0tYKHJ6e2t5
cCFOUzQ3bkQ/bFomR0I8Rl82QFdvRz4qKTlkPzxXYnYyWEc3TlhsM0pSCnpudzMrUCYhcmoyeDBv
Pk15VFFJX09GMntQeCR1NylBV3EoeDh4dTJEI2xtbitSb1lmQ1RDcGh5ZWxvWWZMe0BZYgp6PWAk
MlYwMH5mcnkjbmBEdjlldmVjRUprSEVyLVZGdStXKHZNZFM/Rjtwe0RIUzVlckh2T2g0WGtediU2
SGEzOFYKempldXNAeWhIMDEkZWYtNlo+VkxGMS18UCZfa31XO189QCF8ZDIlcUBnTCpDKnc/SU5K
ZT9UanMpYkU7Qnp8ZFp9CnpqJmVfUmwhOVFMaiFsN3h4ZnV3SXZvK3QzKTg/X19eTHAhO21WOXFv
dCpmY3hOYzMhKD1FamEhej9jSCQ/WDlsSwp6RHk8Qm9yTGgrZ0NXc3t8LWRMI2lqS0tgVlpDTHhH
I3QkRWZuJCV3RHY0KSs2YDMzKEc0MkpOc2M9SmY4a2c1KjEKejNjKkN1TkkyRHc7WkRHWmF6X2tT
cD1pLTYmQ2UzQmQ+Q1o3PE1QZ2IpdFM4Y29KVzhiajReemY2R2ZAT0I0Pll8CnpWOXdoVTUmKnZ2
ckg/UVJHTnphdjcpKFhiWFZVK2JqbTdfOWs/fGlzMkQqWDdNRVlfMmBHcVpITTV7SXx7TE1FMAp6
K0U5Jkpmbn1hTkdMUlo/Vm5CTilDK18ldzcjOVN0b1ExNjtuSiE7SkZKSX1UKXVOMDhWcj9iO0k5
T1I1MH1YIS0KelBLUFJHM3d4SHJGNTUyLWUhTnJzNHJDI3psOUZoe3VlR3txcjdSJTx0dk4xcFMr
cHFANz51bWpoKiZNdWtWeH54CnpGTFowaCNOYW5HWSVoRio/MVUzUTB9bWFWMFFxSTkmb2VTZ2xR
OztPWUN2JFVaN3BVSVFoV29ITnJROEsqMm9DYQp6elo4Z15faC1YI1o1Pz93di0+VipodTNyJHZE
fms+N0BZM301YyZDRG19d3t7Nz9RKz1ua2JCOFU4cFlfZiN0Qk0KejZiVXlzSFdJXkN6RSUmVTk/
ZDFea3dYfkZBTlowMiVoUEU3QXpvV081YEJEVGNENitMaUJ+LWskNSFtdE9ZQW5FCnp1ciVFOExR
d3s8RUQoUig0TVpaVyolXjR1NTdxTUtEbXotQ25tcXZQZEMrT3BpWVBjdXpLSjwmMmx7cTJoUldl
fgp6b3xUaiZmentYWUIzX0xCcW5KdjlYcDx+YmlrKDNAPjY1JTBUZjsxWXQzSmVoTDIkJmF1JFEh
N3orWCQxYWZ8JT0KejlZaWJKIUBIZygyIzV0ezRKO0tvI2RwOTBjLURVNDNrOz9xcUltTllGUFEl
akZDX05FY3RhMmxEfTF0bXQ9PXhzCno/bT57bCgkUzd5JkVgeXI9TzRmUXo9TGElSzE3Xk9mZG1a
Y0w9PG8tSD5gckUrWH1BanpIQ2lnQXtiaCYwTHB0TQp6Q0RHPjQ3OEAoe0pmSjBtITk9UlUza1N0
dWl+Pk0tO0B2OyhsdHtAbmgtblFaQENUPCoreWtzRz0jNjR3R2ZFfDMKelgmQDJnSlJNQzYpYTlr
SD4wPyp3QWdNX0Y4d1MzPzt4JFgkN3Y1ViEwP2JTIUJlWUQlRUtXd0pYVmlrUnZiVUUoCnptNCVj
QkBFPz5CI0E3TXx1LTFWZ2V1O3V7JGhEMU83MCZ+N0EzRFl3SUJDPldpNi1+SWteMU5yS3A3a01V
OVQrOwp6cj0oZms3b2w3TmJfLWlUdmslRjBwbWF5aCphfVk0ZkJXSE1IbFJoKVB2V31JVUxRUk8l
cXhZa1N4ODhQJCRtOzYKelIpJGNqaV8jdU1oVndSaTNkaGhVOXlseH5naDF8JGpoWjFlVnVQdVdY
aTM9WT03QXA1UXExUWFKP0w1JnNgeFc+CnpeQi1obStafHBvOGszPXhxeiFqTzMwNF5TMWQlV1o0
RFZMN1V4Y35AQzRhbVkpaV5hRWczP2c/RE0hcFFuZ0xEWgp6NHhoVnw7TU4jQHd6PEF+dkpvdWt2
MzQhaW9zZjRyZyhtdzN1eyNEfXtKPXx+QnhpcEhISzFUNGAwUEIwPH1kYnIKemAmWjsjTkpfJTsp
YkBedmgzQHB6eSpqfk9YIX1jQ1p8P2N9b0h6Q1dTfmYoPDVPVmo+NSlfUH51TXN8UEZFe2BiCnoz
VzZKQCElRThWKD50OEo4JEFxJCVwMzUkZ21wYmNqKUZuZTN0KX0lJFomXyFIXmZ+IWlYUE1eYDsj
d1dAN204TQp6NDhob0c9UHlzZ2VfaGtIVn0xYC1nM2lvJHBUVjltZm17TXQhNC1AfW9aZ2JCJEYk
anBWbGVDZVZfJShzI3E5JC0KektFWXNLbyFkcjIkP2V9bypaWGdNVDtOSUVIUE1sbW1vRT5jI0pX
K0pXfkVnOWBALW5Va2x5JTFwVE1Qc1MlOFYpCno+ZXRUdk87WU9TUFdhJS15NyslLVRsXm5EXzgp
ZjN5VVYqaWcodlF+Qm1zdkxjcDhSSkJPQElpVVpgMn4zODNIcQp6JSFCQHFvWXRRZ3NyWX1hdz85
d3QmbDl8SD9ZfDlJZjBvYW08QDBDeHtQI3h2cFN8O0VAQkc8Mnt+ej5Ed24jJHQKWSs1TDBoYCtr
SzM3S3x9RFloZ3RDK3hJe0lGSzUlRUd5bmhxCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1
cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVhdHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM3YmUwZGZlZTg0MDMxZTRlYzg3YTU3YjUyYjI0ZTQxNTgxNTA1
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMv
Y3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJC
bG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0g
YXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6
ZSA3ODR4MzYKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzgzeDM2
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjQzOiAiVGVzdCBmb3IgZm9udC1m
ZWF0dXJlLXNldHRpbmdzIHByb3BlcnR5LiAiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDI0Myww
KSB3aWR0aCA1NDA6ICJUaGUgZmlyc3Qgd29yZCBvZiB0aGUgZm9sbG93aW5nIHRocmVlIHdvcmRz
IHNob3VsZCBiZSBkaXNwbGF5ZWQgbGlrZSBcIldlYktpdFwiLCB3aGlsZSIKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMjY3OiAib3RoZXJzIHNob3VsZCBiZSBkaXNwbGF5ZWQg
YXMgYmxhY2sgYm94ZXMuIgorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsNTIpIHNpemUg
Nzg0eDE3CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMxeDE2Cisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzE6ICJXZWJLaXQiCisgICAgICBSZW5k
ZXJCbG9jayB7RElWfSBhdCAoMCw2OSkgc2l6ZSA3ODR4MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgOTZ4MTYKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCA5NjogIldlYktpdCIKKyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDg2KSBzaXpl
IDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA5NngxNgor
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDk2OiAiV2ViS2l0IgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4
IDNhNzMxMDFjMTQ2N2JkYjVjMWY0MWFjYmVmMWI0MWMzNjYyMzM4NjYuLjYwOGNkZDJlYTk2OTQ5
MTIzYTdiNDMwMWEyNjFhOTA2YmMzZjQzZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTI5MTEsOCArMjkxMSw2IEBA
IEJVR0NSOTc3MTYgOiBmYXN0L2NsaXAvb3ZlcmZsb3ctYm9yZGVyLXJhZGl1cy1jb21iaW5hdGlv
bnMuaHRtbCA9IElNQUdFCiAvLyBDYXVzZWQgYnkgcjkyNjE4CiBCVUdXSzY1ODc0IDogZmFzdC9q
cy9wcmV2ZW50RXh0ZW5zaW9ucy5odG1sID0gVEVYVAogCi1CVUdXSzYzNzk2IE1BQyA6IGNzczMv
Zm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sID0gTUlTU0lORyBGQUlMCi0KIEJV
R1dLNjY0MTcgV0lOIExJTlVYIDogZmFzdC90ZXh0L21pZHdvcmQtYnJlYWstYmVmb3JlLXN1cnJv
Z2F0ZS1wYWlyLTIuaHRtbCA9IElNQUdFK1RFWFQKIAogQlVHV0s2NjQxOSA6IGh0dHAvdGVzdHMv
bWlzYy9hdXRoZW50aWNhdGlvbi1yZWRpcmVjdC0xL2F1dGhlbnRpY2F0aW9uLXNlbnQtdG8tcmVk
aXJlY3QtY3Jvc3Mtb3JpZ2luLmh0bWwgPSBURVhUCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145674</attachid>
            <date>2012-06-04 18:32:41 -0700</date>
            <delta_ts>2012-06-12 16:06:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-69826-20120605103240.patch</filename>
            <type>text/plain</type>
            <size>62415</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTkzMzI2MWJiMTJkZWFl
NmNiMmI2ZWMzOTUwM2YyNTI3MzA3YmE5MS4uZmM4MjY5ZTZkNDU1ZmRmYjYzNTU4YTI3ZTEwZmVm
ZjM0ZDY4YmZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTA2LTA0ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQWRkIEhhcmZCdXp6
LW5nIHRleHQgc2hhcGVyLgorICAgICAgICBDaHJvbWl1bSBtYWMgcG9ydCB1c2VzIGl0IGFzIHNl
Y29uZGFyeSB0ZXh0IHNoYXBlciB0byBzdXBwb3J0IE9wZW5UeXBlIGZlYXR1cmVzLgorICAgICAg
ICBIYXJmQnV6ei1uZyBpcyBvbmx5IHVzZWQgd2hlbiAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0
aW5ncyBpcyBzcGVjaWZpZWQgYW5kCisgICAgICAgIGNvcnJlc3BvbmRpbmcgZm9udCBpcyBub3Qg
YW4gQUFUIGZvbnQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBjc3MzL2ZvbnQtZmVhdHVyZS1z
ZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCBzaG91bGQgcGFzcyBvbiBDaHJvbWl1bSBtYWMgcG9ydC4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGRlZCBoYXJmYnV6ei1uZyBk
ZXBlbmRlbmNpZXMuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCBoYXJmYnV6ei1uZyBm
aWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6Cisg
ICAgICAgIChGb250UGxhdGZvcm1EYXRhKTogQWRkZWQgbV9oYXJmYnV6ekZhY2UuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6IENvcHkg
bV9oYXJmYnV6ekZhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybURhdGFBc3NpZ24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNBQVRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhh
cmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhcmZidXp6RmFjZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6fkhhcmZCdXp6
RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpG
YWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6ekZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5
cGhIb3Jpem9udGFsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoRXh0ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbGVhc2VUYWJsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1
enpDb3JlVGV4dEdldFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3Jl
YXRlRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5j
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFy
ZmJ1enpQb3NpdGlvblRvRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9z
aXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpT
aGFwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldHVwSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OnRvdGFsV2lkdGgpOgorICAgICAgICAoSGFyZkJ1enpSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUNo
YXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
OjpudW1HbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OnJ0bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZlckhh
cmZCdXp6KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQpOiBVc2UgSGFyZkJ1enpTaGFwZXIgaWYgZm9udC1mZWF0dXJlLXNldHRpbmdz
IGV4aXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KTogRGl0dG8uCisKIDIwMTItMDYtMDQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTkzOTMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDdkOGQ3YmVhODUyNGI1
ZTBjZDNjYjZjNzMzYzA0OTMxYmZhYWE1NDkuLjY2MjFjMzdjN2NiYTMwYTBhNGZhY2Q1YzVmNDBh
YTM3MGM2Nzk0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0y
MDgsNiArMjA4LDggQEAKICAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvbWFjJywKICAg
ICAgICAgICAnLi4vcGxhdGZvcm0vbWFjJywKICAgICAgICAgICAnLi4vcGxhdGZvcm0vdGV4dC9t
YWMnLAorICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6eicsCisgICAgICAg
ICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nJywKICAgICAgICAgXSwKICAgICAg
IH1dLAogICAgICAgWydPUz09IndpbiInLCB7CkBAIC0xNTU3LDYgKzE1NTksNyBAQAogICAgICAg
ICAgIF0sCiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICd3ZWJraXRf
c3lzdGVtX2ludGVyZmFjZScsCisgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6ei5neXA6aGFyZmJ1enotbmcnLAogICAgICAgICAg
IF0sCiAgICAgICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgICAgICB7CkBAIC0xNjUyLDYgKzE2
NTUsMTIgQEAKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dseXBoUGFnZVRyZWVOb2RlU2tpYVxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnZXhjbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYVxcLmNwcCQnXSwKICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1
bU1hY1xcLmNwcCQnXSwKKworICAgICAgICAgICAgIyBNYWMgdXNlcyBIYXJmYnV6ei1uZy4KKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6
elNoYXBlckJhc2VcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNvcmVUZXh0XFwuY3BwJCddLAor
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6RmFjZVxcLihjcHB8aCkkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXJcXC4oY3BwfGgpJCddLCAgICAg
ICAgICAgIAogICAgICAgICAgIF0sCiAgICAgICAgIH0seyAjIE9TIT0ibWFjIgogICAgICAgICAg
ICdzb3VyY2VzLyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMTMxY2Q0NGZmZDJiMmZjNmQwZWYx
N2VhYWRlYzQzNjlkNGQxMTY5Li4xYWE3NGJjMmExNDQxNWFjYmQyZDA5ZGNhZTExYWFiZTc4ZmFm
YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zOTA2LDYgKzM5MDYsMTEgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
RmFjZUNvcmVUZXh0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovbmcvSGFyZkJ1enpGYWNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRl
eCBlODIyZTUwNmQ3NzBmOTdmODMxODVmYzliZmZiZjYzNjcxNDZiY2U5Li42M2E5MWE0MjQxYTA0
Mzg4YjZkOTRlZGRjZGY5OGUyM2E0YTY5MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC03Miw2ICs3Miw3IEBAIHR5
cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRSZWY7CiAKICNpZiBQTEFURk9STShD
SFJPTUlVTSkgJiYgT1MoREFSV0lOKQogI2luY2x1ZGUgIkNyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5n
LmgiICAKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKQpAQCAtMjU1LDYgKzI1NiwxMCBAQCBwdWJsaWM6CiAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQorICAgIEhhcmZCdXp6RmFjZSog
aGFyZmJ1enpGYWNlKCk7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAg
IHsKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoQ0FJUk8pCkBAIC0zNTgsNiArMzYzLDcgQEAg
cHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAgICAgUmVm
UHRyPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IG1faW5NZW1vcnlGb250OworICAgIFJlZlB0cjxIYXJm
QnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOwogI2VuZGlmCiAKICAgICBib29sIG1faXNDb2xvckJp
dG1hcEZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggZDEwOTk2NjlhZDMw
ZDU5ZTQ3ZmZjYzkxYzYxZGYyMGE4MzYwYzVhZi4uZjM2ZDJmOWYxMjYwYTYyOGM0YWEwZTM0OWI5
NGE0YzE4NmE5ZmEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtOTIsNiAr
OTIsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgZikKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4p
CiAgICAgbV9pbk1lbW9yeUZvbnQgPSBmLm1faW5NZW1vcnlGb250OworICAgIG1faGFyZmJ1enpG
YWNlID0gZi5tX2hhcmZidXp6RmFjZTsKICNlbmRpZgogfQogCkBAIC0xMDgsNiArMTA5LDcgQEAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhQXNz
aWduKGNvbnN0IEZvbnRQbGF0Zm9ybUQKICAgICBtX0NURm9udCA9IGYubV9DVEZvbnQ7CiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBtX2luTWVtb3J5Rm9udCA9IGYu
bV9pbk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2UgPSBmLm1faGFyZmJ1enpGYWNlOwog
I2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMjk3LDYgKzI5OSwzNyBAQCBDVEZvbnRS
ZWYgRm9udFBsYXRmb3JtRGF0YTo6Y3RGb250KCkgY29uc3QKICAgICByZXR1cm4gbV9DVEZvbnQu
Z2V0KCk7CiB9CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQorc3RhdGlj
IGJvb2wgaXNBQVRGb250KENURm9udFJlZiBjdEZvbnQpCit7CisgICAgQ0ZEYXRhUmVmIHRhYmxl
ID0gQ1RGb250Q29weVRhYmxlKGN0Rm9udCwga0NURm9udFRhYmxlTW9ydCwga0NURm9udE9wdGlv
bnNEZWZhdWx0KTsKKyAgICBpZiAodGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHRhYmxlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHRhYmxlID0gQ1RGb250Q29weVRhYmxl
KGN0Rm9udCwga0NURm9udFRhYmxlTW9yeCwga0NURm9udE9wdGlvbnNEZWZhdWx0KTsKKyAgICBp
ZiAodGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSGFyZkJ1enpGYWNlKiBGb250UGxh
dGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKQoreworICAgIENURm9udFJlZiBmb250ID0gY3RGb250
KCk7CisgICAgLy8gSGFyZkJ1enogY2FuJ3QgaGFuZGxlIEFBVCBmb250CisgICAgaWYgKGlzQUFU
Rm9udChmb250KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1faGFyZmJ1enpGYWNl
KSB7CisgICAgICAgIHVpbnQ2NF90IHVuaXF1ZUlEID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGZvbnQpOworICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCk7CisgICAgfQor
ICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIE5E
RUJVRwogU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ekZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZGRiYWJiMjJiZGE5Njc3YTU1ODcx
MGE1MTc5MmZiNWJhYTE0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCisKKyNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiaGIuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRob3VnaCB3ZSBoYXZlIEZv
bnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMgdGhlIGNhY2hlIG1lY2hhbmlzbSBmb3IKKy8v
IFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxzbyBuZWVkIGFkZGl0aW9uYWwgY2FjaGluZyBs
YXllciBmb3IgSGFyZkJ1enoKKy8vIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIGJl
Y2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKy8vIHVuZGVybGluZyBm
b250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZhY2UpLgordHlwZWRlZiBwYWlyPGhiX2ZhY2Vf
dCosIHVuc2lnbmVkPiBGYWNlQ2FjaGVFbnRyeTsKK3R5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwg
RmFjZUNhY2hlRW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gSGFyZkJ1enpGYWNlQ2FjaGU7CisKK3N0YXRp
YyBIYXJmQnV6ekZhY2VDYWNoZSogaGFyZmJ1enpGYWNlQ2FjaGUoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSGFyZkJ1enpGYWNlQ2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsK
KyAgICByZXR1cm4gJnNfaGFyZmJ1enpGYWNlQ2FjaGU7Cit9CisKK0hhcmZCdXp6RmFjZTo6SGFy
ZkJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVl
SUQpCisgICAgOiBtX3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCisgICAgLCBtX3VuaXF1ZUlE
KHVuaXF1ZUlEKQoreworICAgIEhhcmZCdXp6RmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBo
YXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOworICAgIGlmIChyZXN1bHQgPT0g
aGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpIHsKKyAgICAgICAgbV9mYWNlID0gY3JlYXRlRmFj
ZSgpOworICAgICAgICBBU1NFUlQobV9mYWNlKTsKKyAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUo
KS0+c2V0KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7CisgICAgICAgIG1f
ZmFjZSA9IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworICAgIH0KK30KKworSGFyZkJ1enpG
YWNlOjp+SGFyZkJ1enpGYWNlKCkKK3sKKyAgICBIYXJmQnV6ekZhY2VDYWNoZTo6aXRlcmF0b3Ig
cmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKKyAgICBBU1NF
UlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKKyAgICBBU1NFUlQocmVz
dWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKTsKKyAgICBpZiAoIShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Cisg
ICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdCk7CisgICAg
ICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWZjMjZiMWIxZjIwYzNmZmE3OWI4OGZiNjhkOTljYWQ3OTJmNDg0YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
RmFjZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZCdXp6RmFjZV9oCisjZGVmaW5lIEhh
cmZCdXp6RmFjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgX2hiX2Zh
Y2VfdDsKK3R5cGVkZWYgX2hiX2ZhY2VfdCBoYl9mYWNlX3Q7CitzdHJ1Y3QgX2hiX2ZvbnRfdDsK
K3R5cGVkZWYgX2hiX2ZvbnRfdCBoYl9mb250X3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xhc3MgSGFyZkJ1enpGYWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8SGFyZkJ1enpGYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SGFyZkJ1enpGYWNlPiBjcmVhdGUoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50
NjRfdCB1bmlxdWVJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZkJ1
enpGYWNlKHBsYXRmb3JtRGF0YSwgdW5pcXVlSUQpKTsKKyAgICB9CisgICAgfkhhcmZCdXp6RmFj
ZSgpOworCisgICAgaGJfZm9udF90KiBjcmVhdGVGb250KCk7CisKK3ByaXZhdGU6CisgICAgSGFy
ZkJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqLCB1aW50NjRfdCk7CisKKyAgICBoYl9mYWNlX3Qq
IGNyZWF0ZUZhY2UoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIG1fcGxhdGZvcm1EYXRhOwor
ICAgIHVpbnQ2NF90IG1fdW5pcXVlSUQ7CisgICAgaGJfZmFjZV90KiBtX2ZhY2U7Cit9OworCit9
CisKKyNlbmRpZiAvLyBIYXJmQnV6ekZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNl
Q29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2Y2ViNDUxNzk2Yzc3MmNkNzE3YzE5ZDdhZDQzZGFh
OWMzODA3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSwxNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCisKKyNpbmNs
dWRlICJDb3JlVGV4dC9Db3JlVGV4dC5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CisKKyNpbmNsdWRlICJoYi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9w
b3NpdGlvbl90IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30K
Kworc3RhdGljIGhiX2Jvb2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9u
dERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNl
bGVjdG9yLCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENU
Rm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250
RGF0YSktPmN0Rm9udCgpOworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAgICBDR0dseXBo
IGNnR2x5cGhzWzRdOworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9BUFBFTkRfVU5T
QUZFKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZvbnRHZXRHbHlw
aHNGb3JDaGFyYWN0ZXJzKGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9udGFsQWR2
YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGds
eXBoLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR0ds
eXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZvbnRHZXRBZHZh
bmNlc0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZjZ0ds
eXBoLCAwLCAxKTsKKyAgICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oYWR2YW5jZSk7
Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRf
dCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0
aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyhoYl9mb250X3Qq
IGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9l
eHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZv
bnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9u
dCgpOworICAgIENHUmVjdCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7Cisg
ICAgaWYgKENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250RGVm
YXVsdE9yaWVudGF0aW9uLCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0TnVsbCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZsb2F0VG9IYXJm
QnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0g
LWZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAgZXh0ZW50cy0+
d2lkdGggPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0aCk7CisgICAg
ZXh0ZW50cy0+aGVpZ2h0ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUuaGVp
Z2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFy
ZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3Nf
dCogaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhhcmZidXp6Q29y
ZVRleHRGb250RnVuY3MpIHsKKyAgICAgICAgaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhi
X2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1
bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOworICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9u
dEZ1bmNzLCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9u
dF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
LCBnZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5
cGhFeHRlbnRzLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZSho
YXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZidXp6Q29y
ZVRleHRGb250RnVuY3M7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURhdGEodm9pZCog
dXNlckRhdGEpCit7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZE
YXRhUmVmPih1c2VyRGF0YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisKK3N0YXRpYyBo
Yl9ibG9iX3QqIGhhcmZidXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3Rh
Z190IHRhZywgdm9pZCogdXNlckRhdGEpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odXNlckRhdGEpOwor
ICAgIENURm9udFJlZiBjdEZvbnQgPSBwbGF0Zm9ybURhdGEtPmN0Rm9udCgpOworICAgIENGRGF0
YVJlZiBjZkRhdGEgPSBDVEZvbnRDb3B5VGFibGUoY3RGb250LCB0YWcsIGtDVEZvbnRUYWJsZU9w
dGlvbk5vT3B0aW9ucyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KENGRGF0
YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENGRGF0YUdl
dExlbmd0aChjZkRhdGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9NRU1PUllf
TU9ERV9SRUFET05MWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxfX0NGRGF0
YSo+KGNmRGF0YSkpLCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90KiBIYXJmQnV6
ekZhY2U6OmNyZWF0ZUZhY2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3Jl
YXRlX2Zvcl90YWJsZXMoaGFyZmJ1enpDb3JlVGV4dEdldFRhYmxlLCBtX3BsYXRmb3JtRGF0YSwg
MCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNlOworfQorCitoYl9mb250X3Qq
IEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJfZm9udF90KiBmb250ID0gaGJf
Zm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6
ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBjb25zdCBm
bG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKKyAgICBoYl9mb250X3NldF9wcGVt
KGZvbnQsIHNpemUsIHNpemUpOworICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8IDE2KSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUs
IHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVybiBm
b250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBo
QnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVybiBD
R1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2VlZDg5N2JhNmExMWE3MGYw
NjQ3MjliZDg5MjNjNWQ3OTI1NzczNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtMCww
ICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5o
IgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJoYi1pY3UuaCIKKyNp
bmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Cisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoaGJfcG9zaXRpb25fdCB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2
KTsKK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3QqIGhh
cmZidXp6QnVmZmVyKQorICAgIDogbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCisgICAg
LCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCit7CisgICAgbV9udW1HbHlwaHMgPSBoYl9idWZmZXJf
Z2V0X2xlbmd0aChoYXJmYnV6ekJ1ZmZlcik7CisgICAgbV9nbHlwaHMucmVzaXplKG1fbnVtR2x5
cGhzKTsKKyAgICBtX2FkdmFuY2VzLnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9vZmZzZXRz
LnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXgucmVzaXpl
KG1fbnVtR2x5cGhzKTsKKyAgICBtX2xvZ0NsdXN0ZXJzLnJlc2l6ZShtX251bUNoYXJhY3RlcnMp
OworCisgICAgaGJfZ2x5cGhfaW5mb190KiBpbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5m
b3MoaGFyZmJ1enpCdWZmZXIsIDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251
bUdseXBoczsgKytpKQorICAgICAgICBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleFtpXSA9IGluZm9z
W2ldLmNsdXN0ZXI7CisKKyAgICAvLyBGaWxsIGxvZ2ljYWwgY2x1c3RlcnMKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgbV9udW1HbHlwaHMpIHsKKyAgICAgICAg
dW5zaWduZWQgbmV4dEluZGV4ID0gaW5kZXggKyAxOworICAgICAgICB3aGlsZSAobmV4dEluZGV4
IDwgbV9udW1HbHlwaHMgJiYgaW5mb3NbaW5kZXhdLmNsdXN0ZXIgPT0gaW5mb3NbbmV4dEluZGV4
XS5jbHVzdGVyKQorICAgICAgICAgICAgKytuZXh0SW5kZXg7CisgICAgICAgIGlmIChydGwoKSkg
eworICAgICAgICAgICAgaW50IG5leHRDbHVzdGVyID0gbmV4dEluZGV4IDwgbV9udW1HbHlwaHMg
PyBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIgOiAtMTsKKyAgICAgICAgICAgIGZvciAoaW50IGog
PSBpbmZvc1tpbmRleF0uY2x1c3RlcjsgaiA+IG5leHRDbHVzdGVyOyAtLWopCisgICAgICAgICAg
ICAgICAgbV9sb2dDbHVzdGVyc1tqXSA9IGluZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdW5zaWduZWQgbmV4dENsdXN0ZXIgPSBuZXh0SW5kZXggPCBtX251bUdseXBocyA/IGlu
Zm9zW25leHRJbmRleF0uY2x1c3RlciA6IG1fbnVtQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqIDwgbmV4dENsdXN0ZXI7ICsr
aikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5kZXg7CisgICAgICAgIH0K
KyAgICAgICAgaW5kZXggPSBuZXh0SW5kZXg7CisgICAgfQorfQorCit2b2lkIEhhcmZCdXp6U2hh
cGVyOjpIYXJmQnV6elJ1bjo6c2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVp
bnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IGFkdmFuY2UpCit7CisgICAg
bV9nbHlwaHNbaW5kZXhdID0gZ2x5cGhJZDsKKyAgICBtX29mZnNldHNbaW5kZXhdLnNldCh4LCB5
KTsKKyAgICBtX2FkdmFuY2VzW2luZGV4XSA9IGFkdmFuY2U7Cit9CisKK2ludCBIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGludCB0YXJnZXRY
KQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFyZ2V0WCkgPD0gbV93aWR0
aCk7CisgICAgaW50IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBwcmV2QWR2YW5jZSA9IDA7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAg
ZmxvYXQgY3VycmVudEFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldIC8gMi4wOworICAgICAgICBpbnQg
bmV4dFggPSBjdXJyZW50WCArIHJvdW5kZihwcmV2QWR2YW5jZSArIGN1cnJlbnRBZHZhbmNlKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRYIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBuZXh0WCkKKyAg
ICAgICAgICAgIHJldHVybiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleFtpXSArIChydGwoKSA/IDEg
OiAwKTsKKyAgICAgICAgY3VycmVudFggPSBuZXh0WDsKKyAgICAgICAgcHJldkFkdmFuY2UgPSBj
dXJyZW50QWR2YW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRsKCkgPyAwIDogbV9udW1DaGFy
YWN0ZXJzOworfQorCitpbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25G
b3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQoreworICAgIEFTU0VSVChvZmZzZXQgPCBtX251bUNo
YXJhY3RlcnMpOworICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSBtX2xvZ0NsdXN0ZXJzW29mZnNl
dF07CisgICAgQVNTRVJUKGdseXBoSW5kZXggPCBtX251bUdseXBocyk7CisgICAgZmxvYXQgcG9z
aXRpb24gPSBtX29mZnNldHNbZ2x5cGhJbmRleF0ueCgpOworICAgIGlmIChydGwoKSkKKyAgICAg
ICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tnbHlwaEluZGV4XTsKKyAgICByZXR1cm4gcm91bmRm
KHBvc2l0aW9uKTsKK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZv
bnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKKyAgICA6IEhhcmZCdXp6U2hhcGVyQmFzZShm
b250LCBydW4pCisgICAgLCBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4oMCkKKyAgICAsIG1fbnVt
Q2hhcmFjdGVyc09mQ3VycmVudFJ1bigwKQorICAgICwgbV9oYXJmYnV6ekJ1ZmZlcigwKQorewor
ICAgIHNldE5vcm1hbGl6ZWRCdWZmZXIoKTsKKyAgICBzZXRGb250RmVhdHVyZXMoKTsKK30KKwor
SGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCit7CisgICAgaWYgKG1faGFyZmJ1enpC
dWZmZXIpCisgICAgICAgIGhiX2J1ZmZlcl9kZXN0cm95KG1faGFyZmJ1enpCdWZmZXIpOworfQor
Cit2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQoreworICAgIEZvbnRGZWF0
dXJlU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mb250LT5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJl
U2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm47CisKKyAgICB1
bnNpZ25lZCBudW1GZWF0dXJlcyA9IHNldHRpbmdzLT5zaXplKCk7CisgICAgbV9mZWF0dXJlcy5y
ZXNpemUobnVtRmVhdHVyZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GZWF0
dXJlczsgKytpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiB0YWcgPSBzZXR0aW5ncy0+YXQoaSku
dGFnKCkuY2hhcmFjdGVycygpOworICAgICAgICBtX2ZlYXR1cmVzW2ldLnRhZyA9IEhCX1RBRyh0
YWdbMF0sIHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOworICAgICAgICBtX2ZlYXR1cmVzW2ldLnZh
bHVlID0gc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0uc3Rh
cnQgPSAwOworICAgICAgICBtX2ZlYXR1cmVzW2ldLmVuZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PigtMSk7CisgICAgfQorfQorCitib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIpCit7CisgICAgbV90b3RhbFdpZHRoID0gMDsKKyAgICB3aGlsZSAoc2V0
dXBIYXJmQnV6elJ1bigpKSB7CisgICAgICAgIGlmICghc2hhcGVIYXJmQnV6elJ1bigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZC
dXp6UnVuKGdseXBoQnVmZmVyKTsKKyAgICB9CisKKyAgICBpZiAoIW1faGFyZmJ1enpSdW5zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgSGFyZkJ1enpTaGFwZXI6OnNldHVwSGFyZkJ1enpSdW4oKQoreworICAgIG1fc3RhcnRJbmRl
eE9mQ3VycmVudFJ1biArPSBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW47CisKKyAgICAvLyBJ
dGVyYXRlIHRocm91Z2ggdGhlIHRleHQgdG8gdGFrZSB0aGUgbGFyZ2VzdCByYW5nZSB0aGF0IHN0
YXlzIHdpdGhpbgorICAgIC8vIGEgc2luZ2xlIGZvbnQuCisgICAgaW50IGVuZE9mUnVuSW5kZXgg
PSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggLSBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW47Cisg
ICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKG1fbm9ybWFsaXplZEJ1
ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgMCwgZW5kT2ZSdW5JbmRleCwg
ZW5kT2ZSdW5JbmRleCk7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgY2x1
c3Rlckxlbmd0aCA9IDA7CisgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1
c3Rlckxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY3VycmVudEZvbnRE
YXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9u
dERhdGE7CisgICAgVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9fRVJST1I7CisgICAgVVNj
cmlwdENvZGUgY3VycmVudFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJhY3RlciwgJmVy
cm9yQ29kZSk7CisgICAgaWYgKFVfRkFJTFVSRShlcnJvckNvZGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGN1cnJlbnRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQpCisgICAg
ICAgIGN1cnJlbnRTY3JpcHQgPSBVU0NSSVBUX0NPTU1PTjsKKyAgICBmb3IgKGl0ZXJhdG9yLmFk
dmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVy
TGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKSkgeworICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgICAgIGlmIChuZXh0Rm9udERh
dGEgIT0gbV9jdXJyZW50Rm9udERhdGEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVVNj
cmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJhY3RlciwgJmVycm9y
Q29kZSk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGN1cnJlbnRTY3JpcHQgPT0gbmV4dFNjcmlwdCB8fCBu
ZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEIHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9D
T01NT04pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1cnJlbnRTY3JpcHQg
PT0gVVNDUklQVF9DT01NT04pCisgICAgICAgICAgICBjdXJyZW50U2NyaXB0ID0gbmV4dFNjcmlw
dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fbnVtQ2hh
cmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAg
IGlmICghbV9oYXJmYnV6ekJ1ZmZlcikgeworICAgICAgICBtX2hhcmZidXp6QnVmZmVyID0gaGJf
YnVmZmVyX2NyZWF0ZSgpOworICAgICAgICBoYl9idWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MobV9o
YXJmYnV6ekJ1ZmZlciwgaGJfaWN1X2dldF91bmljb2RlX2Z1bmNzKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBoYl9idWZmZXJfcmVzZXQobV9oYXJmYnV6ekJ1ZmZlcik7CisgICAgaGJfYnVmZmVy
X3NldF9zY3JpcHQobV9oYXJmYnV6ekJ1ZmZlciwgaGJfaWN1X3NjcmlwdF90b19zY3JpcHQoY3Vy
cmVudFNjcmlwdCkpOworCisgICAgLy8gV2ViS2l0IGFsd2F5cyBzZXRzIGRpcmVjdGlvbiB0byBM
VFIgZHVyaW5nIHdpZHRoIGNhbGN1bGF0aW9uLgorICAgIC8vIFdlIG9ubHkgc2V0IGRpcmVjdGlv
biB3aGVuIGRpcmVjdGlvbiBpcyBleHBsaWNpdGx5IHNldCB0byBSVEwgc28gdGhhdAorICAgIC8v
IHByZXZlbnRuZyB3cm9uZyB3aWR0aCBjYWxjdWxhdGlvbi4KKyAgICBpZiAobV9ydW4ucnRsKCkp
CisgICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKG1faGFyZmJ1enpCdWZmZXIsIEhCX0RJ
UkVDVElPTl9SVEwpOworCisgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBydW4gbmVlZHMg
dG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMuCisgICAgLy8gbmV4dFNjcmlwdFJ1bigpIHdp
bGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhlIHNhbWUgY2FzZSwgYmVjYXVzZSBhCisgICAg
Ly8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwtY2FwcyBtb2RlIGFsd2F5cyByZXN1bHRzIGlu
IGRpZmZlcmVudAorICAgIC8vIEZvbnREYXRhLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhl
IGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCisgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAm
JiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW21fc3RhcnRJbmRleE9mQ3VycmVudFJ1bl0p
KSB7CisgICAgICAgIFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3JtYWxpemVkQnVmZmVy
LmdldCgpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJl
bnRSdW4pOworICAgICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7CisgICAgICAgIG1fY3VycmVu
dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBm
YWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERhdGE7CisgICAgICAgIGhiX2J1ZmZlcl9hZGRf
dXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgdXBwZXJUZXh0LmNoYXJhY3RlcnMoKSwgbV9udW1DaGFy
YWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4pOworICAg
IH0gZWxzZQorICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KG1faGFyZmJ1enpCdWZmZXIsIG1f
bm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgbV9udW1D
aGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1
enpSdW4oKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZtX2N1cnJlbnRGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkp
OworICAgIEhhcmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFyZmJ1enpGYWNlKCk7
CisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaGJfZm9udF90KiBo
YXJmYnV6ekZvbnQgPSBmYWNlLT5jcmVhdGVGb250KCk7CisgICAgaGJfc2hhcGUoaGFyZmJ1enpG
b250LCBtX2hhcmZidXp6QnVmZmVyLCBtX2ZlYXR1cmVzLnNpemUoKSA+IDAgPyBtX2ZlYXR1cmVz
LmRhdGEoKSA6IDAsIG1fZmVhdHVyZXMuc2l6ZSgpKTsKKyAgICBoYl9mb250X2Rlc3Ryb3koaGFy
ZmJ1enpGb250KTsKKyAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0
ZShtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpLCBtX2hhcmZi
dXp6QnVmZmVyKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6
OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
KQoreworICAgIGhiX2dseXBoX2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5
cGhfaW5mb3MobV9oYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCog
Z2x5cGhQb3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhtX2hhcmZidXp6
QnVmZmVyLCAwKTsKKyAgICBIYXJmQnV6elJ1biogY3VycmVudFJ1biA9IG1faGFyZmJ1enpSdW5z
Lmxhc3QoKS5nZXQoKTsKKworICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51
bUdseXBocygpOworICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CisgICAgZmxvYXQgbmV4dE9m
ZnNldFggPSBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1swXS54X29mZnNl
dCk7CisgICAgZmxvYXQgbmV4dE9mZnNldFkgPSAtaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5
cGhQb3NpdGlvbnNbMF0ueV9vZmZzZXQpOworICAgIC8vIEhhcmZCdXp6IHJldHVybnMgdGhlIHNo
YXBpbmcgcmVzdWx0IGluIHZpc3VhbCBvcmRlci4gV2UgbmVlZCBub3QgdG8gZmxpcCB0aGVtIGZv
ciBSVEwuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAg
ICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKKyAgICAgICAgdWludDE2X3Qg
Z2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WCA9
IG5leHRPZmZzZXRYOworICAgICAgICBmbG9hdCBvZmZzZXRZID0gbmV4dE9mZnNldFk7CisgICAg
ICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9u
c1tpXS54X2FkdmFuY2UpOworICAgICAgICBuZXh0T2Zmc2V0WCA9IHJ1bkVuZCA/IDAgOiBoYXJm
YnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueF9vZmZzZXQpOworICAg
ICAgICBuZXh0T2Zmc2V0WSA9IHJ1bkVuZCA/IDAgOiAtaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQo
Z2x5cGhQb3NpdGlvbnNbaSArIDFdLnlfb2Zmc2V0KTsKKworICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50Q2hhcmFjdGVySW5kZXggPSBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gKyBnbHlwaEluZm9z
W2ldLmNsdXN0ZXI7CisgICAgICAgIGJvb2wgaXNDbHVzdGVyRW5kID0gcnVuRW5kIHx8IGdseXBo
SW5mb3NbaV0uY2x1c3RlciAhPSBnbHlwaEluZm9zW2kgKyAxXS5jbHVzdGVyOworICAgICAgICBm
bG9hdCBzcGFjaW5nID0gaXNDbHVzdGVyRW5kID8gbV9sZXR0ZXJTcGFjaW5nIDogMDsKKworICAg
ICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgp
KQorICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKCk7CisK
KyAgICAgICAgaWYgKG1fY3VycmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5
cGgpKSB7CisgICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBn
bHlwaCwgMCwgMCwgMCk7CisgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCisgICAgICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgbV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUds
eXBoQnVmZmVyQWR2YW5jZSgwLCAwKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGFkdmFuY2UgKz0gc3BhY2luZzsKKyAgICAgICAgY3VycmVudFJ1bi0+c2V0
R2x5cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIHRvdGFsQWR2YW5jZSArIG9mZnNldFgsIG9mZnNl
dFksIGFkdmFuY2UpOworICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKKyAgICAgICAgICAgIGZs
b2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlICsgbmV4dE9mZnNldFggLSBvZmZzZXRYOworICAg
ICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWSA9IG5leHRPZmZzZXRZIC0gb2Zmc2V0WTsKKyAg
ICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZvbnREYXRhLCBjcmVh
dGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkpOworICAg
ICAgICB9CisKKyAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7CisgICAgfQorICAgIGN1
cnJlbnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFsQWR2YW5jZSA6IDAu
MCk7CisgICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7Cit9CisKK2ludCBI
YXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKK3sKKyAgICBp
bnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKKyAgICBpbnQgY3VycmVudFggPSAwOworCisgICAgaWYg
KG1fcnVuLnJ0bCgpKSB7CisgICAgICAgIGNoYXJhY3RlcnNTb0ZhciA9IG1fbm9ybWFsaXplZEJ1
ZmZlckxlbmd0aDsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1faGFyZmJ1enpSdW5zLnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgLT0gbV9oYXJm
YnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGludCBuZXh0WCA9IGN1
cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudFggPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IG5leHRYKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KKyAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5j
aGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbih0YXJnZXRYIC0gY3VycmVudFgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGludCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0t
PndpZHRoKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudFggPD0gdGFyZ2V0WCAmJiB0YXJnZXRY
IDw9IG5leHRYKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hh
cmZidXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24odGFyZ2V0WCAtIGN1cnJl
bnRYKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0gbV9oYXJmYnV6elJ1
bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOworfQorCitGbG9h
dFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgaW50IGZyb21YID0gLTEs
IHRvWCA9IC0xOworICAgIGludCBjdXJyZW50WCA9IDA7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4g
Y292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50IG51bUNo
YXJhY3RlcnMgPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAgICAgICBp
ZiAoZnJvbVggPT0gLTEgJiYgZnJvbSA+PSAwICYmIGZyb20gPCBudW1DaGFyYWN0ZXJzKQorICAg
ICAgICAgICAgZnJvbVggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZy
b20pICsgY3VycmVudFg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZyb20gLT0gbnVtQ2hh
cmFjdGVyczsKKworICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgdG8gPCBudW1D
aGFyYWN0ZXJzKQorICAgICAgICAgICAgdG9YID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlv
bkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG8g
LT0gbnVtQ2hhcmFjdGVyczsKKworICAgICAgICBpZiAoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0x
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGN1cnJlbnRYICs9IG1faGFyZmJ1enpSdW5z
W2ldLT53aWR0aCgpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBt
aWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICAg
ICAgZnJvbVggPSAwOworICAgIGlmICh0b1ggPT0gLTEpCisgICAgICAgIHRvWCA9IG1fcnVuLnJ0
bCgpID8gMCA6IG1fdG90YWxXaWR0aDsKKworICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1gg
IT0gLTEpOworCisgICAgaWYgKGZyb21YIDwgdG9YKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KHBvaW50LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOworICAg
IHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgdG9YLCBwb2ludC55KCksIGZyb21YIC0gdG9Y
LCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpT
aGFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YmVmZjVkNzJjZGM1NGY4ODg4ZDZjMjBhY2ExZDZlZGIwMzMy
MzFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSGFy
ZkJ1enpTaGFwZXJfaAorI2RlZmluZSBIYXJmQnV6elNoYXBlcl9oCisKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNo
YXBlckJhc2UuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiaGIuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgU2ltcGxlRm9udERhdGE7CisKK2NsYXNzIEhh
cmZCdXp6U2hhcGVyIDogcHVibGljIEhhcmZCdXp6U2hhcGVyQmFzZSB7CitwdWJsaWM6CisgICAg
SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mKTsKKyAgICB2aXJ0dWFs
IH5IYXJmQnV6elNoYXBlcigpOworCisgICAgYm9vbCBzaGFwZShHbHlwaEJ1ZmZlciogPSAwKTsK
KyAgICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRoOyB9CisgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOworICAgIEZsb2F0UmVjdCBzZWxlY3Rp
b25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKTsK
KworcHJpdmF0ZToKKyAgICBjbGFzcyBIYXJmQnV6elJ1biB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKHVuc2lnbmVkIG51bUNoYXJh
Y3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogYnVmZmVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6UnVuKG51bUNo
YXJhY3RlcnMsIGRpcmVjdGlvbiwgYnVmZmVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBnbHlwaElkLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCk7CisgICAgICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lk
dGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisKKyAgICAgICAgaW50IGNoYXJhY3RlckluZGV4Rm9y
WFBvc2l0aW9uKGludCB0YXJnZXRYKTsKKyAgICAgICAgaW50IHhQb3NpdGlvbkZvck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpOworCisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25z
dCB7IHJldHVybiBtX251bUNoYXJhY3RlcnM7IH0KKyAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1HbHlwaHM7IH0KKyAgICAgICAgZmxvYXQgd2lkdGgoKSB7
IHJldHVybiBtX3dpZHRoOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXJmQnV6elJ1bih1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9idWZmZXJfdCopOworICAg
ICAgICBib29sIHJ0bCgpIHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IFJUTDsgfQorCisgICAgICAg
IHNpemVfdCBtX251bUNoYXJhY3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwor
ICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgICAgICBWZWN0b3I8dWludDE2
X3QsIDI1Nj4gbV9nbHlwaHM7CisgICAgICAgIFZlY3RvcjxmbG9hdCwgMjU2PiBtX2FkdmFuY2Vz
OworICAgICAgICBWZWN0b3I8RmxvYXRQb2ludCwgMjU2PiBtX29mZnNldHM7CisgICAgICAgIFZl
Y3Rvcjx1aW50MTZfdCwgMjU2PiBtX2xvZ0NsdXN0ZXJzOworICAgICAgICBWZWN0b3I8dWludDE2
X3QsIDI1Nj4gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXg7CisgICAgICAgIGZsb2F0IG1fd2lkdGg7
CisgICAgfTsKKworICAgIHZvaWQgc2V0Rm9udEZlYXR1cmVzKCk7CisKKyAgICBib29sIHNldHVw
SGFyZkJ1enpSdW4oKTsKKyAgICBib29sIHNoYXBlSGFyZkJ1enpSdW4oKTsKKyAgICB2b2lkIHNl
dEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqKTsKKworICAgIEdseXBo
QnVmZmVyQWR2YW5jZSBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQsIGZsb2F0KTsKKwor
ICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1fZmVhdHVyZXM7CisgICAgdW5zaWduZWQgbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuOworICAgIHVuc2lnbmVkIG1fbnVtQ2hhcmFjdGVyc09mQ3Vy
cmVudFJ1bjsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Cisg
ICAgaGJfYnVmZmVyX3QqIG1faGFyZmJ1enpCdWZmZXI7CisgICAgVmVjdG9yPE93blB0cjxIYXJm
QnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsKKworICAgIGZsb2F0IG1fdG90YWxXaWR0aDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhhcmZCdXp6U2hhcGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q29tcGxleFRleHRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKaW5kZXggYzNkZGExNTVhNGY3ZmE1MzU5ZDI3ZDYxYWI1
MTUwZmNjNWE4OWZiOC4uYTcyNmRjMzRjMmZhZTJkZjVmYjZlM2I0ZDI2YWUxMTIxNDVlM2IxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21w
bGV4VGV4dE1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKQEAgLTM0LDEzICszNCwzMiBAQAogI2luY2x1ZGUgIlRl
eHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKK3N0YXRpYyBib29sIHByZWZlckhhcmZCdXp6KGNvbnN0IEZvbnQqIGZvbnQpCit7CisgICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IGZvbnQtPmZvbnREZXNjcmlwdGlv
bigpOworICAgIHJldHVybiBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSAmJiBkZXNjcmlw
dGlvbi5mZWF0dXJlU2V0dGluZ3MoKS0+c2l6ZSgpID4gMDsKK30KKyNlbmRpZgorCiBGbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogeworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBI
YXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFw
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHNoYXBlci5zZWxlY3Rpb25SZWN0KHBvaW50LCBoLCBm
cm9tLCB0byk7CisgICAgfQorI2VuZGlmCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CiAgICAgZmxv
YXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKQEAgLTgyLDYgKzEw
MSwxNiBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludAogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgaWYgKHByZWZlckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEds
eXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhp
cywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKSB7CisgICAg
ICAgICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAgICAgLy8g
VGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRh
IGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogCkBAIC0xMDks
NiArMTM4LDEzIEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSCiAKIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dykgY29uc3QKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVySGFyZkJ1
enoodGhpcykpIHsKKyAgICAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7Cisg
ICAgICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFwZXIudG90
YWxXaWR0aCgpOworICAgIH0KKyNlbmRpZgogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKHRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CiAgICAgaWYgKGdseXBoT3Zl
cmZsb3cpIHsKICAgICAgICAgZ2x5cGhPdmVyZmxvdy0+dG9wID0gbWF4PGludD4oZ2x5cGhPdmVy
Zmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChn
bHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
KTsKQEAgLTEyMSw2ICsxNTcsMTMgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb24KIAogaW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBm
bG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogeworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkgeworICAgICAgICBIYXJm
QnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKKyAgICAgICAgaWYgKHNoYXBlci5zaGFwZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHNoYXBlci5vZmZzZXRGb3JQb3NpdGlvbih4KTsKKyAgICB9
CisjZW5kaWYKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4p
OwogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MDBlNzQ0Y2VjMDI0MjI5NGRkY2NmYWE5NmY4NTZlNTk1
YjdmMDhiLi4wNzgyZmIyNmQ0MGY3OGMwY2RiNDYxNWNhYmI1NjMzOTE1NmI1ODVjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTItMDYtMDQgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gSW1wbGVtZW50IGZvbnQgc2hhcGluZyB3
aXRoIGZvbnQtZmVhdHVyZS1zZXR0aW5ncyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KKworICAgICAgICBBZGRlZCB0aGUgZXhwZWN0YXRpb24gZm9yIHNzczMvZm9udC1m
ZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLW1hYy9jc3MzL2ZvbnQtZmVh
dHVyZS1zZXR0aW5ncy1yZW5kZXJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOiBSZW1vdmVkIGNzczMvZm9udC1mZWF0
dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sLgorCiAyMDEyLTA2LTA0ICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTE5MzkzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC5wbmcg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMvY3NzMy9mb250LWZlYXR1cmUtc2V0
dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDgyZmI5NTQzOWExOGE1
YWE4YmIyNDNjYWMwZWJhY2RiOGY2M2ViCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNDk4MQp6
Y21lSHRkMDNOWW57UkNVKW9IMHZzKD1mTil6MnlAQWVEV0t7WGBLRVExK2IpRDRQTTwqQVRtKTJt
KTRGNmE9YW0KemtTJm9WVkpFRXVRNHhfZjVTQTFvSjBYTX1MWHZZbyVyfHErb05zMlhZdiM7OT1l
cWlibW98a3JAQjYmPntrd241CnplZnkkP0B2aEpKZX4hVW1jQTE8dnZjaDBLSzhWNDU8blR8USFZ
NWhiS1ZGQnc2aHFIQ2duSWcxQCQ/U34hKHB5Pwp6VWNJY05zb2AtJilBUThIRTA8NHRZRzN1eHk2
a256ISVNXktxfVI5S00qUk42YVNZfWwjPkQ3NW81KTk7O2gyVz4KenVwSEZ8P3p6KnktUHhvND9C
S3pmT0x4YDNKbXBwT3lII249d30oR0ROQGxDMmhnS1hiSmFQMkV0SWtlK0hDK3BgCnpOfHdBLWRn
cGhRNzste2xnM3NrQVBkYD1zUlhTbmxAPUlZM0huIVg/Q2FeRWVKPGgzLU1ZYm9xXyM1eXlUPVE2
IQp6aE5hI0hCYFU8VWtLb0lINjZjMmYxJXRVa2xsJG5PRnFwZl44MkhmWkBDfHNEZnF5IVAhSk85
bzQ/WlRTP2VKPHoKemw7WFdWQmhnWjlUT3ZIUCU4eWZDNlpuazNOJDJyZEI0SCF4KTh0YTtZOEFI
XzRuPWQ9bzI/XmFYaWZ9TGFZLWBuCnp2RXt3fHFBUlhHVCh4NGFySE9XNF5LUSR1KnJDNFFqKSR2
THRoR3ZOKjJfVWtndmQ1NEZyOFQkRmtJKEF6MitFVwp6Z1MlQlI9cj5QWVE/b05BSGVHV2dQakg1
N2Y7PisrUnk7TUlza3I+fHJiQko7NihiYG15UnZOM2woPSFYR0M0aF4KemRtOz9pcnNKUz9MemJ8
YEUxJTRiWCpEXlR2JlZoMkU3UE1lQ3A7MHFIbXFlfnUrcFF3K1ZBTihuRz0hWHpCTUw7Cnp2d0NQ
SDxjYjZ8OSFuJShwPDhTSTxNKkZEO1dvTG1mK3FKaUpnc2k3cUhTeWBQcVk9fG5vTnVDbTJabX00
enIpRAp6b3kta2RZUypmRTlCN34xQjQpYTYrTWstfUZ5dnA4amg9Y09HKyNTT159fHcxI2RLUHF4
b2oqPWNCRCFrS0RWZCEKemAzOElTWmIqKCNzdH1MJEZWU2dtamFoUmlackJ3V1VffjFwYE5wYThM
MnlecHNOdXgpVmQpU3B4fC1idVYkJXNiCnpheDE1aUtWUDQzblAoVyh1RUQ0PiFJTnF5dmI1S1JM
Zjk9Yj9zczs0e0hZTmhrMmYtTWlRNT9PQiR7UFR5Pz1hVwp6PT0jZkRsOUR7T2Y9SWhBZi00XnU3
OFcjY0M5QD9AeExsWiF1LT1efit+WTE+JSorcCZlODxaWlpSQX5QRF5hKDwKeitNWHEpQVg9eUFs
U25FeiNwVSkjMzxWaCo4TkpRY1FXZUs7RSVabEM9Q0hGX1RVU3JHKUk0OSVOfW83V3EpRGF0Cnpy
RjZIMztnKW5CREQ2RlVeQDA8eyZ2ckJAUV5tRHdwWkI5bmsrRjJTaF5HZXZZOTRuNW1eeEpseFls
dS1fQCsldwp6QEk1X25uPzNLfS0/Y0tHaE5KVGZhXnk2IU9tViltITZrfVohTEx5VSo7cUdQOTZw
K3p0VG1FVSt7bVNqP19+c14KemtkVzhjSHFUTm9HSm03MklxN19BZj1pRFFySVRaaSRsO2VlbTQk
cjJ6VzUxRjBGPkI9RVBzK29XNllZJE1vayVJCnpPfThed3p8WmBaNT5pdlVJIWBsUUR6bDEjKlBw
dWxRYkc5S3BxUDRRMEgrWiMkbHJVTVh5dlgrd3FJSjZrTldWLQp6Xmx8cU0pOWp2Y3RkTmNFYWBl
dGdBQmtpcVNJdl5ASEtSQ1ZOdmFsLXpldWFQeGtTenpWPmQ0KUNhOHhAeSF+ZC0KemFRJTs7ZTgt
d14rb243RWw3XnR2NmMyVFVGPGs4PD1oTi1vT2NhQyp4NEtWdD12VGc2WlJaem1GcyhfK3hVI013
CnpXJjtWUXYtNWJ8TjVQJEVXbSpGMklkK1JIOXIqYld3YX1eZSgoIXI5JmVVZWIhYmV8cT1yM0oo
am1zcW5Ifk9oSwp6PWJxbCl2cXNHI0F4bCgkXzZsViF1RWZ7T0lsfnpqI2lkTkZvVXIzVTFEKWxM
R19wI1JuZ1NeKz0tP3ZlYHBadW0KekpEMm83M1k+bUdWQD1AQ29IPTc7Ryp7SmEoZlJtSDhgLUM8
TkBiNktMYD4/WEJrZ1UwWkpUPyNiN3pmVyowXzh9Cno9bDBQRlgxJk9pTHUwTzE4NEZDKWh3VmJO
KSpmQitiPU0zR0VWUmdCbVg3ZX1EbE0wMThMSDgxXkt2YG9CZnIxVAp6WGopN3M4e0hDQCVXX0Ul
WTJEey1SMj91cFIqKVV3U0hZP0I/SCpHUWp3JSFAUmEoKXdiK2FVTUEpKWloUysjKG4Kem5pQEQ8
a04pU0VeeyVtTTIjSTl8PElNZyhCfSY8YjE5ZT1zdzEjO3tSO09aYUhiKnhzRipSO0VVeT9WIV4z
dDhwCnpXUTxNYXI9fGNEWHcrS0ZRM25IKHB3Xy03KXkpKVprMGwmRmJqYWdQbnhkTTJVK0Zya2FC
YTl6UHI+R2pgS3E4WQp6UGpFdG93emIkXzd2fUYwSVUzSnY0fiNvPz11bHMmPEw9JHhUdTJDdldn
aUd5ZTBgTXVeSmx3MUMrRyFeRy15dmcKejNLe0QlUSUmWClNRXVUNT9+Y2ZzcUMhQn1vZUhyaFRU
fG8/eFFqTCFZJnVwTEcqezFVM2lAcncmZ0skd2xhc0NVCnpueztPcTN3NCFmSEJjbU4/OzIoYyYr
JT5DUVp7UmtHSXRfN0Z2U3FSKl9AX200WXhZZVE/Jmh5blk2OSgzVntgQQp6JkxjNnx2c1AxYEps
U2pTS0t5fSl6SXB3M2lNVEhuYDJGPGFuYVBCTm0wMVNldz1oUnEjeD9aUDllRCM/YlIra1YKelRC
WnpDZFN7ay1kWS0hYUhsZl47LVV7dXRmQT4qfkowcCFUIztoajFYWH5BUFNOSjdFdlBEJUwhMitB
b2hURlQzCnpZRUdBQTJoPUhrRGpfZFJTMEtiVEVPKGl+Ml9LKlhXSHNsZjhham0hOXJEeDVJNlRy
Z3pjJERjaE5ISkZ0fj5RPgp6PGFvTmg1O2VjcEJQNEYxOyk7MXxnTj1LJlM5PVloP2kyNWhUOzRf
cCFPKUtFQ1AhT3VRR0hAaGJfPCMtciVUVT4KenB6VGhrPSp+UVFhcGF0YHFoKCoydmtYOTwrbDU/
eDloSTZ0ZXZJNmxFXkolSClxWlBRQ1lHRzs3Wkg8dWlLdUl6CnpLZzQzX1RDYDdJYTR5fGxIcUZX
P0UkbUk5XlJJfjhTRWtyOE5rZHlGPj9pZk80Vjd+bnI0TzdeVW5mTE56NS1tNwp6MXE0OH4oWCFO
bWImbzh8Mj1UMH4kbkZAbiFyUWZQPGt3bnBCPzQlSSl4Xm9mVjI7MHVkeG4zWVhOU1I+JU5HaVUK
emBjMXMjeiYkaDBYNl9RUSs5eDtIeEMpWXojJlRnY19aZ3BsdkcrXjVlOVgwPjs1T3g3dFA8Z1M5
MDdNeHRDeHAhCnptPGI3fW89IU1iOVROdkFjKV93T0sydXhVKSZKdlAjS3hlfWtfSDNuJWNpZyYp
Vlg7Y3srNnx4OFF1M05obzNBNQp6SXIqTF9uWGF6ejZURXU1YXBrflpGTjBDWVBTSH4tZ0VefDl1
S3JYXnJSTHp1Uk9qSWBtKWRWfTB+SlNoOW5kVSYKeiZTQjdtRF48OGJZTVBibCREZSsyOV5TZiY8
QV98dSZAWn43UXhfd0wwOVI5PjE0M3Vacy1AcV5zZCpVZkg7NHszCnpSVX5Abk10eUBXQ0t2cWJZ
djBZfj5GRm0pRHlIT3lNYm5ac3t2PWtVQk56Rns1N1dQV0VPN3k5PVhfZyt2ZXszYwp6P2xTZXgh
LXJwMU5NfkE9NGgwTFN6VEV7P0BQWjMmRGEyX0wpNEpCMCkqNkBMTUteZ3g7clhrJCNZQGJvJml3
OE4KellNIVI2WkR5KkNIV2hPb3JsXmVmbHo2bDBDM2E8fCZ8bHtiVnBkRCpeMm0qPSV3PGNfdlpX
JDElPytBeGtLe0MoCnp6dW9AaU0hUnM1I19IeFF4ZSNpJEBRMDZnN0RPI2c1UmN9P2VrJXV+d0Zz
dSo1JnJDV3JuYCFzdUBhfSExKUg4Iwp6LU9kbF9kM01QY3srTGc2JFRUZylLVmpSTjZuV3xwKTZs
ekV7dnxjYHVrRT04ZFN3cGZoanoqOSpQUSRgeXx1bn0KekJCV3tLZnM4KnROd3VrZU9vUlJXck1R
MD0kdWYzcV93O2hOcksqMEArREpeZFk4KT5xJjhtJVl6Y2Imc3V6dFItCno8YXVmbm8/cWFacUVx
MDVTNHpLQm53c2M0R1FUUkQ/PkRvUnVPSythRFd9VnlSal4tTHF1akF9Q2hzb2V1JCZtKAp6UElQ
dS0/I29fTXt5Nm5HZ1Y2Z25IRiZaekUmTElJQjcxKnU0ZVJ5bHR+enczeTcjK0JSamZFWjV5dHNi
ITJLUzUKenhBOFh0aDdvMmZqPklNN0J+QU5pIW9fKSlPR1M5Zj5KQGdoTXFyPytCQVI+Q0ZUXytZ
Qz0lN0x5aCNoP2JFPnQ5Cno/M01BWj8oUl9We2Ewe1dCYXhubzNDcGh6ciM/Kl5ZNG49OVhRcEJ6
YEFnaHRXZ2FvallJQjg1ODFAUlZNUCspPQp6JTJZeXM7ZEVqYD1zVFVzcnhJfXNLbHc3TmUyPyZw
OVlwSHhGLW55M01eMWV5WD5Tdz9UVnxNJXJUJWpENlVAMSMKektJZ3pqNFFqeWZlbUpQVzNwdShQ
aDZfSlBHYH5xZD96dVdRZkk0RUc2Ryg3Z3xFZEYrbEpvZ08keEdkSTlZOGwjCnpjMlF3JnFNQiFg
UUZGYiomWVpBNU5CSC1oTkkoYUt8Snh2Vl92PHJiS2t2M2tmTGhTfVI5dj15TXo5S0h5RUA+Vgp6
eDR2KS1Efm96P2o+MiRMXlhxeCQmPTQ3UFUobURKWDtUfEZKNShGO0N+RCRpZTQ3WDJKVzB+Wk57
KChvTXpad2gKem5IMnhncHpecWZkSnpHeUUwUHA3UXBUQVZpYH1XJTVuVDFLJE5PS3Vpe0gzdGol
N2gjQlhtemwqc0pieWFlMDFOCnprQlM/VmhRY24+Vz45Q2wzb1Z5OWdJWDUpeWtfbVc9UCQ9Ujc1
RU1wdmVYcWJsJTF1O1dLPlF0LU8oNVJPSEYyMQp6Qy1kaF4reSNGNmk/MHNIM25RMDFqb0hBdUxP
WGVXV2dXMi1yLURCR1YlI2JwR2JmcFVFP0hebEZUXmFLTitHSm8Kejdfd1dWUV5Rc0M3YCQwYGt1
SkllTmxBaWVqaTNOR2tQM3hpV1lxbGo7VkpmcWA8NXZROEQmUz9HRjRMQEUzZFl3CnooUGdjbG5i
b1IydnBKYG5SYkFpTWBpdjRybiZBNUhFMk8jfEg3JWtOezlQXm08eDx6OCNxSH02WVRBZndQaHNF
Vwp6Yll4fHBeMHFMaWUrVnpraTtJP3huSlpUZHtfdmAxRWIrTDw+dzhEa2ZaMWZWbVJKR0I0SmF9
ITJeSVF+eTcpZkAKelotYl88ZHhsQDJDdzZPOCFaUSFRZEsrZXFiWipIP3w1U2d1PVVmd2lVUStV
YHN5fX5kKG9pTnhGRzlzN1NPWkAyCnpkTTA1YnZwPEkwRDMqRDNJRjhSamdGa0VMcTh+fH1gdSo9
ZVBXMlI3eUlsWU1GR3NqMVk+TnE1PyhkdlAkPlRqMAp6O24oYkV3M1czb0IrSVpKUmdSYl83YDsj
Mlg+c0t1QSloWWZhfjBzYXd9RH5QVTtUMn1iOFI+eHdjOFNGJjsmRTUKemIpQ25+aGUxQHtaSntT
NnEtSlB3RVV8Km48KGJ+Jnk1VnlVa0BFe0xCfmxZMnUqe14kaHx3OG5afVMhTVJUfVZRCnpeTz87
YkJ4MWs2clBwJGVmRkZHa0FKaWdjemVsKFJzeip3PitKKUJKK3VRUWc8bz1paFZmfkI/e0o7M3Jf
TX4rQwp6PGNhTj55YGw9MHdRNjBRbzI7UDRXdGErdjVMZWpaKFp5MEBtWnZWUUtkOSgoQHBycWAl
QWc+VSo7eU1oOE0qTkwKeiZaSmQpTzMyZTUhe2FOfk1OeHdfcylrRHNKQiZtXmZtcDt3NFlieEVo
amM4dGpSUk9YeHxyYkNUQXpqMmxJVGJ0Cno5TGRzUHImKEx2dTRjdjZVd15DWVFnZjFlWlF2X0Y/
cWdNdG92UTtSSjFiVmFwYnlvMi12N0coJDQ7ejZCbmR0fQp6R0hZWUx1VTlFVDc2PihrYG1UMml1
Z3REJEVXPVNPKHlWWnpiM040REszI2U0aVl6SHl1NTRUekgkPWNpVTlqb1MKendXN0xMRG9EbitV
MnV5VVBsdE5Rc3lOV204O3JNYGUkP1lZVC0hUFJQSExSVj1tTCNhSnV3TElZKFEjUWQ/VGthCno+
Nl40PDt5R0wmaz9OVWhwZzlrOCYhT2h9V3pATGtPWWlqUEg5X3BMUEdnMVNPdDxMbTl6c09ZSm5X
Yzt7cj51Pwp6Q3JLV0ZLanAjV1o/czIkLVc/dUV2bSs2aEdjaSZXUWJ+SlRLK2AqXmxHKlN3eCUh
bEp0KWgxQGBGQVQ0d1VeKFkKek5vbz9fJilmUno+Uj0kUDIxeiErb2dgcEdHUXpPcGoxKTROb1R8
bCZKJXVRViFzaCMxel99THdfYE1VIyleNTFDCnp2fjBEJFE1bVNCcUQjeV4tYU9AWWlfSl9tTkF5
d2ZhMlRVeW0pNmt4ND9pPCY4WndVQXVhMzFPQ0gyd3p3ZTlAUQp6bHQpdHdNbnFkM0IzVnkqTjsy
WXRiKW5OPTBtYnlNYyRTeytLT1Z8cVlTZXx6UWVYYUY+dU5TfW97aEtid3JvK0sKekZBPG0xWlFo
djdRQHtlQjgoVkJzTypQTmZKaTloTz85WClmciZQJk57SEMrWWZpMUxyY0okR2dhS3xCWWFCe298
CnohZGdUcCNoKzJMKCZ4PFBSST5zVyR5bnVtLVEjVlVedV9WRSFeRW5XKj5ebWMhUl5KWEhOS3BH
ZVlaVmRyVDUrVAp6VkVQLUJoM1N0LWd3IXlAcypjUiFvYiV9WjJIengyMUU4UjVxYzdgS2NULWxa
WEZgaXhENkkqOTlqYmxlIWU+NUYKelAxMmNvOzVvKmxFMk1eVzctKnFhXytwNkBXVmpFYy1jU1Mh
QUg/KTZaMjlvfHteM0pvSj1UYFYkSEApZlRJZ31BCnpVS3xabkU8M31uP0hVNDMlJlVRNDh4dzhp
aUZVSztzaWBzWndTfnBtZFI0WDxVdjN6c3lmNEt5OH47JVMlKUooSgp6Kyk5Wjw8eUdfMVN8QzVJ
ZjtFLWBQeXtFQ2ArcnJie2MhSUFBYT9eaWRrYFd1KVo7NVczJC0maHpxcC1kMUBlQDwKekZqUjQr
JjExSCZPYnYjcUc9c01OSFYrJTgreVR1Izg4NkJTZXhyRHtUOXB3ZkNWaz5xWXwhKGI1NyROX3Bj
fjVTCnpOYUpyKj5faz48aFg1PmIjPEFeem1YPTN6ZjtQOGQkcGVnemF2KGMzcGpiYUEraCtOWEgh
UXBtRTAxMjhjfG1LfAp6VkJGS2BpcD1YPndwTUhCJnktZmFPSDRrWCllMzM+JHFgYTk0cCY2dkpV
aT5weE8ze0FfRipCUENla0MoZ3F6eXoKekpFejhnUyl7X2IpNSEkRT5eR3YlTkE5VXtTVHNVfFYw
R3thP2ROX01YT2QmRHlqR2M5ZXFVY0xsU1U0STxuJn1uCnpfbVppOUEyQXB8YSpyM09JKGVOaz50
bl9rXnFZMHpZP1N0U1J5K1Y5LTNuRmF2QSFePmshKVhmaDAqMGJ7PzRTZwp6MGVkV3JiZDFxTm9x
fU4pJmVATCY9Pm9LNyt+V05fOHs1bmJUYClUR3RxVSM2TCNNbWVLT0R2R2xheiFDekFoWDMKent5
UX5MSmFWTXsmblYpX2xjczdRZUpvcjtKSUBBajhgb04hWnxeUUM0KU8ySG9uVkh6O3p9dT1fU1Rw
SVY3PUV5Cno4Z3hjdG0paG1yXys2UHpkKkE+cT9pfG9rJHZFTm9SZyNRcTNLYEd3NTkrXnN0MGhh
cmUrPTMpSDZoe2duT20odgp6YlU3SXExYCRSTHtHYm5Rc3goPGVxQz5leWkjUSgtT2VYKkY8SHko
NmUhT3BLcn4/I1dGQ3E/TmdLelYmU2FGPlgKemNWOEZ7UiRNV0FvIWFENyQlNXtZQjkkYVh0fnRH
SDYqKlpLRFl2eylXJnskcCphfWRWd355dX5wcUdRblhfaTR3CnotUTMqdEAkdTxAKyVXcGA3WDVJ
bHsjWDdDUXU1Zyg9QCNoZz80SkI2VEg1alkyVCV7YiohSjBoRWdzTVlxIzVJIwp6Z3w7KTNwcDt0
WT4kJm9JVE9XP0hWUns1RWxFdWErb1lheUQhPWEhWmdOQjBXRW5uWX53V157T0tSaTZYPlI2UFEK
eipnb2hIUVZnflo4Z3ZnZGFaYnBWR04tYmhVcTE1KXc3ZTd7dGFfK2ltTilOdWs9b0o4TnYmcC1e
K2syWnpCNnRYCnpfWiheOWxzU1NaSihuc2tyP0NGcCZMP257YT9yQEZoJEleV04kP059KSZoZW8w
JHhYZDNtNHh1WEokJnNERzNxVwp6Z0IzN0w5aHpkSnRedUZBUmNCKjt1SDRYJTZqZVZNYTtMYXhz
V3RnUHcjI0RBZEp1KGZOQDRGUVhGdXw3Klg/OHEKemxiXyliTzg4QUB1UmkkU1QoemdSWW9uQUdU
ZTkrQ0QxYVp2bGpPUGB6e1lLQEJZdEdnd2x5Q31vKHYjMURNd2lOCno0TmFKR0JAVVY5OWUrYjFB
SGZnQURqJWFaWHtvQz5LZm5CUHRmRWFOTmxkbGpyMVN9Z2l7JmNIRH5+MWMkSWQxMQp6bSZ5WnJA
QzBmd2V2K1BpS3hVXzA9ekRSTjdeeSY8SUFMbkVONXpwVEphYkRAKCV1fihDTDZhdGlrej16IVdO
eU4KenUxSm0mKkBSZE8ySnt4JjI3JHJRezg5cXo1fWZWUypLMGNLdlEoIWpLV21yallVXiVtc2Zl
YXg0bHBUalZvM0cjCnpTIWdVUiFATikqbX1vcl5jKV8oaysrNlkoWGxkS14lanVKTzFqQWk+UGFi
cTcydigrWlc5Q2laZ0UlSVhIc35nOQp6PzQleEMwe0JHNGBvdERnPFU9SHtLKEhXd0h5VTZeO30z
SllmVXxaMTZuMjllJW1nWCE5TFdLSlohdWdLVyhHUmMKenFJeCpveHN6SnVNVSVqOFU3dndqJklD
YTFNd2lPUHVNVmhSfEtxbkZVO3tgOEI7cGs5MUImN1hwK0AlV2hXZ0JPCno1elkydjw2QCkjXyto
Nk5JNE5CcXVEWEQ3aDlCY1R6OW55SjVXUmRKPntrME0/SH5fYlh1R2JYaFA+UDhHV1BebAp6I2Q5
OFNLenM/KiRzb1E/ZEIzez1xQWhZJVRtJH1EK1RTcnF4YVB3YmdAWSo9SWBQb0VwZ21nKVQhV0M4
dzxJamoKeishOG0+Yk98PXVvUjZTbzg/Rj50TzJzYFIrWXIqVDUydnA+bEpaUWA/Zm9vfW4jemZ1
RGJsTiZqK2IjZTU0MzMtCnpFRkxBRGw9UEpHQkowOGVtfmxAKG1lNDxgP0N8YGMhUDQ3UCg+RmRB
S00kazl4KD9LJVFjOHFwJWZ1RzJfM1MkIQp6OSkoTUMlI2tqUXtCbWZwZj11X2dTYCZCYWBvbkgh
ZWZJJT9pU3h0dGc+aXlTOyUqRD11WDk0WE9ye2VLcjx8YEkKejNPNEprT0ZOJDVRfV5ENTlXR2lm
I05ycmcjV3NfMGh5PyZHMXF0Vl4zb2UrWDhtdjBwcilPJmdrfE0hUE0rU21GCno8OTZSX3BqbHRI
UXk8ZjV2IUtnPzspVkVkMjl1UGZAdzk4fVNjSVghcC0zfXUjQVFpc0wlPTBxY2tOZHtDWVlyTwp6
e2o9MTR0P0pndGxEZVVQb1ludFhuZ1Eoe3hRQlAxLXxCMj1GUj5AOUBQKiZrVE9uPi1MUjN2RWAl
Q2c1QTktfFUKel4+WTx3YCVpdjxJdlVXWjN5aCZHYm0lPzYzYDAyLU0mQSZsY2U0WG4jNDszOUAj
XyVQcmdlfGF6VW42MVA9MFhPCnpGKWUhLWl0YT0oVnhBX1BoWCVQPTJoN1JaUjhjVVlNS2VLT089
NXpMeT95Mzh0WX5XKTFUKilmMD1vQVY5YzV3fgp6cztlRzJpcU5VWXc9I3hGUyhOOzN4M1EmZnF3
a0p1ZC1aNlU3YnlIYHVxSiZnOUI/I2M3TGNZS2FBVEBwdmJMcnoKejM0V0l4WCg5byk4KlowYmt4
MT4xYjdwM0UyJmx0MWNPQSZPVz4wRT5hKj80MUhzUT9QMWVBN1pYQUR7e01OX050Cnp0VzEzdUtm
THpramtRY3koKihGXlY3fWR8Z3BJYVBhQ0hoRnA3T1JVXzRHcykyN3kyakBgS3d+Nmc3O0MyZlFo
UQp6TSVRd3w3SzAkTEE1RkZrMzJhPWt2KnFLO29DWXI/UTV7WmM7K1F0OEtfTHxSSDMkPXFfdkde
cVdLdkokKkUmdTUKekleVmhFS2tHOGheX01JM09Mc25NPmYyc2Q8eXZiPDJDYEc0PEhGSChZS3dM
QHQ8X35qOH5WUmkra2w9PWxUQ0dNCnpFbiF4KXR2SCYhR1pgT0ljeG9lYnhrU1AlUHErMj8lcjNw
JlQkIzFUO3wxYSFUQjJKXlBCUncrTkw2O3F7djkqRAp6Q0Vje0dIZEArbkwxU085aG0mcjJtP0M4
fi11d04jSTJiY3ZhdH0hJmBGd3hVYHxTZnNhT3dsK2ZSKT5GWFRlZlAKeiUxX1pQVWJxekU/MzBT
dXE9RzJrTXJ5PkNeeVh7V2ZuJTlqa0xfQF43Tj1Fa1FOcnRfXzFQNjxQOHgxQHJjITVPCnpJPURN
PTtXOCYpVTJhYTAzPnVBPlhAJVkmMTA5bCNDUiVvMig+XyFJPTdDRTRfd1Y9RVNSQl9JSSFEJUVk
Z2Rofgp6M3skKU87XiEkS2N3NWpLVlNvR0tFMmR4MDRIeEYoKX5FfVEhRmhWJExNZUpEaUtjRzJW
Xm5wVUt0bmFBZkxtfUYKelY3ZDIrKSpofGxRMG9UYT1CJVdvOGJIJUdTa29SV1BJKlZHVTczPjw7
Qnw1YlNQMTB8dzswTkYoPHM+LU91NCZlCnomYmlufSRKZm1jWnBUUGYxNj1nQ09fJDBKRkYtJlop
MU9TQ2xib002JlFea3o2QTY2KURGRkNhay1RY2V2ISo2Ngp6dGlNP2syQUgrQ3hrMDRVIWIqNXtq
O0w5a1heSjBeUiFUTkBycl9ERiQ+bTxKP2BmOUVWMTlHfFFCJmdKelhAUGcKend5JTdPQWwleGs9
RnUhcEUzRi1fPkBZbFZPRnI3PzV6eClFP3ZTa3o8Tit4WWtWKTcrWWdhbmdyY3ooKDx5dkF9Cnop
WG85aHBCaXQ8P3pGP3Z7IVBaeGhgfFcwcyFUQUJrVkF+aG45fjtHUmdHd0kwO1dlYj9uJmU5c28z
Pn1iKVkmbgp6aXp8cjlUciFyRWxHQnI+anJLcUUmZk56bGE3PXdxblp0bFI9cTImJGY+UFVtXkVk
KUh7XkR1clhwVzkwMXszVFQKemg1YDR+Pj1BSE8tckd8aGR2YSZ7JWh+KUhZOVBsbyZ4KzN5Y0NS
NFYxWWZWTldIM0xEXyt9b082cyhFKlVWZXVgCnpZd3prNj1WdmBzcyRVRzRAcVd3PktCd2oqakwr
QGprPUpGOG1FVX1HO2xZPXpeO1dHaDxRMDZqYDxyR2NANUJHLQp6aWk+cHc0cE5ueTFlYCEpYykr
bj1lLWlmIzR4RSliWnI5OWNUQlRAalBVVSs3ayUqdDJvQH4jUypgfFpoKD9sTFoKeiRMUTYkZVU9
NipIYmRjcXhTKkgydzM9PTBVOFJnPWdOJEJCWEFGe0RATlh6d3NJRUt6elJQYFkjUWBBVFFOJjE7
CnpUR1prUEBQNVV7clZIfih7ZEMwQno/MEtQaU5lZDl5T0xsTUgrY3x4b21QUzVrTHw+K2UtfUlG
c2M/TUlgIyo4Rwp6a0ZAMXpffWdzXyhnZTtmVlpGQTwocFUkUmY0OEowRy1re2ZrUnpwRmgzaz0h
SnNtblUyM2ljSWJLNiNUSWtNTV4KenFTTzVSNn58bGlHcm5iei00JDRYJDc5N01xKG9+QW9nO2B0
Sm1FKHx6SzBrJElLe0V+dVVRTiRhX35+Kj8/MylVCnpFcVp4c3VZVGxwZUtAcG9VfTQlSD93LWtW
JCNNdmdeXyRraSteQTN6KmhFQTJxNl9ndlM2VEgpbVgmRXlRPEd1eAp6VWJSRVhAJjxMIStpJmRu
Nz9COUVSRWRBYnckI282TlJPdnMwWE1wVUBtcy0jPmZxRkBRc29XMHo7IzNFKHRZXjsKelVsMmk3
JDhSbkpYX3B9YSlUKFdwIyN8JmhkO3ZrdjU8WU0wMl9LKWFIc14xeWE8YWNNJiQ1WnNodT40YmB1
NCNLCnp3dGBeRipjYXhlJipHK1EjSVM4WTBXeVBiPFNrWENeNUxnJWV6RVQhe007YFNaeSgtQUkk
UW53LSk+WjBZMEliKAp6Kmp9aXV1ckc1O2hvWlgrYj5UP3VhMDN8WHNnS3x5Y0IybE9WajBTPztF
YVRVYFUpckBwS0w4MEdpYE0hcSs9UFYKemJScFEwQldxMldoUn5gcVI1PVlsb0JpLS1HemplViVA
O0NGN3VVSmxMJCQzcGVgeEYzNkA1UChmMUJzUE1acDNgCnpwKTB0WUFnJG1zeF5WS3tLdUkzSkVR
MHVGOGc1ZTZEYkhgbHdwfjlDRUheOG9yPVUyciVzfm02S20zLXM7OFl2Kgp6akw1fWNsIzEzcmR4
Yl83Tl9JVG5LMlU9STxqTyhzb0c/NTFfaElucSUzcC1IdE0xeCg+dXRFKFNVJD1OKyk4PDUKektm
Y0lHM1RSeUVMKGN5WVR2I25eclUlSG47Z2BxbE5xNHx7cGQ8UFYpRjxLVkdkRykmbyhJc3hBcXkm
d0tnZkMkCnpWcno9UT49IzQzME1icGQwOUJMY2xvcT4+ZkZ4MF9jUC1rcT4yNllTdHlBfVBYT0xY
WSsmJX18X1VIanJ3UVJeKwp6d2ZNTFZ6OylONlkmSF48JFgrPkBCRD5HdENGbV5EJVU5biRhLWBE
eWx3KksoQ1ZsdFFyJjYwbG4+O3g1cXd1fkQKejlMPGdOa1BZdkAlcXZnRHBNYU9ZMldVVzJ5cUxg
ViNlbTZvSWMkS1NKQWkyQ2pFdW1NQFB1JEtvPFpCfUNBVDgyCnpncnI8VGcwVFg9PkxNQjUyU3BY
JE43dlN+YUQ2e1RAQ2hINWAqYzEqJk0zNmhWVEZ6SkM/KE9gST4tZDA+fTVacwp6MnAka1o5K3xa
K2FfZkR8UDZjX2taNjA3bk9JU01pZShiSEs0JU5CcEE/K1MhMU9fdjFeVG9seG57XzN4V2VDOFQK
ejdaTWBaRHRfVCkoWV9BY3MpPD5mazJtYCs3d0cye155ZUgrQi19T3dWTEV5VXc+RDYtISV3JXpM
MF4xTXMwVUR8CnoxRnAhVXNOWnZJb3JldEdlI3AoanBMcjhHcm9EeUNSYV5nbUBYNGdlIXp7PmQj
WUJ5UXVaalQwaTNvcWZVMHEjQQp6Z0s3OytOPXAwfVU2YkhNelNXSkdtcW8yQUtIbTMjKkA4UzZA
aCNBJHBPWG1fcn1BeksxJDtYQU5NQX15QkN+dXsKeiNjR15zQDkmO2JWb1hgYHNrZFRaR0o2T29z
UTh4MUxGKTxZP3s2N0dQZUtkVkVXU0NPP0lMWSZRNTA+Zm1yOTBZCnpHWkh4QzctVlNJQEFIKGsj
M2AkQ25BMTheZmskb0otNHoweEhtO1ZzSFAkVihgdV5TN2RQWEx6VWJFKzlkYUB3OQp6S2Q7eVZp
b3ElRDJtdmdCV15pOStHRmAoUl48aiVaRW9PQ1kzYVR9IStUVm08T29gb0NNQyRRclQ2aVNleSRw
ZGoKemheUEphOUlDVXFwIVoleTM4I3xlVDdNMy0kUEA1VCZhUERvY0hhWUdzdUVCJGRVTTxCQiFe
QUN7fkElIT9ZdDVRCnplYmhCKGxfR05GQ0M0WXZtX2hVe3VsIUkhKHdxK1gzalBlMTRpVlgjZEh3
Xj5sLW9kUF54cWsqNFdUcXhzZ0cjVwp6aDtzTWgzMHtHRF84Mzd4N0Q9SEplKn0/MUMtQ2lyWFIk
OFNEcm54VTVAPXF+VXgkYyRVfkEqSmUpWUExM2U9SkoKejJOVWRLT2peO1NxOGojUyYoZXNXK3p1
PlExVlNncjlmWHJaZ19ucy1AYXJSTDUlV1dsVUBlVjdzRGF+IUU4fCEmCnpXPXM2cyFHPVh7bits
JmVaa25PdXgqdDVJQihNJGBKP0BrWVNGXm12em5lbUchbjRAMVZPOHh3VEZ+akQ+KH4xbgp6eTww
I2hjKXN9Z3ZtaH0zV3BZJitPLV9VOHhwViZoKyZqVjJGdzBjSVMmNmByaD1qME5FVmNlMFQkKChP
bUV2JUQKeiFkZzhtOFJjIV5FZDFJITVQISRXclhsVUJnNiMrMmQpbVRxPEhLSTw+KSgkPzcjPG9D
czhQPnw+LV5QbDxGKTB2Cno9SzlSKWhPTmFtTkdqMVJNOztNfU5yfnEkJUFEPE1QSz13bVooMjJn
bm4yYkJJKXhLJTRjYWo3JHhAe0lFWmAmZQp6K2FnZE5qPmFYfUdrUllGJCN0MSlUcFE4cnNUfSZ9
O2MtKCFLfFdQfkBxRFJreXs1RlgoO2tFbEBJYHk1RVpFWFAKemhSfnJ5YTBXOEt4azZtPEU0PWB5
IWAwdmJlMkRASm1gR2BKbE1yVT81eWsqPXNRdWtpWGM3OUFXPm87KDlZN3I1Cno9Rk9YbF9gIUFp
WUh2dTsoZjcralptQ3piMHBRX2pXQ1N0SD8oIWdaWVlwVDgkZkxPZ3A7cncpMEdpJW9zM3U0YQp6
JEU/eTh1Q3ZBWCU1ZTFqM0tzK0xlTy1JP2lgQ15SUlJaTGp5TV8tT1gtIXA3ZldFczhmenBYNEZx
cjd5P1ViYFEKejJGfXlocG1VXkFkIVkzSURYZn5KRSFsNV5odD9NJDxudmh1Q2BEVGFITjRnWHA2
PyMlTllOaDs9QDB6ZilJcUNJCnpQMWhRQ1VfTE0yREE/cjJ0PHxmZWdieWZBRDctJStfe3t8ZlAh
PXtMbndFMCpOY3NYS08mNE1YekI5MTJxcjMzaQp6JEtCOGtVMSpleFl5V1dyZkAzYCo0MkdrU3da
YmFRMTkwLVA0am8jNzBXdThzRDxyMUBPJmIkRXB4ViUhNElSVykKekwjYEpzKz9lYn1MfUc+RW8o
RDR9SHh4YzdnckF3ZU5WZ2deJihXb0w7RlQhPHhxRn12P1Z0YFRDfiR1O00xNyZGCnpQIyN6V3oq
X3stJVFSJGo9YTEldVQ1YTxmPD8xMTtEZ3NpQWcpblB+MU9iQyFlKllWRFF6WWAzUHpzfGZSQD53
Tgp6cmJ7OzNCbD8lMTdkWDBlTWNeJDdnPFJNKiUwZUZSQC1SMH0zcU5DPlhOc2E/TVdQKEQwbylt
TUE4MWBqOWcxV2IKeigmP3VsN2w7clU/d09aT3c9eEFadzx2XkJBUmVYeUZNMlo9MjstNGk5PyVM
fmpaX2QxV2pMNClkfX47VHV7TF4mCnoqMXlgcEw0P0RFazwrYkdLWChyentreXAhTlM0N25EP2xa
JkdCPEZfNkBXb0c+Kik5ZD88V2J2MlhHN05YbDNKUgp6bnczK1AmIXJqMngwbz5NeVRRSV9PRjJ7
UHgkdTcpQVdxKHg4eHUyRCNsbW4rUm9ZZkNUQ3BoeWVsb1lmTHtAWWIKej1gJDJWMDB+ZnJ5I25g
RHY5ZXZlY0VKa0hFci1WRnUrVyh2TWRTP0Y7cHtESFM1ZXJIdk9oNFhrXnYlNkhhMzhWCnpqZXVz
QHloSDAxJGVmLTZaPlZMRjEtfFAmX2t9VztfPUAhfGQyJXFAZ0wqQyp3P0lOSmU/VGpzKWJFO0J6
fGRafQp6aiZlX1JsITlRTGohbDd4eGZ1d0l2byt0Myk4P19fXkxwITttVjlxb3QqZmN4TmMzISg9
RWphIXo/Y0gkP1g5bEsKekR5PEJvckxoK2dDV3N7fC1kTCNpaktLYFZaQ0x4RyN0JEVmbiQld0R2
NCkrNmAzMyhHNDJKTnNjPUpmOGtnNSoxCnozYypDdU5JMkR3O1pER1phel9rU3A9aS02JkNlM0Jk
PkNaNzxNUGdiKXRTOGNvSlc4Ymo0XnpmNkdmQE9CND5ZfAp6Vjl3aFU1Jip2dnJIP1FSR056YXY3
KShYYlhWVStiam03XzlrP3xpczJEKlg3TUVZXzJgR3FaSE01e0l8e0xNRTAKeitFOSZKZm59YU5H
TFJaP1ZuQk4pQytfJXc3IzlTdG9RMTY7bkohO0pGSkl9VCl1TjA4VnI/YjtJOU9SNTB9WCEtCnpQ
S1BSRzN3eEhyRjU1Mi1lIU5yczRyQyN6bDlGaHt1ZUd7cXI3UiU8dHZOMXBTK3BxQDc+dW1qaCom
TXVrVnh+eAp6RkxaMGgjTmFuR1klaEYqPzFVM1EwfW1hVjBRcUk5Jm9lU2dsUTs7T1lDdiRVWjdw
VUlRaFdvSE5yUThLKjJvQ2EKenpaOGdeX2gtWCNaNT8/d3YtPlYqaHUzciR2RH5rPjdAWTN9NWMm
Q0RtfXd7ezc/USs9bmtiQjhVOHBZX2YjdEJNCno2YlV5c0hXSV5DekUlJlU5P2QxXmt3WH5GQU5a
MDIlaFBFN0F6b1dPNWBCRFRjRDYrTGlCfi1rJDUhbXRPWUFuRQp6dXIlRThMUXd7PEVEKFIoNE1a
WlcqJV40dTU3cU1LRG16LUNubXF2UGRDK09waVlQY3V6S0o8JjJse3EyaFJXZX4Kem98VGomZnp7
WFlCM19MQnFuSnY5WHA8fmJpaygzQD42NSUwVGY7MVl0M0plaEwyJCZhdSRRITd6K1gkMWFmfCU9
Cno5WWliSiFASGcoMiM1dHs0SjtLbyNkcDkwYy1EVTQzazs/cXFJbU5ZRlBRJWpGQ19ORWN0YTJs
RH0xdG10PT14cwp6P20+e2woJFM3eSZFYHlyPU80ZlF6PUxhJUsxN15PZmRtWmNMPTxvLUg+YHJF
K1h9QWp6SENpZ0F7YmgmMExwdE0KekNERz40NzhAKHtKZkowbSE5PVJVM2tTdHVpfj5NLTtAdjso
bHR7QG5oLW5RWkBDVDwqK3lrc0c9IzY0d0dmRXwzCnpYJkAyZ0pSTUM2KWE5a0g+MD8qd0FnTV9G
OHdTMz87eCRYJDd2NVYhMD9iUyFCZVlEJUVLV3dKWFZpa1J2YlVFKAp6bTQlY0JART8+QiNBN018
dS0xVmdldTt1eyRoRDFPNzAmfjdBM0RZd0lCQz5XaTYtfklrXjFOcktwN2tNVTlUKzsKenI9KGZr
N29sN05iXy1pVHZrJUYwcG1heWgqYX1ZNGZCV0hNSGxSaClQdld9SVVMUVJPJXF4WWtTeDg4UCQk
bTs2CnpSKSRjamlfI3VNaFZ3UmkzZGhoVTl5bHh+Z2gxfCRqaFoxZVZ1UHVXWGkzPVk9N0FwNVFx
MVFhSj9MNSZzYHhXPgp6XkItaG0rWnxwbzhrMz14cXohak8zMDReUzFkJVdaNERWTDdVeGN+QEM0
YW1ZKWleYUVnMz9nP0RNIXBRbmdMRFoKejR4aFZ8O01OI0B3ejxBfnZKb3VrdjM0IWlvc2Y0cmco
bXczdXsjRH17Sj18fkJ4aXBISEsxVDRgMFBCMDx9ZGJyCnpgJlo7I05KXyU7KWJAXnZoM0Bwenkq
an5PWCF9Y0NafD9jfW9IekNXU35mKDw1T1ZqPjUpX1B+dU1zfFBGRXtgYgp6M1c2SkAhJUU4Vig+
dDhKOCRBcSQlcDM1JGdtcGJjailGbmUzdCl9JSRaJl8hSF5mfiFpWFBNXmA7I3dXQDdtOE0KejQ4
aG9HPVB5c2dlX2hrSFZ9MWAtZzNpbyRwVFY5bWZte010ITQtQH1vWmdiQiRGJGpwVmxlQ2VWXyUo
cyNxOSQtCnpLRVlzS28hZHIyJD9lfW8qWlhnTVQ7TklFSFBNbG1tb0U+YyNKVytKV35FZzlgQC1u
VWtseSUxcFRNUHNTJThWKQp6PmV0VHZPO1lPU1BXYSUteTcrJS1UbF5uRF84KWYzeVVWKmlnKHZR
fkJtc3ZMY3A4UkpCT0BJaVVaYDJ+MzgzSHEKeiUhQkBxb1l0UWdzcll9YXc/OXd0Jmw5fEg/WXw5
SWYwb2FtPEAwQ3h7UCN4dnBTfDtFQEJHPDJ7fno+RHduIyR0ClkrNUwwaGAra0szN0t8fURZaGd0
Qyt4SXtJRks1JUVHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1mZWF0dXJlLXNldHRpbmdz
LXJlbmRlcmluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1t
YWMvY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5nLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jN2JlMGRmZWU4NDAzMWU0ZWM4N2E1N2I1MmIyNGU0MTU4MTUwNTViCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL2NzczMvZm9udC1m
ZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAor
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9
IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNp
emUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDApIHNpemUgNzg0eDM2Cisg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc4M3gzNgorICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI0MzogIlRlc3QgZm9yIGZvbnQtZmVhdHVyZS1zZXR0
aW5ncyBwcm9wZXJ0eS4gIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgyNDMsMCkgd2lkdGggNTQw
OiAiVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSB3b3JkcyBzaG91bGQgYmUg
ZGlzcGxheWVkIGxpa2UgXCJXZWJLaXRcIiwgd2hpbGUiCisgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMTgpIHdpZHRoIDI2NzogIm90aGVycyBzaG91bGQgYmUgZGlzcGxheWVkIGFzIGJsYWNrIGJv
eGVzLiIKKyAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDUyKSBzaXplIDc4NHgxNworICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMXgxNgorICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxOiAiV2ViS2l0IgorICAgICAgUmVuZGVyQmxvY2sge0RJ
Vn0gYXQgKDAsNjkpIHNpemUgNzg0eDE3CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDk2eDE2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggOTY6ICJX
ZWJLaXQiCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw4Nikgc2l6ZSA3ODR4MTcKKyAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgOTZ4MTYKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA5NjogIldlYktpdCIKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDJjNzFiOWY2ZWRjZGJjMzgwMTkx
ZjNmYjIwN2U5ZGVkMGJmOTRiOGEuLjNkMDhlODRmMTU5NjM5ODIyMDNkMDdlNWE3ZThiZDA2NTBh
YWZiOWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMjg3MSw4ICsyODcxLDYgQEAgQlVHQ1I5NzcxNiA6IGZhc3QvY2xpcC9vdmVyZmxv
dy1ib3JkZXItcmFkaXVzLWNvbWJpbmF0aW9ucy5odG1sID0gSU1BR0UKIC8vIENhdXNlZCBieSBy
OTI2MTgKIEJVR1dLNjU4NzQgOiBmYXN0L2pzL3ByZXZlbnRFeHRlbnNpb25zLmh0bWwgPSBURVhU
CiAKLUJVR1dLNjM3OTYgTUFDIDogY3NzMy9mb250LWZlYXR1cmUtc2V0dGluZ3MtcmVuZGVyaW5n
Lmh0bWwgPSBNSVNTSU5HIEZBSUwKLQogQlVHV0s2NjQxNyBXSU4gTElOVVggOiBmYXN0L3RleHQv
bWlkd29yZC1icmVhay1iZWZvcmUtc3Vycm9nYXRlLXBhaXItMi5odG1sID0gSU1BR0UrVEVYVAog
CiBCVUdXSzY2NDE5IDogaHR0cC90ZXN0cy9taXNjL2F1dGhlbnRpY2F0aW9uLXJlZGlyZWN0LTEv
YXV0aGVudGljYXRpb24tc2VudC10by1yZWRpcmVjdC1jcm9zcy1vcmlnaW4uaHRtbCA9IFRFWFQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147183</attachid>
            <date>2012-06-12 16:07:07 -0700</date>
            <delta_ts>2012-06-12 21:32:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-69826-20120613080706.patch</filename>
            <type>text/plain</type>
            <size>46378</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdjNmYzYmEyM2NjN2Q3
ZTU5M2YwZjZkM2Q2MzExNmJiMzJlYjk1OS4uMThkZDkxYjFhYzc3Yzc5ZDNmNmM4ZGVkNDlkMzM4
NGY1NzcwZjE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTA2LTEyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBmb250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgor
CisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQWRkIEhhcmZCdXp6
LW5nIHRleHQgc2hhcGVyLgorICAgICAgICBDaHJvbWl1bSBtYWMgcG9ydCB1c2VzIGl0IGFzIHNl
Y29uZGFyeSB0ZXh0IHNoYXBlciB0byBzdXBwb3J0IE9wZW5UeXBlIGZlYXR1cmVzLgorICAgICAg
ICBIYXJmQnV6ei1uZyBpcyBvbmx5IHVzZWQgd2hlbiAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0
aW5ncyBpcyBzcGVjaWZpZWQgYW5kCisgICAgICAgIGNvcnJlc3BvbmRpbmcgZm9udCBpcyBub3Qg
YW4gQUFUIGZvbnQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBjc3MzL2ZvbnQtZmVhdHVyZS1z
ZXR0aW5ncy1yZW5kZXJpbmcuaHRtbCBzaG91bGQgcGFzcyBvbiBDaHJvbWl1bSBtYWMgcG9ydC4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGRlZCBoYXJmYnV6ei1uZyBk
ZXBlbmRlbmNpZXMuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCBoYXJmYnV6ei1uZyBm
aWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6Cisg
ICAgICAgIChGb250UGxhdGZvcm1EYXRhKTogQWRkZWQgbV9oYXJmYnV6ekZhY2UuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6IENvcHkg
bV9oYXJmYnV6ekZhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybURhdGFBc3NpZ24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNBQVRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhh
cmZidXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpGYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhcmZidXp6RmFjZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6fkhhcmZCdXp6
RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpG
YWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6ekZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5
cGhIb3Jpem9udGFsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoRXh0ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbGVhc2VUYWJsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1
enpDb3JlVGV4dEdldFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3Jl
YXRlRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5j
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFy
ZmJ1enpQb3NpdGlvblRvRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9z
aXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpT
aGFwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldHVwSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OnRvdGFsV2lkdGgpOgorICAgICAgICAoSGFyZkJ1enpSdW4p
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUNo
YXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
OjpudW1HbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OnJ0bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWZlckhh
cmZCdXp6KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQpOiBVc2UgSGFyZkJ1enpTaGFwZXIgaWYgZm9udC1mZWF0dXJlLXNldHRpbmdz
IGV4aXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KTogRGl0dG8uCisKIDIwMTItMDYtMTIgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBEb24ndCBjcmFzaCBpbiBDQ0xheWVySXRl
cmF0b3IgaWYgdGhlIHJvb3QgbGF5ZXIgZG9lc24ndCBoYXZlIGEgcmVuZGVyIHN1cmZhY2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggNWMxNGYwMzc2MTYyMTY0YTVi
NjZhNmM4OGVlZmJlOWFlYjJhN2U0OC4uOGE4Mjg3M2I1NmQxNTVjOTE1MjFiNDEwMTViYmQ5ODRk
ZmJlZWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTIwOSw2
ICsyMDksOCBAQAogICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9tYWMnLAogICAgICAg
ICAgICcuLi9wbGF0Zm9ybS9tYWMnLAogICAgICAgICAgICcuLi9wbGF0Zm9ybS90ZXh0L21hYycs
CisgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6JywKKyAgICAgICAgICAn
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcnLAogICAgICAgICBdLAogICAgICAgfV0s
CiAgICAgICBbJ09TPT0id2luIicsIHsKQEAgLTE1ODMsNiArMTU4NSw3IEBACiAgICAgICAgICAg
XSwKICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAgICAgJ3dlYmtpdF9zeXN0
ZW1faW50ZXJmYWNlJywKKyAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3Bh
cnR5L2hhcmZidXp6LW5nL2hhcmZidXp6Lmd5cDpoYXJmYnV6ei1uZycsCiAgICAgICAgICAgXSwK
ICAgICAgICAgICAnYWN0aW9ucyc6IFsKICAgICAgICAgICAgIHsKQEAgLTE2NzgsNiArMTY4MSwx
MiBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5
cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3BwJCddLAogICAgICAg
ICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtTWFj
XFwuY3BwJCddLAorCisgICAgICAgICAgICAjIE1hYyB1c2VzIEhhcmZidXp6LW5nLgorICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hh
cGVyQmFzZVxcLihjcHB8aCkkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHRcXC5jcHAkJ10sCisgICAg
ICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpGYWNlXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlclxcLihjcHB8aCkkJ10sICAgICAgICAg
ICAgCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJtYWMiCiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDdhMjFjYjViMjVlM2NlMjIyYjBkNzRkYWM3
MjJhY2YwNWZlNjBiMmQuLjdkMzJmZWQ1ZmY2OWZmZjcyYTJmNzI4MTI5MmJjMWU5OTZjZTRiOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5MTIsNiArMzkxMiwxMSBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNl
Q29yZVRleHQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6ekZhY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6ekZhY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGU4
MjJlNTA2ZDc3MGY5N2Y4MzE4NWZjOWJmZmJmNjM2NzE0NmJjZTkuLjYzYTkxYTQyNDFhMDQzODhi
NmQ5NGVkZGNkZjk4ZTIzYTRhNjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTcyLDYgKzcyLDcgQEAgdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZjsKIAogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKSAmJiBPUyhEQVJXSU4pCiAjaW5jbHVkZSAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIg
IAorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4p
CkBAIC0yNTUsNiArMjU2LDEwIEBAIHB1YmxpYzoKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBz
Y2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCisgICAgSGFyZkJ1enpGYWNlKiBoYXJm
YnV6ekZhY2UoKTsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewog
I2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShDQUlSTykKQEAgLTM1OCw2ICszNjMsNyBAQCBwcml2
YXRlOgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAgICBSZWZQdHI8
TWVtb3J5QWN0aXZhdGVkRm9udD4gbV9pbk1lbW9yeUZvbnQ7CisgICAgUmVmUHRyPEhhcmZCdXp6
RmFjZT4gbV9oYXJmYnV6ekZhY2U7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc0NvbG9yQml0bWFw
Rm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBkMTA5OTY2OWFkMzBkNTll
NDdmZmNjOTFjNjFkZjIwYTgzNjBjNWFmLi5mMzBiMTgxZjY5Mjc1MjhhYzA3Y2VjOTJmYzdiNDdj
MTIzMGY4MjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC05Miw2ICs5Miw3
IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmKQogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKICAg
ICBtX2luTWVtb3J5Rm9udCA9IGYubV9pbk1lbW9yeUZvbnQ7CisgICAgbV9oYXJmYnV6ekZhY2Ug
PSBmLm1faGFyZmJ1enpGYWNlOwogI2VuZGlmCiB9CiAKQEAgLTEwOCw2ICsxMDksNyBAQCBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24o
Y29uc3QgRm9udFBsYXRmb3JtRAogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2lu
TWVtb3J5Rm9udDsKKyAgICBtX2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CiAjZW5k
aWYKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0yOTcsNiArMjk5LDM3IEBAIENURm9udFJlZiBG
b250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX0NURm9udC5nZXQo
KTsKIH0KIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCitzdGF0aWMgYm9v
bCBpc0FBVEZvbnQoQ1RGb250UmVmIGN0Rm9udCkKK3sKKyAgICBDRkRhdGFSZWYgdGFibGUgPSBD
VEZvbnRDb3B5VGFibGUoY3RGb250LCBrQ1RGb250VGFibGVNb3J0LCAwKTsKKyAgICBpZiAodGFi
bGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHRhYmxlID0gQ1RGb250Q29weVRhYmxlKGN0Rm9udCwga0NURm9udFRhYmxlTW9y
eCwgMCk7CisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIENGUmVsZWFzZSh0YWJsZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hhcmZCdXp6
RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkKK3sKKyAgICBDVEZvbnRSZWYg
Zm9udCA9IGN0Rm9udCgpOworICAgIC8vIEhhcmZCdXp6IGNhbid0IGhhbmRsZSBBQVQgZm9udAor
ICAgIGlmIChpc0FBVEZvbnQoZm9udCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFt
X2hhcmZidXp6RmFjZSkgeworICAgICAgICB1aW50NjRfdCB1bmlxdWVJRCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihmb250KTsKKyAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJmQnV6
ekZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5pcXVl
SUQpOworICAgIH0KKyAgICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7Cit9CisjZW5kaWYK
KwogI2lmbmRlZiBOREVCVUcKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigp
IGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWRkYmFiYjIy
YmRhOTY3N2E1NTg3MTBhNTE3OTJmYjViYWExNDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlLmNwcApA
QCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFj
ZS5oIgorCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgImhiLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaG91
Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRoZSBjYWNoZSBtZWNo
YW5pc20gZm9yCisvLyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRpdGlv
bmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CisvLyB0byByZWR1Y2UgdGhlIG1lbW9yeSBj
b25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCisv
LyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNlKS4KK3R5cGVkZWYg
cGFpcjxoYl9mYWNlX3QqLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Cit0eXBlZGVmIEhhc2hN
YXA8dWludDY0X3QsIEZhY2VDYWNoZUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6RmFjZUNh
Y2hlOworCitzdGF0aWMgSGFyZkJ1enpGYWNlQ2FjaGUqIGhhcmZidXp6RmFjZUNhY2hlKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhcmZCdXp6RmFjZUNhY2hlLCBzX2hhcmZidXp6RmFj
ZUNhY2hlLCAoKSk7CisgICAgcmV0dXJuICZzX2hhcmZidXp6RmFjZUNhY2hlOworfQorCitIYXJm
QnV6ekZhY2U6OkhhcmZCdXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVp
bnQ2NF90IHVuaXF1ZUlEKQorICAgIDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQorICAg
ICwgbV91bmlxdWVJRCh1bmlxdWVJRCkKK3sKKyAgICBIYXJmQnV6ekZhY2VDYWNoZTo6aXRlcmF0
b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKKyAgICBp
ZiAocmVzdWx0ID09IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKSB7CisgICAgICAgIG1fZmFj
ZSA9IGNyZWF0ZUZhY2UoKTsKKyAgICAgICAgQVNTRVJUKG1fZmFjZSk7CisgICAgICAgIGhhcmZi
dXp6RmFjZUNhY2hlKCktPnNldChtX3VuaXF1ZUlELCBGYWNlQ2FjaGVFbnRyeShtX2ZhY2UsIDEp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQp
OworICAgICAgICBtX2ZhY2UgPSByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICB9Cit9
CisKK0hhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFjZSgpCit7CisgICAgSGFyZkJ1enpGYWNlQ2Fj
aGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJ
RCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCA+IDApOworICAgIC0tKHJlc3Vs
dC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNvbmQu
c2Vjb25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kocmVzdWx0LmdldCgpLT5zZWNvbmQu
Zmlyc3QpOworICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5yZW1vdmUobV91bmlxdWVJRCk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ekZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFmYzI2YjFiMWYyMGMzZmZhNzliODhmYjY4ZDk5Y2FkNzkyZjQ4NGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ekZhY2UuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXJmQnV6ekZhY2Vf
aAorI2RlZmluZSBIYXJmQnV6ekZhY2VfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
c3RydWN0IF9oYl9mYWNlX3Q7Cit0eXBlZGVmIF9oYl9mYWNlX3QgaGJfZmFjZV90Oworc3RydWN0
IF9oYl9mb250X3Q7Cit0eXBlZGVmIF9oYl9mb250X3QgaGJfZm9udF90OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CisKK2NsYXNzIEhhcmZCdXp6RmFj
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhhcmZCdXp6RmFjZT4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhhcmZCdXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRm
b3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEhhcmZCdXp6RmFjZShwbGF0Zm9ybURhdGEsIHVuaXF1ZUlEKSk7CisgICAgfQorICAg
IH5IYXJmQnV6ekZhY2UoKTsKKworICAgIGhiX2ZvbnRfdCogY3JlYXRlRm9udCgpOworCitwcml2
YXRlOgorICAgIEhhcmZCdXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiwgdWludDY0X3QpOworCisg
ICAgaGJfZmFjZV90KiBjcmVhdGVGYWNlKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBtX3Bs
YXRmb3JtRGF0YTsKKyAgICB1aW50NjRfdCBtX3VuaXF1ZUlEOworICAgIGhiX2ZhY2VfdCogbV9m
YWNlOworfTsKKworfQorCisjZW5kaWYgLy8gSGFyZkJ1enpGYWNlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6RmFjZUNv
cmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmNlYjQ1MTc5NmM3NzJjZDcx
N2MxOWQ3YWQ0M2RhYTljMzgwNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCkBA
IC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFj
ZS5oIgorCisjaW5jbHVkZSAiQ29yZVRleHQvQ29yZVRleHQuaCIKKyNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKKyNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiaGIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihDR0Zsb2F0IHZh
bHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgx
IDw8IDE2KSk7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGgoaGJfZm9udF90KiBoYkZv
bnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRf
dCB2YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0
YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZv
cm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBVbmlDaGFyIGNoYXJhY3RlcnNbNF07
CisgICAgQ0dHbHlwaCBjZ0dseXBoc1s0XTsKKyAgICBzaXplX3QgbGVuZ3RoID0gMDsKKyAgICBV
MTZfQVBQRU5EX1VOU0FGRShjaGFyYWN0ZXJzLCBsZW5ndGgsIHVuaWNvZGUpOworICAgIGlmICgh
Q1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhjdEZvbnQsIGNoYXJhY3RlcnMsIGNnR2x5cGhz
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmdseXBoID0gY2dHbHlwaHNb
MF07CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9u
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250
KCk7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7CisgICAgQ0dGbG9hdCBhZHZhbmNlID0g
Q1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250SG9yaXpvbnRhbE9yaWVu
dGF0aW9uLCAmY2dHbHlwaCwgMCwgMSk7CisgICAgcmV0dXJuIGZsb2F0VG9IYXJmQnV6elBvc2l0
aW9uKGFkdmFuY2UpOworfQorCitzdGF0aWMgaGJfYm9vbF90IGdldEdseXBoSG9yaXpvbnRhbE9y
aWdpbihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGds
eXBoLCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBnZXRHbHlwaEV4dGVu
dHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlw
aCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBD
VEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9u
dERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR1JlY3QgY2dSZWN0OworICAgIENHR2x5cGggY2dHbHlw
aCA9IGdseXBoOworICAgIGlmIChDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKGN0Rm9u
dCwga0NURm9udERlZmF1bHRPcmllbnRhdGlvbiwgJmNnR2x5cGgsICZjZ1JlY3QsIDEpID09IENH
UmVjdE51bGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBleHRlbnRzLT54X2JlYXJpbmcg
PSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLngpOworICAgIGV4dGVudHMt
PnlfYmVhcmluZyA9IC1mbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLnkpOwor
ICAgIGV4dGVudHMtPndpZHRoID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUu
d2lkdGgpOworICAgIGV4dGVudHMtPmhlaWdodCA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNn
UmVjdC5zaXplLmhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9mb250
X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQoreworICAgIHN0YXRpYyBo
Yl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MgPSAwOworCisgICAgaWYg
KCFoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKSB7CisgICAgICAgIGhhcmZidXp6Q29yZVRleHRG
b250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOworICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoLCAwLCAw
KTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1
enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7Cisg
ICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFyZmJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKKyAgICAgICAg
aGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6Q29yZVRleHRGb250
RnVuY3MsIGdldEdseXBoRXh0ZW50cywgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFr
ZV9pbW11dGFibGUoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyk7CisgICAgfQorICAgIHJldHVy
biBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlVGFi
bGVEYXRhKHZvaWQqIHVzZXJEYXRhKQoreworICAgIENGRGF0YVJlZiBjZkRhdGEgPSByZWludGVy
cHJldF9jYXN0PENGRGF0YVJlZj4odXNlckRhdGEpOworICAgIENGUmVsZWFzZShjZkRhdGEpOwor
fQorCitzdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNvcmVUZXh0R2V0VGFibGUoaGJfZmFjZV90
KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+
KHVzZXJEYXRhKTsKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcGxhdGZvcm1EYXRhLT5jdEZvbnQo
KTsKKyAgICBDRkRhdGFSZWYgY2ZEYXRhID0gQ1RGb250Q29weVRhYmxlKGN0Rm9udCwgdGFnLCBr
Q1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpOworICAgIGlmICghY2ZEYXRhKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSkpOworICAgIGNvbnN0IHNpemVfdCBsZW5n
dGggPSBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKTsKKyAgICBpZiAoIWRhdGEgfHwgIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhiX2Jsb2JfY3JlYXRlKGRhdGEsIGxlbmd0
aCwgSEJfTUVNT1JZX01PREVfUkVBRE9OTFksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0
X2Nhc3Q8X19DRkRhdGEqPihjZkRhdGEpKSwgcmVsZWFzZVRhYmxlRGF0YSk7Cit9CisKK2hiX2Zh
Y2VfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKCkKK3sKKyAgICBoYl9mYWNlX3QqIGZhY2Ug
PSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6Q29yZVRleHRHZXRUYWJsZSwgbV9w
bGF0Zm9ybURhdGEsIDApOworICAgIEFTU0VSVChmYWNlKTsKKyAgICByZXR1cm4gZmFjZTsKK30K
KworaGJfZm9udF90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQoKQoreworICAgIGhiX2ZvbnRf
dCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1fZmFjZSk7CisgICAgaGJfZm9udF9zZXRfZnVuY3Mo
Zm9udCwgaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpLCBtX3BsYXRmb3JtRGF0YSwgMCk7
CisgICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5tX3NpemU7CisgICAgaGJf
Zm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKKyAgICBjb25zdCBpbnQgc2NhbGUgPSAo
MSA8PCAxNikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpOworICAgIGhiX2ZvbnRfc2V0X3NjYWxl
KGZvbnQsIHNjYWxlLCBzY2FsZSk7CisgICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsK
KyAgICByZXR1cm4gZm9udDsKK30KKworR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVy
OjpjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sK
KyAgICByZXR1cm4gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlZWQ4
OTdiYTZhMTFhNzBmMDY0NzI5YmQ4OTIzYzVkNzkyNTc3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBl
ci5jcHAKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFy
ZkJ1enpTaGFwZXIuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAi
aGItaWN1LmgiCisjaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+CisjaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGhi
X3Bvc2l0aW9uX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1
ZSkgLyAoMSA8PCAxNik7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1
enpSdW4odW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGhi
X2J1ZmZlcl90KiBoYXJmYnV6ekJ1ZmZlcikKKyAgICA6IG1fbnVtQ2hhcmFjdGVycyhudW1DaGFy
YWN0ZXJzKQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQoreworICAgIG1fbnVtR2x5cGhz
ID0gaGJfYnVmZmVyX2dldF9sZW5ndGgoaGFyZmJ1enpCdWZmZXIpOworICAgIG1fZ2x5cGhzLnJl
c2l6ZShtX251bUdseXBocyk7CisgICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOwor
ICAgIG1fb2Zmc2V0cy5yZXNpemUobV9udW1HbHlwaHMpOworICAgIG1fZ2x5cGhUb0NoYXJhY3Rl
ckluZGV4LnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9sb2dDbHVzdGVycy5yZXNpemUobV9u
dW1DaGFyYWN0ZXJzKTsKKworICAgIGhiX2dseXBoX2luZm9fdCogaW5mb3MgPSBoYl9idWZmZXJf
Z2V0X2dseXBoX2luZm9zKGhhcmZidXp6QnVmZmVyLCAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9udW1HbHlwaHM7ICsraSkKKyAgICAgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5k
ZXhbaV0gPSBpbmZvc1tpXS5jbHVzdGVyOworCisgICAgLy8gRmlsbCBsb2dpY2FsIGNsdXN0ZXJz
CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG1fbnVtR2x5cGhz
KSB7CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgd2hp
bGUgKG5leHRJbmRleCA8IG1fbnVtR2x5cGhzICYmIGluZm9zW2luZGV4XS5jbHVzdGVyID09IGlu
Zm9zW25leHRJbmRleF0uY2x1c3RlcikKKyAgICAgICAgICAgICsrbmV4dEluZGV4OworICAgICAg
ICBpZiAocnRsKCkpIHsKKyAgICAgICAgICAgIGludCBuZXh0Q2x1c3RlciA9IG5leHRJbmRleCA8
IG1fbnVtR2x5cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogLTE7CisgICAgICAgICAg
ICBmb3IgKGludCBqID0gaW5mb3NbaW5kZXhdLmNsdXN0ZXI7IGogPiBuZXh0Q2x1c3RlcjsgLS1q
KQorICAgICAgICAgICAgICAgIG1fbG9nQ2x1c3RlcnNbal0gPSBpbmRleDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG5leHRDbHVzdGVyID0gbmV4dEluZGV4IDwgbV9u
dW1HbHlwaHMgPyBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIgOiBtX251bUNoYXJhY3RlcnM7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpbmZvc1tpbmRleF0uY2x1c3RlcjsgaiA8IG5l
eHRDbHVzdGVyOyArK2opCisgICAgICAgICAgICAgICAgbV9sb2dDbHVzdGVyc1tqXSA9IGluZGV4
OworICAgICAgICB9CisgICAgICAgIGluZGV4ID0gbmV4dEluZGV4OworICAgIH0KK30KKwordm9p
ZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2ln
bmVkIGluZGV4LCB1aW50MTZfdCBnbHlwaElkLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBhZHZh
bmNlKQoreworICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoSWQ7CisgICAgbV9vZmZzZXRzW2lu
ZGV4XS5zZXQoeCwgeSk7CisgICAgbV9hZHZhbmNlc1tpbmRleF0gPSBhZHZhbmNlOworfQorCitp
bnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlv
bihpbnQgdGFyZ2V0WCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhcmdl
dFgpIDw9IG1fd2lkdGgpOworICAgIGludCBjdXJyZW50WCA9IDA7CisgICAgZmxvYXQgcHJldkFk
dmFuY2UgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bUdseXBoczsgKytp
KSB7CisgICAgICAgIGZsb2F0IGN1cnJlbnRBZHZhbmNlID0gbV9hZHZhbmNlc1tpXSAvIDIuMDsK
KyAgICAgICAgaW50IG5leHRYID0gY3VycmVudFggKyByb3VuZGYocHJldkFkdmFuY2UgKyBjdXJy
ZW50QWR2YW5jZSk7CisgICAgICAgIGlmIChjdXJyZW50WCA8PSB0YXJnZXRYICYmIHRhcmdldFgg
PD0gbmV4dFgpCisgICAgICAgICAgICByZXR1cm4gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhbaV0g
KyAocnRsKCkgPyAxIDogMCk7CisgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7CisgICAgICAgIHBy
ZXZBZHZhbmNlID0gY3VycmVudEFkdmFuY2U7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bCgpID8g
MCA6IG1fbnVtQ2hhcmFjdGVyczsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1
bjo6eFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBBU1NFUlQob2Zm
c2V0IDwgbV9udW1DaGFyYWN0ZXJzKTsKKyAgICB1bnNpZ25lZCBnbHlwaEluZGV4ID0gbV9sb2dD
bHVzdGVyc1tvZmZzZXRdOworICAgIEFTU0VSVChnbHlwaEluZGV4IDwgbV9udW1HbHlwaHMpOwor
ICAgIGZsb2F0IHBvc2l0aW9uID0gbV9vZmZzZXRzW2dseXBoSW5kZXhdLngoKTsKKyAgICBpZiAo
cnRsKCkpCisgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAg
cmV0dXJuIHJvdW5kZihwb3NpdGlvbik7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNo
YXBlcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4pCisgICAgOiBIYXJmQnV6
elNoYXBlckJhc2UoZm9udCwgcnVuKQorICAgICwgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuKDAp
CisgICAgLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4oMCkKKyAgICAsIG1faGFyZmJ1enpC
dWZmZXIoMCkKK3sKKyAgICBzZXROb3JtYWxpemVkQnVmZmVyKCk7CisgICAgc2V0Rm9udEZlYXR1
cmVzKCk7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIoKQoreworICAgIGlm
IChtX2hhcmZidXp6QnVmZmVyKQorICAgICAgICBoYl9idWZmZXJfZGVzdHJveShtX2hhcmZidXp6
QnVmZmVyKTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1cmVzKCkKK3sK
KyAgICBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZm9udC0+Zm9udERlc2NyaXB0
aW9uKCkuZmVhdHVyZVNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0
dXJuOworCisgICAgdW5zaWduZWQgbnVtRmVhdHVyZXMgPSBzZXR0aW5ncy0+c2l6ZSgpOworICAg
IG1fZmVhdHVyZXMucmVzaXplKG51bUZlYXR1cmVzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRmVhdHVyZXM7ICsraSkgeworICAgICAgICBjb25zdCBVQ2hhciogdGFnID0gc2V0
dGluZ3MtPmF0KGkpLnRhZygpLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS50
YWcgPSBIQl9UQUcodGFnWzBdLCB0YWdbMV0sIHRhZ1syXSwgdGFnWzNdKTsKKyAgICAgICAgbV9m
ZWF0dXJlc1tpXS52YWx1ZSA9IHNldHRpbmdzLT5hdChpKS52YWx1ZSgpOworICAgICAgICBtX2Zl
YXR1cmVzW2ldLnN0YXJ0ID0gMDsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5lbmQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oLTEpOworICAgIH0KK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hh
cGUoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQoreworICAgIG1fdG90YWxXaWR0aCA9IDA7Cisg
ICAgd2hpbGUgKHNldHVwSGFyZkJ1enpSdW4oKSkgeworICAgICAgICBpZiAoIXNoYXBlSGFyZkJ1
enpSdW4oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0R2x5cGhQb3Np
dGlvbnNGb3JIYXJmQnV6elJ1bihnbHlwaEJ1ZmZlcik7CisgICAgfQorCisgICAgaWYgKCFtX2hh
cmZidXp6UnVucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEhhcmZCdXp6U2hhcGVyOjpzZXR1cEhhcmZCdXp6UnVuKCkKK3sKKyAg
ICBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gKz0gbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVu
OworCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSB0ZXh0IHRvIHRha2UgdGhlIGxhcmdlc3Qg
cmFuZ2UgdGhhdCBzdGF5cyB3aXRoaW4KKyAgICAvLyBhIHNpbmdsZSBmb250LgorICAgIGludCBl
bmRPZlJ1bkluZGV4ID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoIC0gbV9zdGFydEluZGV4T2ZD
dXJyZW50UnVuOworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciBpdGVyYXRvciht
X25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIDAsIGVu
ZE9mUnVuSW5kZXgsIGVuZE9mUnVuSW5kZXgpOworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOworICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShj
aGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
ciwgZmFsc2UpLmZvbnREYXRhOworICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9aRVJPX0VS
Uk9SOworICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChj
aGFyYWN0ZXIsICZlcnJvckNvZGUpOworICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjdXJyZW50U2NyaXB0ID09IFVTQ1JJUFRfSU5I
RVJJVEVEKQorICAgICAgICBjdXJyZW50U2NyaXB0ID0gVVNDUklQVF9DT01NT047CisgICAgZm9y
IChpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNoYXJh
Y3RlciwgY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkpIHsK
KyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICBp
ZiAobmV4dEZvbnREYXRhICE9IG1fY3VycmVudEZvbnREYXRhKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChjaGFy
YWN0ZXIsICZlcnJvckNvZGUpOworICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjdXJyZW50U2NyaXB0ID09IG5l
eHRTY3JpcHQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0lOSEVSSVRFRCB8fCBuZXh0U2NyaXB0
ID09IFVTQ1JJUFRfQ09NTU9OKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChj
dXJyZW50U2NyaXB0ID09IFVTQ1JJUFRfQ09NTU9OKQorICAgICAgICAgICAgY3VycmVudFNjcmlw
dCA9IG5leHRTY3JpcHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCk7CisKKyAgICBpZiAoIW1faGFyZmJ1enpCdWZmZXIpIHsKKyAgICAgICAgbV9oYXJmYnV6
ekJ1ZmZlciA9IGhiX2J1ZmZlcl9jcmVhdGUoKTsKKyAgICAgICAgaGJfYnVmZmVyX3NldF91bmlj
b2RlX2Z1bmNzKG1faGFyZmJ1enpCdWZmZXIsIGhiX2ljdV9nZXRfdW5pY29kZV9mdW5jcygpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KG1faGFyZmJ1enpCdWZmZXIpOwor
ICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KG1faGFyZmJ1enpCdWZmZXIsIGhiX2ljdV9zY3JpcHRf
dG9fc2NyaXB0KGN1cnJlbnRTY3JpcHQpKTsKKworICAgIC8vIFdlYktpdCBhbHdheXMgc2V0cyBk
aXJlY3Rpb24gdG8gTFRSIGR1cmluZyB3aWR0aCBjYWxjdWxhdGlvbi4KKyAgICAvLyBXZSBvbmx5
IHNldCBkaXJlY3Rpb24gd2hlbiBkaXJlY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gUlRMIHNv
IHRoYXQKKyAgICAvLyBwcmV2ZW50bmcgd3Jvbmcgd2lkdGggY2FsY3VsYXRpb24uCisgICAgaWYg
KG1fcnVuLnJ0bCgpKQorICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihtX2hhcmZidXp6
QnVmZmVyLCBIQl9ESVJFQ1RJT05fUlRMKTsKKworICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRo
aXMgcnVuIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgorICAgIC8vIG5leHRT
Y3JpcHRSdW4oKSB3aWxsIGFsd2F5cyBzZW5kIHVzIGEgcnVuIG9mIHRoZSBzYW1lIGNhc2UsIGJl
Y2F1c2UgYQorICAgIC8vIGNhc2UgY2hhbmdlIHdoaWxlIGluIHNtYWxsLWNhcHMgbW9kZSBhbHdh
eXMgcmVzdWx0cyBpbiBkaWZmZXJlbnQKKyAgICAvLyBGb250RGF0YSwgc28gd2Ugb25seSBuZWVk
IHRvIGNoZWNrIHRoZSBmaXJzdCBjaGFyYWN0ZXIncyBjYXNlLgorICAgIGlmIChtX2ZvbnQtPmlz
U21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlclttX3N0YXJ0SW5kZXhP
ZkN1cnJlbnRSdW5dKSkgeworICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9y
bWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgbV9udW1DaGFy
YWN0ZXJzT2ZDdXJyZW50UnVuKTsKKyAgICAgICAgdXBwZXJUZXh0Lm1ha2VVcHBlcigpOworICAg
ICAgICBtX2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVw
cGVyVGV4dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOworICAgICAgICBo
Yl9idWZmZXJfYWRkX3V0ZjE2KG1faGFyZmJ1enpCdWZmZXIsIHVwcGVyVGV4dC5jaGFyYWN0ZXJz
KCksIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgMCwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJy
ZW50UnVuKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZi
dXp6QnVmZmVyLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4sIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgMCwgbV9udW1DaGFyYWN0ZXJzT2ZD
dXJyZW50UnVuKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhhcmZCdXp6U2hhcGVy
OjpzaGFwZUhhcmZCdXp6UnVuKCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURh
dGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmbV9jdXJyZW50Rm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpKTsKKyAgICBIYXJmQnV6ekZhY2UqIGZhY2UgPSBwbGF0Zm9ybURhdGEtPmhh
cmZidXp6RmFjZSgpOworICAgIGlmICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGhiX2ZvbnRfdCogaGFyZmJ1enpGb250ID0gZmFjZS0+Y3JlYXRlRm9udCgpOworICAgIGhiX3No
YXBlKGhhcmZidXp6Rm9udCwgbV9oYXJmYnV6ekJ1ZmZlciwgbV9mZWF0dXJlcy5zaXplKCkgPiAw
ID8gbV9mZWF0dXJlcy5kYXRhKCkgOiAwLCBtX2ZlYXR1cmVzLnNpemUoKSk7CisgICAgaGJfZm9u
dF9kZXN0cm95KGhhcmZidXp6Rm9udCk7CisgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZC
dXp6UnVuOjpjcmVhdGUobV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rp
b24oKSwgbV9oYXJmYnV6ekJ1ZmZlcikpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEhh
cmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGdseXBoSW5mb3MgPSBoYl9i
dWZmZXJfZ2V0X2dseXBoX2luZm9zKG1faGFyZmJ1enpCdWZmZXIsIDApOworICAgIGhiX2dseXBo
X3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9wb3NpdGlv
bnMobV9oYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBt
X2hhcmZidXp6UnVucy5sYXN0KCkuZ2V0KCk7CisKKyAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBj
dXJyZW50UnVuLT5udW1HbHlwaHMoKTsKKyAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOworICAg
IGZsb2F0IG5leHRPZmZzZXRYID0gaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlv
bnNbMF0ueF9vZmZzZXQpOworICAgIGZsb2F0IG5leHRPZmZzZXRZID0gLWhhcmZidXp6UG9zaXRp
b25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zWzBdLnlfb2Zmc2V0KTsKKyAgICAvLyBIYXJmQnV6eiBy
ZXR1cm5zIHRoZSBzaGFwaW5nIHJlc3VsdCBpbiB2aXN1YWwgb3JkZXIuIFdlIG5lZWQgbm90IHRv
IGZsaXAgdGhlbSBmb3IgUlRMLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKKyAgICAgICAgYm9vbCBydW5FbmQgPSBpICsgMSA9PSBudW1HbHlwaHM7CisgICAg
ICAgIHVpbnQxNl90IGdseXBoID0gZ2x5cGhJbmZvc1tpXS5jb2RlcG9pbnQ7CisgICAgICAgIGZs
b2F0IG9mZnNldFggPSBuZXh0T2Zmc2V0WDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG5leHRP
ZmZzZXRZOworICAgICAgICBmbG9hdCBhZHZhbmNlID0gaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQo
Z2x5cGhQb3NpdGlvbnNbaV0ueF9hZHZhbmNlKTsKKyAgICAgICAgbmV4dE9mZnNldFggPSBydW5F
bmQgPyAwIDogaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaSArIDFdLnhf
b2Zmc2V0KTsKKyAgICAgICAgbmV4dE9mZnNldFkgPSBydW5FbmQgPyAwIDogLWhhcmZidXp6UG9z
aXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2kgKyAxXS55X29mZnNldCk7CisKKyAgICAgICAg
dW5zaWduZWQgY3VycmVudENoYXJhY3RlckluZGV4ID0gbV9zdGFydEluZGV4T2ZDdXJyZW50UnVu
ICsgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOworICAgICAgICBib29sIGlzQ2x1c3RlckVuZCA9IHJ1
bkVuZCB8fCBnbHlwaEluZm9zW2ldLmNsdXN0ZXIgIT0gZ2x5cGhJbmZvc1tpICsgMV0uY2x1c3Rl
cjsKKyAgICAgICAgZmxvYXQgc3BhY2luZyA9IGlzQ2x1c3RlckVuZCA/IG1fbGV0dGVyU3BhY2lu
ZyA6IDA7CisKKyAgICAgICAgaWYgKGlzQ2x1c3RlckVuZCAmJiBpc1dvcmRFbmQoY3VycmVudENo
YXJhY3RlckluZGV4KSkKKyAgICAgICAgICAgIHNwYWNpbmcgKz0gZGV0ZXJtaW5lV29yZEJyZWFr
U3BhY2luZygpOworCisgICAgICAgIGlmIChtX2N1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhT
cGFjZUdseXBoKGdseXBoKSkgeworICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRQ
b3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOworICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVy
KQorICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZvbnRE
YXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoMCwgMCkpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7CisgICAgICAgIGN1
cnJlbnRSdW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCB0b3RhbEFkdmFuY2UgKyBv
ZmZzZXRYLCBvZmZzZXRZLCBhZHZhbmNlKTsKKyAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Cisg
ICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZSArIG5leHRPZmZzZXRYIC0g
b2Zmc2V0WDsKKyAgICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVkgPSBuZXh0T2Zmc2V0WSAt
IG9mZnNldFk7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBtX2N1cnJlbnRG
b250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGdseXBoQWR2YW5jZVgsIGdseXBoQWR2
YW5jZVkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvdGFsQWR2YW5jZSArPSBhZHZhbmNlOwor
ICAgIH0KKyAgICBjdXJyZW50UnVuLT5zZXRXaWR0aCh0b3RhbEFkdmFuY2UgPiAwLjAgPyB0b3Rh
bEFkdmFuY2UgOiAwLjApOworICAgIG1fdG90YWxXaWR0aCArPSBjdXJyZW50UnVuLT53aWR0aCgp
OworfQorCitpbnQgSGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdl
dFgpCit7CisgICAgaW50IGNoYXJhY3RlcnNTb0ZhciA9IDA7CisgICAgaW50IGN1cnJlbnRYID0g
MDsKKworICAgIGlmIChtX3J1bi5ydGwoKSkgeworICAgICAgICBjaGFyYWN0ZXJzU29GYXIgPSBt
X25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7CisgICAgICAgIGZvciAoaW50IGkgPSBtX2hhcmZidXp6
UnVucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgY2hhcmFjdGVyc1Nv
RmFyIC09IG1faGFyZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBp
bnQgbmV4dFggPSBjdXJyZW50WCArIG1faGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpOworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRYIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBuZXh0WCkgeworICAg
ICAgICAgICAgICAgIC8vIFRoZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNj
cmlwdCBydW4uCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hhcmZi
dXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24odGFyZ2V0WCAtIGN1cnJlbnRY
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50WCA9IG5leHRYOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgbmV4dFggPSBjdXJyZW50WCArIG1faGFy
ZmJ1enpSdW5zW2ldLT53aWR0aCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnRYIDw9IHRhcmdl
dFggJiYgdGFyZ2V0WCA8PSBuZXh0WCkgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGluZGV4ID0gbV9oYXJmYnV6elJ1bnNbaV0tPmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKHRh
cmdldFggLSBjdXJyZW50WCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0Zh
ciArIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhcmFjdGVyc1NvRmFyICs9
IG1faGFyZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBjdXJyZW50
WCA9IG5leHRYOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0Zh
cjsKK30KKworRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGlu
dCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKKyAgICBpbnQgY3VycmVudFggPSAwOworICAgIC8vIEl0
ZXJhdGUgdGhyb3VnaCB0aGUgc2NyaXB0IHJ1bnMgaW4gbG9naWNhbCBvcmRlciwgc2VhcmNoaW5n
IGZvciB0aGUgcnVuIGNvdmVyaW5nIHRoZSBwb3NpdGlvbnMgb2YgaW50ZXJlc3QuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJmYnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMo
KTsKKyAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hh
cmFjdGVycykKKyAgICAgICAgICAgIGZyb21YID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlv
bkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRYOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cm9tIC09IG51bUNoYXJhY3RlcnM7CisKKyAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAw
ICYmIHRvIDwgbnVtQ2hhcmFjdGVycykKKyAgICAgICAgICAgIHRvWCA9IG1faGFyZmJ1enpSdW5z
W2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRvIC09IG51bUNoYXJhY3RlcnM7CisKKyAgICAgICAgaWYgKGZyb21YICE9IC0x
ICYmIHRvWCAhPSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXJyZW50WCArPSBt
X2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgcG9zaXRpb24g
aW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4KKyAgICBpZiAoZnJvbVgg
PT0gLTEpCisgICAgICAgIGZyb21YID0gMDsKKyAgICBpZiAodG9YID09IC0xKQorICAgICAgICB0
b1ggPSBtX3J1bi5ydGwoKSA/IDAgOiBtX3RvdGFsV2lkdGg7CisKKyAgICBBU1NFUlQoZnJvbVgg
IT0gLTEgJiYgdG9YICE9IC0xKTsKKworICAgIGlmIChmcm9tWCA8IHRvWCkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmcm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwg
aGVpZ2h0KTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgp
LCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpTaGFwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6U2hhcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JlZmY1ZDcyY2RjNTRmODg4OGQ2YzIw
YWNhMWQ2ZWRiMDMzMjMxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgKQEAgLTAsMCArMSwxMTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEhhcmZCdXp6U2hhcGVyX2gKKyNkZWZpbmUgSGFyZkJ1enpTaGFwZXJfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSGFyZkJ1enpTaGFwZXJCYXNlLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUg
ImhiLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udDsKK2NsYXNzIFNpbXBsZUZvbnREYXRh
OworCitjbGFzcyBIYXJmQnV6elNoYXBlciA6IHB1YmxpYyBIYXJmQnV6elNoYXBlckJhc2Ugewor
cHVibGljOgorICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqLCBjb25zdCBUZXh0UnVuJik7
CisgICAgdmlydHVhbCB+SGFyZkJ1enpTaGFwZXIoKTsKKworICAgIGJvb2wgc2hhcGUoR2x5cGhC
dWZmZXIqID0gMCk7CisgICAgZmxvYXQgdG90YWxXaWR0aCgpIHsgcmV0dXJuIG1fdG90YWxXaWR0
aDsgfQorICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICBGbG9h
dFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZy
b20sIGludCB0byk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgSGFyZkJ1enpSdW4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SGFyZkJ1enpSdW4+IGNyZWF0ZSh1bnNp
Z25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3Qq
IGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIYXJm
QnV6elJ1bihudW1DaGFyYWN0ZXJzLCBkaXJlY3Rpb24sIGJ1ZmZlcikpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2
X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQpOworICAgICAgICB2b2lkIHNldFdp
ZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorCisgICAgICAgIGludCBjaGFy
YWN0ZXJJbmRleEZvclhQb3NpdGlvbihpbnQgdGFyZ2V0WCk7CisgICAgICAgIGludCB4UG9zaXRp
b25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKKworICAgICAgICB1bnNpZ25lZCBudW1DaGFy
YWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DaGFyYWN0ZXJzOyB9CisgICAgICAgIHVuc2ln
bmVkIG51bUdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtR2x5cGhzOyB9CisgICAgICAgIGZs
b2F0IHdpZHRoKCkgeyByZXR1cm4gbV93aWR0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
SGFyZkJ1enpSdW4odW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiwgaGJfYnVm
ZmVyX3QqKTsKKyAgICAgICAgYm9vbCBydGwoKSB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBSVEw7
IH0KKworICAgICAgICBzaXplX3QgbV9udW1DaGFyYWN0ZXJzOworICAgICAgICB1bnNpZ25lZCBt
X251bUdseXBoczsKKyAgICAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICAgICAg
VmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5cGhzOworICAgICAgICBWZWN0b3I8ZmxvYXQsIDI1
Nj4gbV9hZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDI1Nj4gbV9vZmZzZXRz
OworICAgICAgICBWZWN0b3I8dWludDE2X3QsIDI1Nj4gbV9sb2dDbHVzdGVyczsKKyAgICAgICAg
VmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4OworICAgICAgICBm
bG9hdCBtX3dpZHRoOworICAgIH07CisKKyAgICB2b2lkIHNldEZvbnRGZWF0dXJlcygpOworCisg
ICAgYm9vbCBzZXR1cEhhcmZCdXp6UnVuKCk7CisgICAgYm9vbCBzaGFwZUhhcmZCdXp6UnVuKCk7
CisgICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKik7
CisKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0
LCBmbG9hdCk7CisKKyAgICBWZWN0b3I8aGJfZmVhdHVyZV90LCA0PiBtX2ZlYXR1cmVzOworICAg
IHVuc2lnbmVkIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICB1bnNpZ25lZCBtX251bUNo
YXJhY3RlcnNPZkN1cnJlbnRSdW47CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY3VycmVu
dEZvbnREYXRhOworICAgIGhiX2J1ZmZlcl90KiBtX2hhcmZidXp6QnVmZmVyOworICAgIFZlY3Rv
cjxPd25QdHI8SGFyZkJ1enpSdW4+LCAxNj4gbV9oYXJmYnV6elJ1bnM7CisKKyAgICBmbG9hdCBt
X3RvdGFsV2lkdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBI
YXJmQnV6elNoYXBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IGMzZGRhMTU1YTRmN2Zh
NTM1OWQyN2Q2MWFiNTE1MGZjYzVhODlmYjguLmE3MjZkYzM0YzJmYWUyZGY1ZmI2ZTNiNGQyNmFl
MTEyMTQ1ZTNiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC0zNCwxMyArMzQsMzIgQEAK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisjZW5kaWYK
KwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCitzdGF0aWMgYm9vbCBwcmVmZXJIYXJmQnV6eihjb25zdCBGb250KiBm
b250KQoreworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBmb250LT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdz
KCkgJiYgZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCktPnNpemUoKSA+IDA7Cit9CisjZW5k
aWYKKwogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QK
IHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVySGFyZkJ1enoodGhpcykp
IHsKKyAgICAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CisgICAgICAgIGlm
IChzaGFwZXIuc2hhcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFwZXIuc2VsZWN0aW9uUmVj
dChwb2ludCwgaCwgZnJvbSwgdG8pOworICAgIH0KKyNlbmRpZgogICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CiAgICAgY29udHJvbGxlci5hZHZhbmNlKGZy
b20pOwogICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7
CkBAIC04Miw2ICsxMDEsMTYgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQKIAogdm9pZCBGb250
OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
eworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGlmIChwcmVmZXJIYXJmQnV6eih0aGlzKSkg
eworICAgICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAgICAgSGFyZkJ1enpTaGFw
ZXIgc2hhcGVyKHRoaXMsIHJ1bik7CisgICAgICAgIGlmIChzaGFwZXIuc2hhcGUoJmdseXBoQnVm
ZmVyKSkgeworICAgICAgICAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhC
dWZmZXIsIHBvaW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZgogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNl
cyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZl
cjsKIApAQCAtMTA5LDYgKzEzOCwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UgogCiBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgaWYg
KHByZWZlckhhcmZCdXp6KHRoaXMpKSB7CisgICAgICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0
aGlzLCBydW4pOworICAgICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpCisgICAgICAgICAgICByZXR1
cm4gc2hhcGVyLnRvdGFsV2lkdGgoKTsKKyAgICB9CisjZW5kaWYKICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwogICAg
IGlmIChnbHlwaE92ZXJmbG93KSB7CiAgICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IG1heDxp
bnQ+KGdseXBoT3ZlcmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGlu
Z0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmlj
cygpLmFzY2VudCgpKSk7CkBAIC0xMjEsNiArMTU3LDEzIEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lk
dGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9uCiAKIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBpZiAocHJlZmVySGFyZkJ1enoodGhpcykpIHsK
KyAgICAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CisgICAgICAgIGlmIChz
aGFwZXIuc2hhcGUoKSkKKyAgICAgICAgICAgIHJldHVybiBzaGFwZXIub2Zmc2V0Rm9yUG9zaXRp
b24oeCk7CisgICAgfQorI2VuZGlmCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIodGhpcywgcnVuKTsKICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4
LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOWJmZjEzZGZhNDc1YTQyMmY2ZWRj
NWU4YzA0OTYyNzIyOTk4YjRlZi4uN2E1M2U0OWU5MmViZDk1NGE1YzExZTMwOWI3OTJjMWZmMTU3
ZjJkNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA2LTEyICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudCBm
b250IHNoYXBpbmcgd2l0aCBmb250LWZlYXR1cmUtc2V0dGluZ3Mgb24gTWFjCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0
RXhwZWN0YXRpb25zOiBVcGRhdGVkIGV4cGVjdGF0aW9uIG9mIGNzczMvZm9udC1mZWF0dXJlLXNl
dHRpbmdzLXJlbmRlcmluZy5odG1sLiBUaGUgcmVzdWx0IG5lZWQgdG8gYmUgcmViYXNlbGluZWQu
CisKIDIwMTItMDYtMTIgIFBhYmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAg
ICAgICAgIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb3JpZ2luLWV4YWN0
LW1hdGNoaW5nLmh0bWwgaXMgZ2l2aW5nIHRyb3VibGUgZHVlIHRvIHRvbyBtYW55IHJlZGlyZWN0
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggYmE4NTc3ODQzNDNlNjRlYmY2OTNiYzVmMzNiNjlhZWEyOTE2NDNjZi4uOGUwMTZiNTdmY2Fm
MGJhNjkxNGRjZTg3MjM5YjNlNmQ3ZTllY2YwOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0yODI1LDYgKzI4MjUsNyBAQCBCVUdDUjk3
NzE2IDogZmFzdC9jbGlwL292ZXJmbG93LWJvcmRlci1yYWRpdXMtY29tYmluYXRpb25zLmh0bWwg
PSBJTUFHRQogLy8gQ2F1c2VkIGJ5IHI5MjYxOAogQlVHV0s2NTg3NCA6IGZhc3QvanMvcHJldmVu
dEV4dGVuc2lvbnMuaHRtbCA9IFRFWFQKIAorLy8gTmVlZCByZWJhc2VsaW5lCiBCVUdXSzYzNzk2
IE1BQyA6IGNzczMvZm9udC1mZWF0dXJlLXNldHRpbmdzLXJlbmRlcmluZy5odG1sID0gTUlTU0lO
RwogCiBCVUdXSzY2NDE3IFdJTiBMSU5VWCA6IGZhc3QvdGV4dC9taWR3b3JkLWJyZWFrLWJlZm9y
ZS1zdXJyb2dhdGUtcGFpci0yLmh0bWwgPSBJTUFHRStURVhUCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>