<?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>17336</bug_id>
          
          <creation_ts>2008-02-12 19:53:05 -0800</creation_ts>
          <short_desc>Update WinCairo WebKit with Font/Text Support</short_desc>
          <delta_ts>2008-02-20 18:14:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
    
    <cc>aroben</cc>
    
    <cc>cedricv</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>70472</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-12 19:53:05 -0800</bug_when>
    <thetext>The attached patch updates the WebKit sources to support proper rendering of text using the Cairo back-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70474</commentid>
    <comment_count>1</comment_count>
      <attachid>19102</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-12 20:40:51 -0800</bug_when>
    <thetext>Created attachment 19102
Patch to add font support to Cairo/Win backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70543</commentid>
    <comment_count>2</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-13 10:44:00 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=19102) [edit]
&gt; Patch to add font support to Cairo/Win backend.
&gt; 

I didn&apos;t have the chance to look over this fully yet.


Some things I spotted:

+        static cairo_font_options_t* fontOptions;
+        if (!fontOptions)
+           fontOptions = cairo_font_options_create();

^ Uninitialised variable, this will break in release builds. You should be fine with just:

static cairo_font_options_t* fontOptions = cairo_font_options_create();

or you could keep the logic (it&apos;ll become useful later when Win implements central font options) and assign 0.



+#if PLATFORM(CG)
         CGContextSaveGState(pctx);
 
         IntRect printRect = printerRect(printDC);
@@ -2740,6 +2741,9 @@ HRESULT STDMETHODCALLTYPE WebFrame::spoo
 
         CGContextEndPage(pctx);
         CGContextRestoreGState(pctx);
+#else
+        notImplemented();
+#endif


^ I&apos;m already working on printing abstraction, so it&apos;s good that you just stubbed it out and didn&apos;t try to implement it.



The rename of cgFont() to platformFont() is a clever shortcut, I like that :-)




+#if PLATFORM(CG)
 typedef struct CGColor* CGColorRef;
-typedef struct CGContext* CGContextRef;
+typedef struct CGContext* ContextRef;
+typedef const CGColorRef ColorRef;
+#elif PLATFORM(CAIRO)
+#include &quot;GraphicsContext.h&quot;
+typedef WebCore::GraphicsContext* ContextRef;
+typedef const WebCore::Color* ColorRef;
+#endif

^ I&apos;d just do #else here, though it doesn&apos;t matter much.



I think there are a few more worthwhile code sharing opportunities here before, but didn&apos;t study the split closely enough to be sure yet.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70546</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-02-13 10:50:49 -0800</bug_when>
    <thetext>&quot;Uninitialised variable, this will break in release builds.&quot;

Incorrect.  Statics inside functions in C++ are initialized to 0.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70547</commentid>
    <comment_count>4</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-13 11:09:06 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &quot;Uninitialised variable, this will break in release builds.&quot;
&gt; 
&gt; Incorrect.  Statics inside functions in C++ are initialized to 0.
&gt; 

Technically correct but code like this gets moved around and might well end up in a pure C file some day. I&apos;m pretty sure gcc will not zero stack-allocated pointers on some platforms unless you explicitly enable C99.

I wouldn&apos;t write new code that relies on this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70550</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-13 11:37:06 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Some things I spotted:
&gt;
&gt; +        static cairo_font_options_t* fontOptions;
&gt; +        if (!fontOptions)
&gt; +           fontOptions = cairo_font_options_create();
&gt;
&gt; ^ Uninitialised variable, this will break in release builds.
&gt; You should be fine with just:
&gt;
&gt; static cairo_font_options_t* fontOptions = cairo_font_options_create();

Oh -- I didn&apos;t even notice I had done this.  I&apos;ll fix this immediately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70594</commentid>
    <comment_count>6</comment_count>
      <attachid>19118</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-13 19:40:49 -0800</bug_when>
    <thetext>Created attachment 19118
Revised patch based on alp&apos;s comments

Update against today&apos;s SVN and incorporating Alp&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71098</commentid>
    <comment_count>7</comment_count>
      <attachid>19199</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-18 17:40:20 -0800</bug_when>
    <thetext>Created attachment 19199
Second revision based on Alp and others comments.

Revised to increase code sharing between CG/Cairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71266</commentid>
    <comment_count>8</comment_count>
      <attachid>19231</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-20 10:44:05 -0800</bug_when>
    <thetext>Created attachment 19231
Third revision based on dhyatt and mitzpettel&apos;s comments

* Switched from &quot;platformFont&quot; to explicit &quot;cgFont&quot; and &quot;fontFace&quot; members
* Removed use of &quot;platformPrivateInit/Destroy/etc.&quot; and switched to more descriptive names (initGDIFont/platformCommonDestroy/etc.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71270</commentid>
    <comment_count>9</comment_count>
      <attachid>19231</attachid>
    <who name="">mitz</who>
    <bug_when>2008-02-20 11:44:33 -0800</bug_when>
    <thetext>Comment on attachment 19231
Third revision based on dhyatt and mitzpettel&apos;s comments

+    bool fontCreationFailed = (result-&gt;cgFont() == 0);

This should just say

+    bool fontCreationFailed = !result-&gt;cgFont();

(similarly for the Cairo version).

+#include &lt;wtf/RetainPtr.h&gt;

should come last in FontCustomPlatformDataCairo.cpp.

+    FontCustomPlatformDataCairo(cairo_font_face_t* fontFace)
+    : m_fontFace(fontFace)
+    {}

The initialization should be indented and the braces go on separate lines.

+FontCustomPlatformDataCairo* createFontCustomPlatformData(SharedBuffer* buffer);

No need to name the argument.

+    static cairo_font_options_t* fontOptions = 0;
+    if (!fontOptions)
+       fontOptions = cairo_font_options_create();
+    cairo_font_options_set_antialias(fontOptions, CAIRO_ANTIALIAS_SUBPIXEL);

No need to initialize the static variable to 0. But more importantly, Darin pointed out that you probably meant to include cairo_font_options_set_antialias() in the if block so that you only do it once.

SimpleFontData::platformDestroy() in SimpleFontDataCairoWin.cpp should call platformCommonDestroy().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71279</commentid>
    <comment_count>10</comment_count>
      <attachid>19234</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-20 12:51:48 -0800</bug_when>
    <thetext>Created attachment 19234
Fourth revision based on mitzpettel&apos;s comments

* Corrects formatting
* SimpleFontData::platformDestroy() in SimpleFontDataCairoWin.cpp now calls
platformCommonDestroy().
* cairo_font_options_set_antialias() now only called once during the initialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71309</commentid>
    <comment_count>11</comment_count>
      <attachid>19234</attachid>
    <who name="">mitz</who>
    <bug_when>2008-02-20 14:39:33 -0800</bug_when>
    <thetext>Comment on attachment 19234
Fourth revision based on mitzpettel&apos;s comments

r=me

Please remove this line when landing:

+        WARNING: NO TEST CASES ADDED OR CHANGED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71338</commentid>
    <comment_count>12</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2008-02-20 18:14:28 -0800</bug_when>
    <thetext>Landed in &lt;http://trac.webkit.org/projects/webkit/changeset/30441&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19102</attachid>
            <date>2008-02-12 20:40:51 -0800</date>
            <delta_ts>2008-02-13 19:40:49 -0800</delta_ts>
            <desc>Patch to add font support to Cairo/Win backend.</desc>
            <filename>cairo_win.patch</filename>
            <type>text/plain</type>
            <size>64732</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDE4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDgtMDItMTIgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzMzNgorICAgICAgICAg
IHVwZGF0ZSBDYWlyby9XaW4zMiBjb25maWd1cmF0aW9uIHdpdGggZm9udC90ZXh0IHN1cHBvcnQK
KworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiAgVXBkYXRlIHdpdGggbmV3IENH
IGZpbGVzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogIENo
YW5nZSBQTEFURk9STSBmcm9tIEdUSyB0byBDYWlybworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwOiBVc2UgY2ctYWdub3N0aWMgZm9udCBhY2Nlc3NvcgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6IG1ha2UgY2ctYWdub3N0aWMKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWlyb1dpbi5jcHA6IHByb3ZpZGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6fkZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm86
OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YS5oOiBtYWtlIGxlc3MgY2ctc3BlY2lmaWMKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OnNjYWxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6cmVhZEJpZ0VuZGlhbldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6ZW51bVN0eWxl
c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNHV2luLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpm
aWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlV2luLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Zmls
bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNldEZvbnQpOgorCiAyMDA4LTAy
LTEyICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiAzMDE4NykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTM5MDgsNyArMzkwOCw3IEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+
DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXEZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIg0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAiDQogCQkJCQkJPg0K
IAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCkBAIC0zOTQwLDcgKzM5NDAsNyBAQAogCQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cR2x5cGhQYWdlVHJlZU5vZGVX
aW4uY3BwIg0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEds
eXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJ
CTxGaWxlDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBAIHR5cGVkZWYgc3RydWN0
IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWwKICNpbmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTA2LDcgKzExMCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsK
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENBSVJPKQogICAgIHZv
aWQgc2V0Rm9udChjYWlyb190KikgY29uc3Q7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAzMDE4NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
ZwogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC0+cGxh
dGZvcm1EYXRhKCk7CiAKLSAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwgcGxhdGZvcm1E
YXRhLmNnRm9udCgpKTsKKyAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwgcGxhdGZvcm1E
YXRhLnBsYXRmb3JtRm9udCgpKTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAgbWF0cml4LmIgPSAtbWF0cml4LmI7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJl
dmlzaW9uIDMwMTg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4ICszNSwxMCBAQAogI2lu
Y2x1ZGUgIlVuaWNvZGVSYW5nZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxt
bGFuZy5oPgorI2lmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9X
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgogCiB1c2luZyBzdGQ6Om1pbjsKIApAQCAt
NDUsNyArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogCiB2b2lkIEZvbnRDYWNoZTo6cGxhdGZv
cm1Jbml0KCkKIHsKKyNpZiBQTEFURk9STShDRykKICAgICB3a1NldFVwRm9udENhY2hlKDE1MzYg
KiAxMDI0ICogNCk7IC8vIFRoaXMgc2l6ZSBtYXRjaGVzIE1hYy4KKyNlbmRpZgogfQogCiBJTUxh
bmdGb250TGluazIqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQpAQCAtNDE0LDcg
KzQxOCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFAKICAgICAK
ICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShoZm9u
dCwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmJvbGQo
KSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpLCB1c2VHREkpOwotICAgIGlmICghcmVzdWx0LT5j
Z0ZvbnQoKSkgeworICAgIGlmICghcmVzdWx0LT5wbGF0Zm9ybUZvbnQoKSkgewogICAgICAgICAv
LyBUaGUgY3JlYXRpb24gb2YgdGhlIENHRm9udFJlZiBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiAg
V2UgYWxyZWFkeSBhc3NlcnRlZCBpbiBkZWJ1ZyBidWlsZHMsIGJ1dCB0byBtYWtlCiAgICAgICAg
IC8vIGFic29sdXRlbHkgc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGlzIGZvbnQsIGdvIGFoZWFk
IGFuZCByZXR1cm4gMCBzbyB0aGF0IHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIG5leHQKICAgICAg
ICAgLy8gZm9udC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWly
b1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhaXJvV2luLmNwcAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiwzMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIAogICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIC8vIE5PVEU6ICBUaGlzIGlzIGNyaWJiZWQgYWxtb3N0IGVu
dGlyZWx5IGZyb20gRm9udEd0ay5jcHAuICBQZXJoYXBzCisgICAgLy8gaXQgY291bGQgYmUgcGxh
Y2VkIHNvbWV3aGVyZSBzaGFyZWQgYmV0d2VlbiBib3RoIHBsYXRmb3Jtcz8KKyAgICBjYWlyb190
KiBjciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc2F2
ZShjcik7CisKKyAgICAvLyBTZXQgdGhlIHRleHQgY29sb3IgdG8gdXNlIGZvciBkcmF3aW5nLgor
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICAgIENvbG9yIHBlbkNvbG9yID0g
Z3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICBwZW5Db2xvci5nZXRSR0JBKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKKworICAgIGZvbnQtPnNldEZvbnQoY3IpOworCisgICAgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gKEdseXBoQnVmZmVyR2x5cGgqKWdseXBoQnVmZmVyLmds
eXBocyhmcm9tKTsKKworICAgIGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKKyAgICAgICAgZ2x5cGhzW2ldLnggPSBv
ZmZzZXQ7CisgICAgICAgIGdseXBoc1tpXS55ID0gcG9pbnQueSgpOworICAgICAgICBvZmZzZXQg
Kz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKKyAgICB9CisgICAgY2Fpcm9fc2hv
d19nbHlwaHMoY3IsIGdseXBocywgbnVtR2x5cGhzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlybzo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybygpCit7CisgICBjYWlyb19mb250
X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQ2Fpcm86OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMpCit7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFj
ZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZURhdGEodm9p
ZCogZGF0YSkKK3sKKyAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYo
KTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvKiBjcmVhdGVGb250Q3VzdG9tUGxh
dGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVy
LCBidWZmZXIpOworCisgICAgYnVmZmVyLT5yZWYoKTsKKyAgICBIRk9OVCBmb250ID0gcmVpbnRl
cnByZXRfY2FzdDxIRk9OVD4oYnVmZmVyKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZh
Y2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250KTsKKyAgICBp
ZiAoIWZvbnRGYWNlKQorICAgICAgIHJldHVybiAwOworCisgICAgc3RhdGljIGNhaXJvX3VzZXJf
ZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91c2VyX2RhdGEo
Zm9udEZhY2UsICZidWZmZXJLZXksIGJ1ZmZlciwgcmVsZWFzZURhdGEpOworCisgICAgcmV0dXJu
IG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8oZm9udEZhY2UpOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQ2Fpcm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyb19oCisjZGVmaW5l
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyb19oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IEZvbnRD
dXN0b21QbGF0Zm9ybURhdGFDYWlybyA6IE5vbmNvcHlhYmxlIHsKKyAgICBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8oY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQorICAgIDogbV9mb250
RmFjZShmb250RmFjZSkKKyAgICB7fQorICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8o
KTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYyk7CisKKyAgICBjYWlyb19mb250X2ZhY2VfdCogbV9mb250RmFj
ZTsKK307CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyogY3JlYXRlRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CisKK30KKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCShy
ZXZpc2lvbiAzMDE4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5v
dCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1hYy5jcHAsIEZvbnRX
aW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsOCArMjYsMTcgQEAKIAogI2luY2x1ZGUgIlN0cmluZ0lt
cGwuaCIKIAotdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyAqSEZPTlQ7Ci10eXBlZGVmIHN0cnVjdCBD
R0ZvbnQgKkNHRm9udFJlZjsKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby13
aW4zMi5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOworCisjaWYg
UExBVEZPUk0oQ0cpCit0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIEZvbnRSZWY7CisjZWxpZiBQTEFU
Rk9STShDQUlSTykKK3R5cGVkZWYgY2Fpcm9fZm9udF9mYWNlX3QqIEZvbnRSZWY7CisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAv
LyBVc2VkIGZvciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNoZSdzIGhhc2ggdGFibGVz
LgogICAgIEZvbnRQbGF0Zm9ybURhdGEoRGVsZXRlZCkKICAgICA6IG1fZm9udCgoSEZPTlQpLTEp
Ci0gICAgLCBtX2NnRm9udChOVUxMKQorICAgICwgbV9wbGF0Zm9ybUZvbnQoTlVMTCkKICAgICAs
IG1fc2l6ZSgwKQogICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKGZhbHNlKQpAQCAtNTAsNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICBGb250UGxh
dGZvcm1EYXRhKCkKICAgICA6IG1fZm9udCgwKQotICAgICwgbV9jZ0ZvbnQoTlVMTCkKKyAgICAs
IG1fcGxhdGZvcm1Gb250KE5VTEwpCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fc3ludGhldGlj
Qm9sZChmYWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKQEAgLTU5LDExICs2
OCwxNSBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEoQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7
CisgICAgRm9udFBsYXRmb3JtRGF0YShGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgb2JsaXF1ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAogICAgIEhGT05UIGhmb250
KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2dGb250OyB9CisgICAgRm9udFJlZiBwbGF0Zm9ybUZvbnQoKSBjb25zdCB7
IHJldHVybiBtX3BsYXRmb3JtRm9udDsgfQorI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIHZvaWQg
c2V0Rm9udChjYWlyb190KiBmdCkgY29uc3Q7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2Nh
bGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorI2VuZGlmCiAKICAgICBm
bG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGZs
b2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQpAQCAtNzgsMTQgKzkxLDIzIEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29u
c3QKICAgICB7IAotICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udCAmJiBtX2Nn
Rm9udCA9PW90aGVyLm1fY2dGb250ICYmIG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKKyAgICAg
ICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQgJiYKKyAgICAgICAgICAgICAgIG1fcGxh
dGZvcm1Gb250ID09IG90aGVyLm1fcGxhdGZvcm1Gb250ICYmCisjaWYgUExBVEZPUk0oQ0FJUk8p
CisgICAgICAgICAgICAgICBtX3NjYWxlZEZvbnQgPT0gb3RoZXIubV9zY2FsZWRGb250ICYmCisj
ZW5kaWYKKyAgICAgICAgICAgICAgIG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKICAgICAgICAg
ICAgICAgIG1fc3ludGhldGljQm9sZCA9PSBvdGhlci5tX3N5bnRoZXRpY0JvbGQgJiYgbV9zeW50
aGV0aWNPYmxpcXVlID09IG90aGVyLm1fc3ludGhldGljT2JsaXF1ZSAmJgogICAgICAgICAgICAg
ICAgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIEhG
T05UIG1fZm9udDsKLSAgICBDR0ZvbnRSZWYgbV9jZ0ZvbnQ7CisgICAgRm9udFJlZiBtX3BsYXRm
b3JtRm9udDsKKworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IG1fc2NhbGVkRm9udDsKKyNlbmRpZgogCiAgICAgZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9z
eW50aGV0aWNCb2xkOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAzMDE1NSkJKGZyb20g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6MzAx
NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQg
bm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9u
dFdpbi5jcHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2Vz
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IEJvbGQgPSAoMSA8PCAwKTsKK3N0YXRpYyBj
b25zdCBpbnQgSXRhbGljID0gKDEgPDwgMSk7CitzdGF0aWMgY29uc3QgaW50IEJvbGRPYmxpcXVl
ID0gKDEgPDwgMik7CisKK3N0YXRpYyBpbmxpbmUgVVNIT1JUIHJlYWRCaWdFbmRpYW5Xb3JkKGNv
bnN0IEJZVEUqIHdvcmQpIHsgcmV0dXJuICh3b3JkWzBdIDw8IDgpIHwgd29yZFsxXTsgfQorCitz
dGF0aWMgQ0ZTdHJpbmdSZWYgZ2V0UG9zdFNjcmlwdE5hbWUoQ0ZTdHJpbmdSZWYgZmFjZU5hbWUs
IEhEQyBkYykKK3sKKyAgICBjb25zdCBEV09SRCBjTWF4TmFtZVRhYmxlU2l6ZSA9IDEwMjQgKiAx
MDI0OworCisgICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
ID4gbmFtZU1hcDsKKworICAgIC8vIENoZWNrIG91ciBoYXNoIGZpcnN0LgorICAgIFN0cmluZyBm
YWNlU3RyaW5nKGZhY2VOYW1lKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlc3VsdCA9
IG5hbWVNYXAuZ2V0KGZhY2VTdHJpbmcpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVy
biByZXN1bHQuZ2V0KCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIG9idGFpbiB0aGUgUG9zdFNjcmlw
dCBuYW1lIGZyb20gdGhlIG5hbWUgdGFibGUgYW5kIHVzZSBpdCBpbnN0ZWFkLC4KKyAgICBEV09S
RCBidWZmZXJTaXplID0gR2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgTlVMTCwgMCk7IC8vICJu
YW1lIiBiYWNrd2FyZHMKKyAgICBpZiAoYnVmZmVyU2l6ZSA9PSAwIHx8IGJ1ZmZlclNpemUgPT0g
R0RJX0VSUk9SIHx8IGJ1ZmZlclNpemUgPiBjTWF4TmFtZVRhYmxlU2l6ZSkKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAKKyAgICBWZWN0b3I8QllURT4gYnVmZmVyVmVjdG9yKGJ1ZmZlclNpemUp
OworICAgIEJZVEUqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CisgICAgaWYgKEdldEZv
bnREYXRhKGRjLCAnZW1hbicsIDAsIGJ1ZmZlciwgYnVmZmVyU2l6ZSkgPT0gR0RJX0VSUk9SKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChidWZmZXJTaXplIDwgNikKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBVU0hPUlQgbnVtYmVyT2ZSZWNvcmRzID0gcmVhZEJpZ0VuZGlh
bldvcmQoYnVmZmVyICsgMik7CisgICAgVUlOVCBzdHJpbmdzT2Zmc2V0ID0gcmVhZEJpZ0VuZGlh
bldvcmQoYnVmZmVyICsgNCk7CisgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0KQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEJZVEUqIHN0cmluZ3MgPSBidWZmZXIgKyBzdHJp
bmdzT2Zmc2V0OworCisgICAgLy8gTm93IHdhbGsgZWFjaCBuYW1lIHJlY29yZCBsb29raW5nIGZv
ciBhIE1hYyBvciBXaW5kb3dzIFBvc3RTY3JpcHQgbmFtZS4KKyAgICBVSU5UIG9mZnNldCA9IDY7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlJlY29yZHM7IGkrKykgeworICAgICAg
ICBpZiAoYnVmZmVyU2l6ZSA8IG9mZnNldCArIDEyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisKKyAgICAgICAgVVNIT1JUIHBsYXRmb3JtSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIg
KyBvZmZzZXQpOworICAgICAgICBVU0hPUlQgZW5jb2RpbmdJRCA9IHJlYWRCaWdFbmRpYW5Xb3Jk
KGJ1ZmZlciArIG9mZnNldCArIDIpOworICAgICAgICBVU0hPUlQgbGFuZ3VhZ2VJRCA9IHJlYWRC
aWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDQpOworICAgICAgICBVU0hPUlQgbmFtZUlE
ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNik7CisgICAgICAgIFVTSE9S
VCBsZW5ndGggPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA4KTsKKyAgICAg
ICAgVVNIT1JUIG5hbWVPZmZzZXQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQg
KyAxMCk7CisKKyAgICAgICAgaWYgKHBsYXRmb3JtSUQgPT0gMyAmJiBlbmNvZGluZ0lEID09IDEg
JiYgbGFuZ3VhZ2VJRCA9PSAweDQwOSAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIFdpbmRvd3MgUG9zdFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVyZWZvcmUgVVRGLTE2
LgorICAgICAgICAgICAgLy8gUGFzcyBCaWcgRW5kaWFuIGFzIHRoZSBlbmNvZGluZy4KKyAgICAg
ICAgICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNldCArIG5hbWVPZmZzZXQgKyBsZW5n
dGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXN1bHQuYWRv
cHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhOVUxMLCBzdHJpbmdzICsgbmFtZU9mZnNldCwg
bGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjE2QkUsIGZhbHNlKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUlEID09IDEgJiYgZW5jb2RpbmdJRCA9
PSAwICYmIGxhbmd1YWdlSUQgPT0gMCAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIE1hYyBQb3N0U2NyaXB0IG5hbWUgYW5kIGlzIHRoZXJlZm9yZSBBU0NJSS4KKyAg
ICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZXh0Zm9udHMvVFRS
ZWZNYW4vUk0wNi9DaGFwNm5hbWUuaHRtbAorICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBz
dHJpbmdzT2Zmc2V0ICsgbmFtZU9mZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICAgICAgICAgIHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5
dGVzKE5VTEwsIHN0cmluZ3MgKyBuYW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5n
QVNDSUksIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IG9mZnNldCArPSAxMjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBuYW1lTWFw
LnNldChmYWNlU3RyaW5nLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisK
K3N0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxv
Z0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0g
bFBhcmFtKQoreworICAgIGludCAqc3R5bGUgPSByZWludGVycHJldF9jYXN0PGludCo+KGxQYXJh
bSk7CisKKyAgICAvLyBGSVhNRTogSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgTHVjaWRhIHdlIGdv
IGFoZWFkIGFuZCBjb25zaWRlciBhIHdlaWdodCBvZiA2MDAgdG8gYmUgYm9sZC4KKyAgICAvLyBU
aGlzIGRvZXMgbWVhbiB3ZSdsbCBjb25zaWRlciBkZW1pYm9sZCBhbmQgc2VtaWJvbGQgZm9udHMg
b24gd2luZG93cyB0byBhbHNvIGJlIGJvbGQuICBUaGlzCisgICAgLy8gaXMgcmFyZSBlbm91Z2gg
dGhhdCBpdCBzZWVtcyBsaWtlIGFuIG9rIGhhY2sgZm9yIG5vdy4KKyAgICBpZiAobG9nRm9udC0+
bGZXZWlnaHQgPj0gNjAwKSB7CisgICAgICAgIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAg
ICAgICAgICpzdHlsZSB8PSBCb2xkT2JsaXF1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KnN0eWxlIHw9IEJvbGQ7CisgICAgfSBlbHNlIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAg
ICAgKnN0eWxlIHw9IEl0YWxpYzsKKworICAgIHJldHVybiAxOworfQorCitGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9z
aXplKHNpemUpCisgICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNl
KQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICwgbV91c2VHREkodXNlR0RJ
KQoreworICAgIEhEQyBoZGMgPSBHZXREQygwKTsKKyAgICBTYXZlREMoaGRjKTsKKyAgICAKKyAg
ICBTZWxlY3RPYmplY3QoaGRjLCBmb250KTsKKyAgICBVSU5UIGJ1ZmZlclNpemUgPSBHZXRPdXRs
aW5lVGV4dE1ldHJpY3MoaGRjLCAwLCBOVUxMKTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
YnVmZmVyU2l6ZSAhPSAwLCAiQml0bWFwIGZvbnRzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDb3JlR3Jh
cGhpY3MuIik7CisKKyAgICBpZiAoYnVmZmVyU2l6ZSAhPSAwKSB7CisgICAgICAgIE9VVExJTkVU
RVhUTUVUUklDVyogbWV0cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJT
aXplKTsKKworICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6ZSwg
bWV0cmljcyk7CisgICAgICAgIFdDSEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRyX3Qp
bWV0cmljcyArICh1aW50cHRyX3QpbWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKKworICAgICAgICBp
ZiAoIXVzZUdESSAmJiAoYm9sZCB8fCBvYmxpcXVlKSkgeworICAgICAgICAgICAgTE9HRk9OVCBs
b2dGb250OworCisgICAgICAgICAgICBpbnQgbGVuID0gbWluKChpbnQpd2NzbGVuKGZhY2VOYW1l
KSwgTEZfRkFDRVNJWkUgLSAxKTsKKyAgICAgICAgICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5h
bWUsIGZhY2VOYW1lLCBsZW4gKiBzaXplb2YoV09SRCkpOworICAgICAgICAgICAgbG9nRm9udC5s
ZkZhY2VOYW1lW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBt
ZXRyaWNzLT5vdG1UZXh0TWV0cmljcy50bUNoYXJTZXQ7CisgICAgICAgICAgICBsb2dGb250Lmxm
UGl0Y2hBbmRGYW1pbHkgPSAwOworCisgICAgICAgICAgICBpbnQgc3R5bGVzID0gMDsKKyAgICAg
ICAgICAgIEVudW1Gb250RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCBlbnVtU3R5bGVzQ2FsbGJh
Y2ssIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmc3R5bGVzKSwgMCk7CisKKyAgICAgICAgICAg
IC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gc3ludGhlc2l6ZSBib2xkIG9yIG9ibGlxdWUuIFRoZSBy
dWxlIHRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzIGhlcmUKKyAgICAgICAgICAgIC8vIGlzIHRoYXQg
aWYgdGhlIHJlcXVlc3RlZCBmb250IGlzIGJvbGQgYW5kIG9ibGlxdWUsIGFuZCBib3RoIGEgYm9s
ZCBmb250IGFuZCBhbiBvYmxpcXVlIGZvbnQKKyAgICAgICAgICAgIC8vIGV4aXN0LCB0aGUgYm9s
ZCBmb250IHNob3VsZCBiZSB1c2VkLCBhbmQgb2JsaXF1ZSBzeW50aGVzaXplZC4KKyAgICAgICAg
ICAgIGlmIChib2xkICYmIG9ibGlxdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVzID09
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0eWxlcyAmIEJvbGQpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhl
dGljT2JsaXF1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVzICYgSXRh
bGljKQorICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChib2xkICYmICghKHN0eWxlcyAmIEJvbGQpKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAo
b2JsaXF1ZSAmJiAhKHN0eWxlcyAmIEl0YWxpYykpCisgICAgICAgICAgICAgICAgICAgIG1fc3lu
dGhldGljT2JsaXF1ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdGhlIGZh
Y2UgbmFtZSBmaXJzdC4gIFdpbmRvd3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwg
YW5kIENHIGRvZXNuJ3Qga25vdyBhYm91dAorICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAg
SWYgdGhlIGNyZWF0ZSBmYWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCisgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihm
YWNlTmFtZSkpKTsKKyAgICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUo
ZnVsbE5hbWUuZ2V0KCkpOworICAgICAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgICAgICBD
RlN0cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdl
dCgpLCBoZGMpOworICAgICAgICAgICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7CisgICAgICAgICAg
ICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2NnRm9udCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZnJlZShtZXRyaWNzKTsKKyAgICB9CisKKyAgICBSZXN0b3JlREMoaGRj
LCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAg
OiBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jZ0ZvbnQoMCkKKyAgICAs
IG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUp
CisgICAgLCBtX3VzZUdESShmYWxzZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUpCisgICAgOiBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jZ0Zv
bnQoZm9udCkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX3VzZUdESShmYWxzZSkKK3sKK30KKworRm9udFBsYXRm
b3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworfQorCit9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5j
cHAJKHJldmlzaW9uIDMwMTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAg
SXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1h
Yy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBp
bnQgQ0FMTEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGMKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlx
dWUsIGJvb2wgdXNlR0RJKQogICAgIDogbV9mb250KGZvbnQpCiAgICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fY2dGb250KDApCisgICAgLCBtX3BsYXRmb3JtRm9udCgwKQogICAgICwgbV9zeW50
aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQogICAgICwg
bV91c2VHREkodXNlR0RJKQpAQCAtMTgyLDEyICsxODIsMTIgQEAgRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShIRk9OVAogICAgICAgICAvLyBUcnkgdGhlIGZhY2UgbmFtZSBmaXJz
dC4gIFdpbmRvd3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwgYW5kIENHIGRvZXNu
J3Qga25vdyBhYm91dAogICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAgSWYgdGhlIGNyZWF0
ZSBmYWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCiAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNlTmFtZSkpKTsK
LSAgICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVsbE5hbWUuZ2V0
KCkpOwotICAgICAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgIG1fcGxhdGZvcm1Gb250ID0g
Q0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1bGxOYW1lLmdldCgpKTsKKyAgICAgICAgaWYgKCFt
X3BsYXRmb3JtRm9udCkgewogICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgcG9zdFNjcmlwdE5hbWUg
PSBnZXRQb3N0U2NyaXB0TmFtZShmdWxsTmFtZS5nZXQoKSwgaGRjKTsKICAgICAgICAgICAgIGlm
IChwb3N0U2NyaXB0TmFtZSkgewotICAgICAgICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3Jl
YXRlV2l0aEZvbnROYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9jZ0ZvbnQpOworICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1Gb250ID0gQ0dGb250Q3JlYXRl
V2l0aEZvbnROYW1lKHBvc3RTY3JpcHROYW1lKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9w
bGF0Zm9ybUZvbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZyZWUobWV0
cmljcyk7CkBAIC0yMDAsNyArMjAwLDcgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShIRk9OVAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKICAgICA6IG1fZm9udCgwKQogICAgICwgbV9zaXpl
KHNpemUpCi0gICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9wbGF0Zm9ybUZvbnQoMCkKICAgICAs
IG1fc3ludGhldGljQm9sZChib2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUp
CiAgICAgLCBtX3VzZUdESShmYWxzZSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0CiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1
ZSkKICAgICA6IG1fZm9udCgwKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2NnRm9udChm
b250KQorICAgICwgbV9wbGF0Zm9ybUZvbnQoZm9udCkKICAgICAsIG1fc3ludGhldGljQm9sZChi
b2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3VzZUdESShm
YWxzZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZv
bnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QnJlbnQgRnVsZ2hhbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPGNhaXJvLXdpbjMy
Lmg+CisKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBj
b25zdCBpbnQgQm9sZCA9ICgxIDw8IDApOworc3RhdGljIGNvbnN0IGludCBJdGFsaWMgPSAoMSA8
PCAxKTsKK3N0YXRpYyBjb25zdCBpbnQgQm9sZE9ibGlxdWUgPSAoMSA8PCAyKTsKKworc3RhdGlj
IGlubGluZSBVU0hPUlQgcmVhZEJpZ0VuZGlhbldvcmQoY29uc3QgQllURSogd29yZCkgeyByZXR1
cm4gKHdvcmRbMF0gPDwgOCkgfCB3b3JkWzFdOyB9CisKK3N0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51
bVN0eWxlc0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMq
IG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAgIGludCAqc3R5
bGUgPSByZWludGVycHJldF9jYXN0PGludCo+KGxQYXJhbSk7CisKKyAgICAvLyBGSVhNRTogSW4g
b3JkZXIgdG8gYWNjb21tb2RhdGUgTHVjaWRhIHdlIGdvIGFoZWFkIGFuZCBjb25zaWRlciBhIHdl
aWdodCBvZiA2MDAgdG8gYmUgYm9sZC4KKyAgICAvLyBUaGlzIGRvZXMgbWVhbiB3ZSdsbCBjb25z
aWRlciBkZW1pYm9sZCBhbmQgc2VtaWJvbGQgZm9udHMgb24gd2luZG93cyB0byBhbHNvIGJlIGJv
bGQuICBUaGlzCisgICAgLy8gaXMgcmFyZSBlbm91Z2ggdGhhdCBpdCBzZWVtcyBsaWtlIGFuIG9r
IGhhY2sgZm9yIG5vdy4KKyAgICBpZiAobG9nRm9udC0+bGZXZWlnaHQgPj0gNjAwKSB7CisgICAg
ICAgIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgICAgICpzdHlsZSB8PSBCb2xkT2Js
aXF1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnN0eWxlIHw9IEJvbGQ7CisgICAgfSBl
bHNlIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgKnN0eWxlIHw9IEl0YWxpYzsKKwor
ICAgIHJldHVybiAxOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhG
T05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdE
SSkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3BsYXRm
b3JtRm9udCgwKQorICAgICwgbV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5bnRoZXRpY0JvbGQo
ZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgLCBtX3VzZUdESSh1
c2VHREkpCit7CisgICAgSERDIGhkYyA9IEdldERDKDApOworICAgIFNhdmVEQyhoZGMpOworICAg
IAorICAgIFNlbGVjdE9iamVjdChoZGMsIGZvbnQpOworICAgIFVJTlQgYnVmZmVyU2l6ZSA9IEdl
dE91dGxpbmVUZXh0TWV0cmljcyhoZGMsIDAsIE5VTEwpOworCisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShidWZmZXJTaXplICE9IDAsICJCaXRtYXAgZm9udHMgbm90IHN1cHBvcnRlZCB3aXRoIENv
cmVHcmFwaGljcy4iKTsKKworICAgIGlmIChidWZmZXJTaXplICE9IDApIHsKKyAgICAgICAgT1VU
TElORVRFWFRNRVRSSUNXKiBtZXRyaWNzID0gKE9VVExJTkVURVhUTUVUUklDVyopbWFsbG9jKGJ1
ZmZlclNpemUpOworCisgICAgICAgIEdldE91dGxpbmVUZXh0TWV0cmljc1coaGRjLCBidWZmZXJT
aXplLCBtZXRyaWNzKTsKKyAgICAgICAgV0NIQVIqIGZhY2VOYW1lID0gKFdDSEFSKikoKHVpbnRw
dHJfdCltZXRyaWNzICsgKHVpbnRwdHJfdCltZXRyaWNzLT5vdG1wRmFjZU5hbWUpOworCisgICAg
ICAgIGlmICghdXNlR0RJICYmIChib2xkIHx8IG9ibGlxdWUpKSB7CisgICAgICAgICAgICBMT0dG
T05UIGxvZ0ZvbnQ7CisKKyAgICAgICAgICAgIGludCBsZW4gPSBtaW4oKGludCl3Y3NsZW4oZmFj
ZU5hbWUpLCBMRl9GQUNFU0laRSAtIDEpOworICAgICAgICAgICAgbWVtY3B5KGxvZ0ZvbnQubGZG
YWNlTmFtZSwgZmFjZU5hbWUsIGxlbiAqIHNpemVvZihXT1JEKSk7CisgICAgICAgICAgICBsb2dG
b250LmxmRmFjZU5hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBsb2dGb250LmxmQ2hhclNl
dCA9IG1ldHJpY3MtPm90bVRleHRNZXRyaWNzLnRtQ2hhclNldDsKKyAgICAgICAgICAgIGxvZ0Zv
bnQubGZQaXRjaEFuZEZhbWlseSA9IDA7CisKKyAgICAgICAgICAgIGludCBzdHlsZXMgPSAwOwor
ICAgICAgICAgICAgRW51bUZvbnRGYW1pbGllc0V4KGhkYywgJmxvZ0ZvbnQsIGVudW1TdHlsZXND
YWxsYmFjaywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZzdHlsZXMpLCAwKTsKKworICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBzeW50aGVzaXplIGJvbGQgb3Igb2JsaXF1ZS4g
VGhlIHJ1bGUgdGhhdCBjb21wbGljYXRlcyB0aGluZ3MgaGVyZQorICAgICAgICAgICAgLy8gaXMg
dGhhdCBpZiB0aGUgcmVxdWVzdGVkIGZvbnQgaXMgYm9sZCBhbmQgb2JsaXF1ZSwgYW5kIGJvdGgg
YSBib2xkIGZvbnQgYW5kIGFuIG9ibGlxdWUgZm9udAorICAgICAgICAgICAgLy8gZXhpc3QsIHRo
ZSBib2xkIGZvbnQgc2hvdWxkIGJlIHVzZWQsIGFuZCBvYmxpcXVlIHN5bnRoZXNpemVkLgorICAg
ICAgICAgICAgaWYgKGJvbGQgJiYgb2JsaXF1ZSkgeworICAgICAgICAgICAgICAgIGlmIChzdHls
ZXMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3R5bGVzICYgQm9sZCkKKyAgICAgICAgICAgICAgICAgICAgbV9z
eW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZXMg
JiBJdGFsaWMpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGJvbGQgJiYgKCEoc3R5bGVzICYgQm9sZCkpKQorICAgICAg
ICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOworICAgICAgICAgICAgICBlbHNl
IGlmIChvYmxpcXVlICYmICEoc3R5bGVzICYgSXRhbGljKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGxhdGZv
cm1Gb250ID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7Cisg
ICAgICAgIGNhaXJvX21hdHJpeF90IHNpemVNYXRyaXgsIGN0bTsKKyAgICAgICAgY2Fpcm9fbWF0
cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxl
KCZzaXplTWF0cml4LCBzaXplLCBzaXplKTsKKworICAgICAgICBzdGF0aWMgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIGZvbnRPcHRpb25zOworICAgICAgICBpZiAoIWZvbnRPcHRpb25zKQorICAgICAg
ICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJPX0FOVElB
TElBU19TVUJQSVhFTCk7CisKKyAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2Zv
bnRfY3JlYXRlKG1fcGxhdGZvcm1Gb250LCAmc2l6ZU1hdHJpeCwgJmN0bSwgZm9udE9wdGlvbnMp
OworICAgICAgICBmcmVlKG1ldHJpY3MpOworICAgIH0KKworICAgIFJlc3RvcmVEQyhoZGMsIC0x
KTsKKyAgICBSZWxlYXNlREMoMCwgaGRjKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1f
Zm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3BsYXRmb3JtRm9udCgwKQorICAg
ICwgbV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV91c2VHREkoZmFsc2UpCit7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZv
bnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9u
dCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3BsYXRmb3JtRm9udCgwKQorICAgICwg
bV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV91c2VHREkoZmFsc2UpCit7CisgICBjYWly
b19tYXRyaXhfdCBmb250TWF0cml4OworICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRN
YXRyaXgsIHNpemUsIHNpemUpOworICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgY2Fpcm9fbWF0
cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9u
cyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKworICAgLy8gV2UgZm9yY2UgYW50aWFs
aWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAvLyB0
eXBvZ3JhcGhpYyBxdWFsaXRpZXMgZm9yIGN1c3RvbSBmb250cyBvbiBhbGwgcGxhdGZvcm1zLgor
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRf
U1RZTEVfTk9ORSk7CisgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25z
LCBDQUlST19BTlRJQUxJQVNfR1JBWSk7CisKKyAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxl
ZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOworICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpz
ZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NjYWxlZEZvbnQpOwor
CisgICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNyLCBtX3NjYWxlZEZvbnQpOworfQorCit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhV2luLmNwcAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjQg
KzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGlt
cGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIg
dGhhbgotICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KLSAqCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNp
bmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGludCBC
b2xkID0gKDEgPDwgMCk7Ci1zdGF0aWMgY29uc3QgaW50IEl0YWxpYyA9ICgxIDw8IDEpOwotc3Rh
dGljIGNvbnN0IGludCBCb2xkT2JsaXF1ZSA9ICgxIDw8IDIpOwotCi1zdGF0aWMgaW5saW5lIFVT
SE9SVCByZWFkQmlnRW5kaWFuV29yZChjb25zdCBCWVRFKiB3b3JkKSB7IHJldHVybiAod29yZFsw
XSA8PCA4KSB8IHdvcmRbMV07IH0KLQotc3RhdGljIENGU3RyaW5nUmVmIGdldFBvc3RTY3JpcHRO
YW1lKENGU3RyaW5nUmVmIGZhY2VOYW1lLCBIREMgZGMpCi17Ci0gICAgY29uc3QgRFdPUkQgY01h
eE5hbWVUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsKLQotICAgIHN0YXRpYyBIYXNoTWFwPFN0cmlu
ZywgUmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IG5hbWVNYXA7Ci0KLSAgICAvLyBDaGVjayBvdXIg
aGFzaCBmaXJzdC4KLSAgICBTdHJpbmcgZmFjZVN0cmluZyhmYWNlTmFtZSk7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiByZXN1bHQgPSBuYW1lTWFwLmdldChmYWNlU3RyaW5nKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byBvYnRhaW4gdGhlIFBvc3RTY3JpcHQgbmFtZSBmcm9tIHRoZSBuYW1lIHRhYmxlIGFuZCB1
c2UgaXQgaW5zdGVhZCwuCi0gICAgRFdPUkQgYnVmZmVyU2l6ZSA9IEdldEZvbnREYXRhKGRjLCAn
ZW1hbicsIDAsIE5VTEwsIDApOyAvLyAibmFtZSIgYmFja3dhcmRzCi0gICAgaWYgKGJ1ZmZlclNp
emUgPT0gMCB8fCBidWZmZXJTaXplID09IEdESV9FUlJPUiB8fCBidWZmZXJTaXplID4gY01heE5h
bWVUYWJsZVNpemUpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgCi0gICAgVmVjdG9yPEJZVEU+
IGJ1ZmZlclZlY3RvcihidWZmZXJTaXplKTsKLSAgICBCWVRFKiBidWZmZXIgPSBidWZmZXJWZWN0
b3IuZGF0YSgpOwotICAgIGlmIChHZXRGb250RGF0YShkYywgJ2VtYW4nLCAwLCBidWZmZXIsIGJ1
ZmZlclNpemUpID09IEdESV9FUlJPUikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAo
YnVmZmVyU2l6ZSA8IDYpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgVVNIT1JUIG51bWJl
ck9mUmVjb3JkcyA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIDIpOwotICAgIFVJTlQgc3Ry
aW5nc09mZnNldCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIDQpOwotICAgIGlmIChidWZm
ZXJTaXplIDwgc3RyaW5nc09mZnNldCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBCWVRF
KiBzdHJpbmdzID0gYnVmZmVyICsgc3RyaW5nc09mZnNldDsKLQotICAgIC8vIE5vdyB3YWxrIGVh
Y2ggbmFtZSByZWNvcmQgbG9va2luZyBmb3IgYSBNYWMgb3IgV2luZG93cyBQb3N0U2NyaXB0IG5h
bWUuCi0gICAgVUlOVCBvZmZzZXQgPSA2OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVy
T2ZSZWNvcmRzOyBpKyspIHsKLSAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBvZmZzZXQgKyAxMikK
LSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIFVTSE9SVCBwbGF0Zm9ybUlEID0g
cmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0KTsKLSAgICAgICAgVVNIT1JUIGVuY29k
aW5nSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyAyKTsKLSAgICAgICAg
VVNIT1JUIGxhbmd1YWdlSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA0
KTsKLSAgICAgICAgVVNIT1JUIG5hbWVJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9m
ZnNldCArIDYpOwotICAgICAgICBVU0hPUlQgbGVuZ3RoID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVm
ZmVyICsgb2Zmc2V0ICsgOCk7Ci0gICAgICAgIFVTSE9SVCBuYW1lT2Zmc2V0ID0gcmVhZEJpZ0Vu
ZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMTApOwotCi0gICAgICAgIGlmIChwbGF0Zm9ybUlE
ID09IDMgJiYgZW5jb2RpbmdJRCA9PSAxICYmIGxhbmd1YWdlSUQgPT0gMHg0MDkgJiYgbmFtZUlE
ID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBXaW5kb3dzIFBvc3RTY3JpcHQgbmFt
ZSBhbmQgaXMgdGhlcmVmb3JlIFVURi0xNi4KLSAgICAgICAgICAgIC8vIFBhc3MgQmlnIEVuZGlh
biBhcyB0aGUgZW5jb2RpbmcuCi0gICAgICAgICAgICBpZiAoYnVmZmVyU2l6ZSA8IHN0cmluZ3NP
ZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxM
OwotICAgICAgICAgICAgcmVzdWx0LmFkb3B0Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVM
TCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEYxNkJF
LCBmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAocGxhdGZv
cm1JRCA9PSAxICYmIGVuY29kaW5nSUQgPT0gMCAmJiBsYW5ndWFnZUlEID09IDAgJiYgbmFtZUlE
ID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBNYWMgUG9zdFNjcmlwdCBuYW1lIGFu
ZCBpcyB0aGVyZWZvcmUgQVNDSUkuCi0gICAgICAgICAgICAvLyBTZWUgaHR0cDovL2RldmVsb3Bl
ci5hcHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFuL1JNMDYvQ2hhcDZuYW1lLmh0bWwKLSAgICAg
ICAgICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNldCArIG5hbWVPZmZzZXQgKyBsZW5n
dGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQuYWRv
cHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhOVUxMLCBzdHJpbmdzICsgbmFtZU9mZnNldCwg
bGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJLCBmYWxzZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgKz0gMTI7Ci0gICAgfQotCi0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgbmFtZU1hcC5zZXQoZmFjZVN0cmluZywgcmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0LmdldCgpOwotfQotCi1zdGF0aWMgaW50IENBTExCQUNLIGVudW1TdHlsZXND
YWxsYmFjayhjb25zdCBMT0dGT05UKiBsb2dGb250LCBjb25zdCBURVhUTUVUUklDKiBtZXRyaWNz
LCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBpbnQgKnN0eWxlID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihsUGFyYW0pOwotCi0gICAgLy8gRklYTUU6IEluIG9yZGVyIHRv
IGFjY29tbW9kYXRlIEx1Y2lkYSB3ZSBnbyBhaGVhZCBhbmQgY29uc2lkZXIgYSB3ZWlnaHQgb2Yg
NjAwIHRvIGJlIGJvbGQuCi0gICAgLy8gVGhpcyBkb2VzIG1lYW4gd2UnbGwgY29uc2lkZXIgZGVt
aWJvbGQgYW5kIHNlbWlib2xkIGZvbnRzIG9uIHdpbmRvd3MgdG8gYWxzbyBiZSBib2xkLiAgVGhp
cwotICAgIC8vIGlzIHJhcmUgZW5vdWdoIHRoYXQgaXQgc2VlbXMgbGlrZSBhbiBvayBoYWNrIGZv
ciBub3cuCi0gICAgaWYgKGxvZ0ZvbnQtPmxmV2VpZ2h0ID49IDYwMCkgewotICAgICAgICBpZiAo
bG9nRm9udC0+bGZJdGFsaWMpCi0gICAgICAgICAgICAqc3R5bGUgfD0gQm9sZE9ibGlxdWU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICpzdHlsZSB8PSBCb2xkOwotICAgIH0gZWxzZSBpZiAo
bG9nRm9udC0+bGZJdGFsaWMpCi0gICAgICAgICpzdHlsZSB8PSBJdGFsaWM7Ci0KLSAgICByZXR1
cm4gMTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250
LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAg
OiBtX2ZvbnQoZm9udCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAg
ICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxz
ZSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsKLSAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0g
ICAgU2F2ZURDKGhkYyk7Ci0gICAgCi0gICAgU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7Ci0gICAg
VUlOVCBidWZmZXJTaXplID0gR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgMCwgTlVMTCk7Ci0K
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZlclNpemUgIT0gMCwgIkJpdG1hcCBmb250cyBu
b3Qgc3VwcG9ydGVkIHdpdGggQ29yZUdyYXBoaWNzLiIpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUg
IT0gMCkgewotICAgICAgICBPVVRMSU5FVEVYVE1FVFJJQ1cqIG1ldHJpY3MgPSAoT1VUTElORVRF
WFRNRVRSSUNXKiltYWxsb2MoYnVmZmVyU2l6ZSk7Ci0KLSAgICAgICAgR2V0T3V0bGluZVRleHRN
ZXRyaWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MpOwotICAgICAgICBXQ0hBUiogZmFjZU5h
bWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MgKyAodWludHB0cl90KW1ldHJpY3MtPm90
bXBGYWNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKCF1c2VHREkgJiYgKGJvbGQgfHwgb2JsaXF1ZSkp
IHsKLSAgICAgICAgICAgIExPR0ZPTlQgbG9nRm9udDsKLQotICAgICAgICAgICAgaW50IGxlbiA9
IG1pbigoaW50KXdjc2xlbihmYWNlTmFtZSksIExGX0ZBQ0VTSVpFIC0gMSk7Ci0gICAgICAgICAg
ICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBmYWNlTmFtZSwgbGVuICogc2l6ZW9mKFdPUkQp
KTsKLSAgICAgICAgICAgIGxvZ0ZvbnQubGZGYWNlTmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAg
ICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gbWV0cmljcy0+b3RtVGV4dE1ldHJpY3MudG1DaGFyU2V0
OwotICAgICAgICAgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKLQotICAgICAgICAg
ICAgaW50IHN0eWxlcyA9IDA7Ci0gICAgICAgICAgICBFbnVtRm9udEZhbWlsaWVzRXgoaGRjLCAm
bG9nRm9udCwgZW51bVN0eWxlc0NhbGxiYWNrLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnN0
eWxlcyksIDApOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHN5bnRoZXNp
emUgYm9sZCBvciBvYmxpcXVlLiBUaGUgcnVsZSB0aGF0IGNvbXBsaWNhdGVzIHRoaW5ncyBoZXJl
Ci0gICAgICAgICAgICAvLyBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgZm9udCBpcyBib2xkIGFu
ZCBvYmxpcXVlLCBhbmQgYm90aCBhIGJvbGQgZm9udCBhbmQgYW4gb2JsaXF1ZSBmb250Ci0gICAg
ICAgICAgICAvLyBleGlzdCwgdGhlIGJvbGQgZm9udCBzaG91bGQgYmUgdXNlZCwgYW5kIG9ibGlx
dWUgc3ludGhlc2l6ZWQuCi0gICAgICAgICAgICBpZiAoYm9sZCAmJiBvYmxpcXVlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0eWxlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3lu
dGhldGljQm9sZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZXMgJiBCb2xkKQotICAg
ICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHN0eWxlcyAmIEl0YWxpYykKLSAgICAgICAgICAgICAgICAgICAgbV9zeW50
aGV0aWNCb2xkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9sZCAmJiAoIShzdHls
ZXMgJiBCb2xkKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7
Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9ibGlxdWUgJiYgIShzdHlsZXMgJiBJdGFsaWMpKQot
ICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVHJ5IHRoZSBmYWNlIG5hbWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQg
dXAgbG9jYWxpemluZyB0aGlzIG5hbWUsIGFuZCBDRyBkb2Vzbid0IGtub3cgYWJvdXQKLSAgICAg
ICAgLy8gdGhlIGxvY2FsaXphdGlvbi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0
aGUgUG9zdFNjcmlwdCBuYW1lLgotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxO
YW1lKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVu
aUNoYXIqKWZhY2VOYW1lLCB3Y3NsZW4oZmFjZU5hbWUpKSk7Ci0gICAgICAgIG1fY2dGb250ID0g
Q0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1bGxOYW1lLmdldCgpKTsKLSAgICAgICAgaWYgKCFt
X2NnRm9udCkgewotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgcG9zdFNjcmlwdE5hbWUgPSBnZXRQ
b3N0U2NyaXB0TmFtZShmdWxsTmFtZS5nZXQoKSwgaGRjKTsKLSAgICAgICAgICAgIGlmIChwb3N0
U2NyaXB0TmFtZSkgewotICAgICAgICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0
aEZvbnROYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jZ0Zv
bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZyZWUobWV0cmljcyk7Ci0g
ICAgfQotCi0gICAgUmVzdG9yZURDKGhkYywgLTEpOwotICAgIFJlbGVhc2VEQygwLCBoZGMpOwot
fQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwgYm9vbCBvYmxpcXVlKQotICAgIDogbV9mb250KDApCi0gICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fY2dGb250KDApCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQotICAgICwgbV91c2VHREkoZmFsc2UpCi17Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGZvbnQsIGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQotICAgIDogbV9mb250KDApCi0gICAgLCBt
X3NpemUoc2l6ZSkKLSAgICAsIG1fY2dGb250KGZvbnQpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQo
Ym9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQotICAgICwgbV91c2VHREko
ZmFsc2UpCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDMwMTc0KQkoZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHA6MzAxNzQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5
c3RlbUludGVyZmFjZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdl
OjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sK
KyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBw
YWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rl
cnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZl
ckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgQ0dHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0ds
eXBoUGFnZTo6c2l6ZV07CisgICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEdseXBoIGds
eXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAg
ICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBm
b250RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJ
KHJldmlzaW9uIDMwMTc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQz
LDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bgogCiAgICAgYm9v
bCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgQ0dHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBo
UGFnZTo6c2l6ZV07Ci0gICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNn
Rm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAgd2tH
ZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnBsYXRmb3JtRm9udCgpLCBidWZmZXIs
IGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1
ZmZlcltpXTsKICAgICAgICAgaWYgKCFnbHlwaCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
CShyZXZpc2lvbiAzMDE3NCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVXaW4uY3BwOjMwMTc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBo
UGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3
aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFz
IFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1cHBv
cnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwor
ICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOworICAgIHdrR2V0
R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEds
eXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07
CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChv
ZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2
ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRy
ZWVOb2RlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAzMDE3NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
R2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE3ICs0MSwzMSBAQCBib29sIEdseXBoUGFnZTo6
ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJv
b2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlw
aFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5j
Z0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHbHlwaCBnbHlw
aCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9u
dERhdGEpOwotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisKKyAgICBIREMgZGMgPSBH
ZXREQygoSFdORCkwKTsKKyAgICBTYXZlREMoZGMpOworICAgIFNlbGVjdE9iamVjdChkYywgZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOworCisgICAgVEVYVE1FVFJJQyB0bTsKKyAg
ICBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsKKworICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltH
bHlwaFBhZ2U6OnNpemUgKiAyXTsKKyAgICBEV09SRCByZXN1bHQgPSBHZXRHbHlwaEluZGljZXMo
ZGMsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBsb2NhbEdseXBoQnVmZmVyLCAwKTsKKyAgICBib29s
IHN1Y2Nlc3MgPSByZXN1bHQgIT0gR0RJX0VSUk9SICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXN1bHQpID09IGJ1ZmZlckxlbmd0aDsKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEdseXBoIGds
eXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgICAgIGlmICghZ2x5cGgpCisgICAg
ICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZz
ZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIFJlc3RvcmVEQyhkYywg
LTEpOworICAgIFJlbGVhc2VEQygwLCBkYyk7CisKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlV2luLmNwcAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkds
eXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8gVGhlIGJ1ZmZlckxlbmd0
aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIg
aGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgotICAgIC8vIFdlIHdvbid0IHN1
cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNp
emUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdr
R2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2Nh
bEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJb
aV07Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRl
eChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOwotICAgICAgICAgICAg
aGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGhhdmVHbHlw
aHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAzMDE4NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5j
Z0ZvbnQoKTsKKyAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5wbGF0Zm9ybUZvbnQoKTsKICAg
ICBpbnQgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChmb250KTsKICAgICBpbnQgaURlc2NlbnQg
PSBDR0ZvbnRHZXREZXNjZW50KGZvbnQpOwogICAgIGludCBpTGluZUdhcCA9IENHRm9udEdldExl
YWRpbmcoZm9udCk7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKIHsKICAgICBpZiAoIWlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIERl
bGV0ZU9iamVjdChtX2ZvbnQuaGZvbnQoKSk7Ci0gICAgICAgIENHRm9udFJlbGVhc2UobV9mb250
LmNnRm9udCgpKTsKKyAgICAgICAgQ0dGb250UmVsZWFzZShtX2ZvbnQucGxhdGZvcm1Gb250KCkp
OwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGhhc2ggdGhpcyBvbiBXaW4zMiwgc28gaXQncyBl
ZmZlY3RpdmVseSBvd25lZCBieSB1cy4KQEAgLTE2Myw3ICsxNjMsNyBAQCBmbG9hdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICB9
CiAKLSAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5jZ0ZvbnQoKTsKKyAgICBDR0ZvbnRSZWYg
Zm9udCA9IG1fZm9udC5wbGF0Zm9ybUZvbnQoKTsKICAgICBmbG9hdCBwb2ludFNpemUgPSBtX2Zv
bnQuc2l6ZSgpOwogICAgIENHU2l6ZSBhZHZhbmNlOwogICAgIENHQWZmaW5lVHJhbnNmb3JtIG0g
PSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsOCBAQAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVk
ZSA8dGNoYXIuaD4KIApAQCAtNDYsOCArNDgsOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQogICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwogICAgIG1faXNTeXN0
ZW1Gb250ID0gZmFsc2U7CiAgICAgCisgICAgSERDIGhkYyA9IEdldERDKDApOworCiAgICAgaWYg
KG1fZm9udC51c2VHREkoKSkgewotICAgICAgICBIREMgaGRjID0gR2V0REMoMCk7CiAgICAgICAg
IEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKICAg
ICAgICAgT1VUTElORVRFWFRNRVRSSUMgbWV0cmljczsKICAgICAgICAgR2V0T3V0bGluZVRleHRN
ZXRyaWNzKGhkYywgc2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7CkBAIC03MiwxOSArNzUsNjAg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNlY3Rpb24gc2hvdWxkIGRldGVybWluZSBmb250
IGRpbWVuc2lvbnMgKHNlZSBDRyBpbXBsZW1lbnRhdGlvbikuCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBTYXZlREMoaGRjKTsKKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZv
bnQgPSBtX2ZvbnQuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlw
bGllciA9IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRG
b250KSAqIG1fZm9udC5zaXplKCk7CisKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxl
Y3RfZm9udChzY2FsZWRGb250LCBoZGMpOworCisgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljczsK
KyAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0ZXh0TWV0cmljcyk7CisgICAgbV9hc2NlbnQgPSAo
dGV4dE1ldHJpY3MudG1Bc2NlbnQgKiBtZXRyaWNzTXVsdGlwbGllcik7CisgICAgbV9kZXNjZW50
ID0gKHRleHRNZXRyaWNzLnRtRGVzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyKTsKKyAgICBtX3hI
ZWlnaHQgPSBtX2FzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGZvciBu
b24tVHJ1ZXR5cGUgZm9udHMuCisgICAgbV9saW5lR2FwID0gKHRleHRNZXRyaWNzLnRtRXh0ZXJu
YWxMZWFkaW5nICogbWV0cmljc011bHRpcGxpZXIpOworICAgIG1fbGluZVNwYWNpbmcgPSBtX2Fz
Y2VudCArIG1fZGVzY2VudCArIG1fbGluZUdhcDsKKworICAgIE9VVExJTkVURVhUTUVUUklDIG1l
dHJpY3M7CisgICAgaWYgKEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMsIHNpemVvZihtZXRyaWNz
KSwgJm1ldHJpY3MpID4gMCkgeworICAgICAgICAvLyBUaGlzIGlzIGEgVHJ1ZVR5cGUgZm9udC4g
IFdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGFuIGFjY3VyYXRlIHhIZWlnaHQKKyAgICAgICAgR0xZ
UEhNRVRSSUNTIGdtOworICAgICAgICBNQVQyIG1hdCA9IHsgMSwgMCwgMCwgMSB9OworICAgICAg
ICBEV09SRCBsZW4gPSBHZXRHbHlwaE91dGxpbmUoaGRjLCAneCcsIEdHT19NRVRSSUNTLCAmZ20s
IDAsIDAsICZtYXQpOworICAgICAgICBpZiAobGVuICE9IEdESV9FUlJPUiAmJiBnbS5nbXB0R2x5
cGhPcmlnaW4ueSA+IDApCisgICAgICAgICAgICBtX3hIZWlnaHQgPSBnbS5nbXB0R2x5cGhPcmln
aW4ueSAqIG1ldHJpY3NNdWx0aXBsaWVyOworICAgIH0KKworICAgIGNhaXJvX3dpbjMyX3NjYWxl
ZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250KTsKKworICAgIG1faXNTeXN0ZW1Gb250ID0gZmFs
c2U7CisgICAgbV9zY3JpcHRDYWNoZSA9IDA7CisgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9
IDA7CisKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CiB9
CiAKIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnQucGxhdGZvcm1G
b250KCkpOworICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9mb250LnNjYWxlZEZvbnQo
KSk7CisKKyAgICBEZWxldGVPYmplY3QobV9mb250Lmhmb250KCkpOworCisgICAgLy8gV2UgZG9u
J3QgaGFzaCB0aGlzIG9uIFdpbjMyLCBzbyBpdCdzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHVzLgor
ICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworCisgICAgU2NyaXB0RnJlZUNhY2hlKCZt
X3NjcmlwdENhY2hlKTsKKyAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAog
ZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKIHsKKyAgICBIREMgaGRjID0gR2V0REMoMCk7CisKICAgICBpZiAobV9mb250LnVzZUdE
SSgpKSB7Ci0gICAgICAgIEhEQyBoZGMgPSBHZXREQygwKTsKICAgICAgICAgSEdESU9CSiBvbGRG
b250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9mb250Lmhmb250KCkpOwogICAgICAgICBpbnQgd2lk
dGg7CiAgICAgICAgIEdldENoYXJXaWR0aEkoaGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKTsKQEAg
LTkzLDEwICsxMzcsMjcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bAogICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEZsZXNoIG91
dCB3aXRoIENhaXJvL3dpbjMyIGZvbnQgaW1wbGVtZW50YXRpb24KLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIFNhdmVEQyhoZGMpOworCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVk
Rm9udCA9IG1fZm9udC5zY2FsZWRGb250KCk7CisgICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRf
c2VsZWN0X2ZvbnQoc2NhbGVkRm9udCwgaGRjKTsKIAotICAgIHJldHVybiAwOworICAgIGludCB3
aWR0aDsKKyAgICBHZXRDaGFyV2lkdGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7CisKKyAg
ICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisKKyAgICBS
ZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CisKKyAgICBjb25zdCBk
b3VibGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfbWV0
cmljc19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX2ZvbnQuc2l6ZSgpOworICAgIHJldHVybiB3aWR0
aCAqIG1ldHJpY3NNdWx0aXBsaWVyOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250
KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZv
bnQoY3IpOwogfQogCiB9CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMzAxODcpCisrKyBXZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA4LTAyLTEyICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTczMzYKKyAgICAgICAgICB1cGRhdGUgQ2Fpcm8vV2luMzIgY29uZmlndXJhdGlv
biB3aXRoIGZvbnQvdGV4dCBzdXBwb3J0CisKKyAgICAgICAgKiBXZWJEcmFnQ2xpZW50LmNwcDog
QWRtaXQgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OmNy
ZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkZyYW1lOjpzcG9vbFBhZ2VzKToKKyAgICAgICAgKiBXZWJLaXRHcmFwaGljcy5jcHA6IGlt
cGxlbWVudCBDYWlyby9XaW4gdGV4dCBkcmF3aW5nCisgICAgICAgIChEcmF3VGV4dEF0UG9pbnQp
OgorICAgICAgICAoV2ViRHJhd1RleHQpOgorICAgICAgICAqIFdlYktpdEdyYXBoaWNzLmg6CisK
IDIwMDgtMDItMTIgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVc2UgYSBwcmVjb21waWxlZCBoZWFkZXIgdG8gYnVpbGQgV2ViS2l0LgpJbmRleDogV2Vi
S2l0L3dpbi9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkRy
YWdDbGllbnQuY3BwCShyZXZpc2lvbiAzMDE4NykKKysrIFdlYktpdC93aW4vV2ViRHJhZ0NsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJEcmFn
Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRHJvcFNvdXJjZS5oIgogI2luY2x1ZGUgIldlYktpdEdy
YXBoaWNzLmgiCkBAIC0yMjMsNiArMjI0LDcgQEAgRHJhZ0ltYWdlUmVmIFdlYkRyYWdDbGllbnQ6
OmNyZWF0ZURyYWdJbQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyNpZiBQTEFURk9STShD
RykKICAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZjsKICAgICBpbWFnZSA9IGFsbG9jSW1hZ2Uo
d29ya2luZ0RDLCBpbWFnZVNpemUsICZjb250ZXh0UmVmKTsKICAgICBpZiAoIWltYWdlKSB7CkBA
IC0yNTgsNiArMjYwLDEwIEBAIERyYWdJbWFnZVJlZiBXZWJEcmFnQ2xpZW50OjpjcmVhdGVEcmFn
SW0KICAgICBXZWJDb3JlRHJhd0RvdWJsZWRUZXh0QXRQb2ludChjb250ZXh0LCBsYWJlbCwgdGV4
dFBvcywgbGFiZWxGb250LCB0b3BDb2xvciwgYm90dG9tQ29sb3IpOwogCiAgICAgQ0dDb250ZXh0
UmVsZWFzZShjb250ZXh0UmVmKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQgKCk7CisjZW5k
aWYKKwogICAgIERlbGV0ZURDKHdvcmtpbmdEQyk7CiAgICAgUmVsZWFzZURDKDAsIGRjKTsKICAg
ICByZXR1cm4gaW1hZ2U7CkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMzAxODcpCisrKyBXZWJLaXQv
d2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwMSw2ICsyNzAxLDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6c3BvbwogICAgIGZvciAoVUlOVCBpaSA9
IHN0YXJ0UGFnZTsgaWkgPCBlbmRQYWdlOyBpaSsrKSB7CiAgICAgICAgIEludFJlY3QgcGFnZVJl
Y3QgPSBtX3BhZ2VSZWN0c1tpaV07CiAKKyNpZiBQTEFURk9STShDRykKICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShwY3R4KTsKIAogICAgICAgICBJbnRSZWN0IHByaW50UmVjdCA9IHByaW50
ZXJSZWN0KHByaW50REMpOwpAQCAtMjc0MCw2ICsyNzQxLDkgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJGcmFtZTo6c3BvbwogCiAgICAgICAgIENHQ29udGV4dEVuZFBhZ2UocGN0eCk7
CiAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGN0eCk7CisjZWxzZQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiAgICAgfQogIAogICAgIHJldHVybiBTX09LOwpJbmRl
eDogV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJLaXRHcmFwaGljcy5jcHAJKHJldmlzaW9uIDMwMTg3KQorKysgV2ViS2l0L3dpbi9XZWJL
aXRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgc3RhdGljIEZv
bnQgbWFrZUZvbnQoY29uc3QgV2ViRm9udERlc2NyaQogICAgIHJldHVybiBmb250OwogfQogCisj
aWYgUExBVEZPUk0oQ0cpCiB2b2lkIERyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYgY2dDb250
ZXh0LCBMUENUU1RSIHRleHQsIGludCBsZW5ndGgsIFBPSU5UIHBvaW50LCBjb25zdCBXZWJGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBDR0NvbG9yUmVmIGNvbG9yLCBpbnQgdW5kZXJsaW5l
ZEluZGV4LCBib29sIGRyYXdBc1Bhc3N3b3JkKQogewogICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGNnQ29udGV4dCk7CkBAIC03OSwxMCArODAsMjIgQEAgdm9pZCBEcmF3VGV4dEF0UG9pbnQo
Q0dDb250ZXh0UmVmIGNnQ29udAogICAgICAgICBkcmF3U3RyaW5nID0gZHJhd1N0cmluZy5pbXBs
KCktPnNlY3VyZShXZWJDb3JlOjpidWxsZXQpOwogICAgIFdlYkNvcmVEcmF3VGV4dEF0UG9pbnQo
Y29udGV4dCwgZHJhd1N0cmluZywgcG9pbnQsIG1ha2VGb250KGRlc2NyaXB0aW9uKSwgY29sb3Is
IHVuZGVybGluZWRJbmRleCk7CiB9CisjZWxpZiBQTEFURk9STShDQUlSTykKK3ZvaWQgRHJhd1Rl
eHRBdFBvaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTFBDVFNUUiB0ZXh0LCBpbnQgbGVu
Z3RoLCBQT0lOVCBwb2ludCwgY29uc3QgV2ViRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Y29uc3QgQ29sb3IqIGNvbG9yLCBpbnQgdW5kZXJsaW5lZEluZGV4LCBib29sIGRyYXdBc1Bhc3N3
b3JkKQoreworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IGRyYXdTdHJpbmcodGV4dCwgbGVuZ3RoKTsKKyAgICBpZiAoZHJhd0FzUGFzc3dvcmQpCisgICAg
ICAgIGRyYXdTdHJpbmcgPSBkcmF3U3RyaW5nLmltcGwoKS0+c2VjdXJlKFdlYkNvcmU6OmJ1bGxl
dCk7CisgICAgV2ViQ29yZURyYXdUZXh0QXRQb2ludCgqY29udGV4dCwgZHJhd1N0cmluZywgcG9p
bnQsIG1ha2VGb250KGRlc2NyaXB0aW9uKSwgKmNvbG9yLCB1bmRlcmxpbmVkSW5kZXgpOworfQor
I2VuZGlmCiAKIHZvaWQgV2ViRHJhd1RleHQoV2ViVGV4dFJlbmRlckluZm8qIGluZm8pCiB7Ci0g
ICAgaWYgKCFpbmZvIHx8IGluZm8tPnN0cnVjdFNpemUgIT0gc2l6ZW9mKFdlYlRleHRSZW5kZXJJ
bmZvKSB8fCAhaW5mby0+Y2dDb250ZXh0IHx8ICFpbmZvLT5kZXNjcmlwdGlvbikKKyAgICBpZiAo
IWluZm8gfHwgaW5mby0+c3RydWN0U2l6ZSAhPSBzaXplb2YoV2ViVGV4dFJlbmRlckluZm8pIHx8
ICFpbmZvLT5nQ29udGV4dCB8fCAhaW5mby0+ZGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybjsK
IAogICAgIGludCBvbGRGb250U21vb3RoaW5nTGV2ZWwgPSAtMTsKQEAgLTkxLDcgKzEwNCw3IEBA
IHZvaWQgV2ViRHJhd1RleHQoV2ViVGV4dFJlbmRlckluZm8qIGluZm8KICAgICAgICAgd2tTZXRG
b250U21vb3RoaW5nTGV2ZWwoaW5mby0+b3ZlcnJpZGVTbW9vdGhpbmdMZXZlbCk7CiAgICAgfQog
Ci0gICAgRHJhd1RleHRBdFBvaW50KGluZm8tPmNnQ29udGV4dCwgaW5mby0+dGV4dCwgaW5mby0+
bGVuZ3RoLCBpbmZvLT5wdCwgKihpbmZvLT5kZXNjcmlwdGlvbiksIGluZm8tPmNvbG9yLCBpbmZv
LT51bmRlcmxpbmVkSW5kZXgsIGluZm8tPmRyYXdBc1Bhc3N3b3JkKTsKKyAgICBEcmF3VGV4dEF0
UG9pbnQoaW5mby0+Z0NvbnRleHQsIGluZm8tPnRleHQsIGluZm8tPmxlbmd0aCwgaW5mby0+cHQs
ICooaW5mby0+ZGVzY3JpcHRpb24pLCBpbmZvLT5jb2xvciwgaW5mby0+dW5kZXJsaW5lZEluZGV4
LCBpbmZvLT5kcmF3QXNQYXNzd29yZCk7CiAKICAgICBpZiAoaW5mby0+b3ZlcnJpZGVTbW9vdGhp
bmdMZXZlbCA+PSAwKQogICAgICAgICB3a1NldEZvbnRTbW9vdGhpbmdMZXZlbChvbGRGb250U21v
b3RoaW5nTGV2ZWwpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vV2ViS2l0R3JhcGhpY3MuaAkocmV2aXNpb24gMzAxODcpCisrKyBX
ZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE1
IEBACiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKKyNpZiBQTEFURk9STShDRykKIHR5cGVkZWYg
c3RydWN0IENHQ29sb3IqIENHQ29sb3JSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENH
Q29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ29udGV4dFJlZjsKK3R5cGVk
ZWYgY29uc3QgQ0dDb2xvclJlZiBDb2xvclJlZjsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgordHlwZWRlZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqIENvbnRleHRSZWY7Cit0eXBlZGVmIGNvbnN0IFdlYkNvcmU6OkNvbG9yKiBDb2xvclJlZjsK
KyNlbmRpZgogCiB0eXBlZGVmIHdjaGFyX3QgV0NIQVI7CiB0eXBlZGVmIF9fbnVsbHRlcm1pbmF0
ZWQgY29uc3QgV0NIQVIqIExQQ1dTVFI7CkBAIC00NiwxOCArNTMsMTggQEAgc3RydWN0IFdlYkZv
bnREZXNjcmlwdGlvbiB7CiBzdHJ1Y3QgV2ViVGV4dFJlbmRlckluZm8KIHsKICAgICBEV09SRCBz
dHJ1Y3RTaXplOwotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQ7CisgICAgQ29udGV4dFJlZiBn
Q29udGV4dDsKICAgICBMUENUU1RSIHRleHQ7CiAgICAgaW50IGxlbmd0aDsKICAgICBQT0lOVCBw
dDsKICAgICBjb25zdCBXZWJGb250RGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uOwotICAgIENHQ29s
b3JSZWYgY29sb3I7CisgICAgQ29sb3JSZWYgY29sb3I7CiAgICAgaW50IHVuZGVybGluZWRJbmRl
eDsKICAgICBib29sIGRyYXdBc1Bhc3N3b3JkOwogICAgIGludCBvdmVycmlkZVNtb290aGluZ0xl
dmVsOyAvLyBwYXNzIGluIC0xIGlmIGNhbGxlciBkb2VzIG5vdCB3YW50IHRvIG92ZXJyaWRlIHNt
b290aGluZyBsZXZlbAogfTsKIAotdm9pZCBEcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBM
UENUU1RSIHRleHQsIGludCBsZW5ndGgsIFBPSU5ULCBjb25zdCBXZWJGb250RGVzY3JpcHRpb24m
LCBDR0NvbG9yUmVmLCBpbnQgdW5kZXJsaW5lZEluZGV4ID0gLTEsIGJvb2wgZHJhd0FzUGFzc3dv
cmQgPSBmYWxzZSk7Cit2b2lkIERyYXdUZXh0QXRQb2ludChDb250ZXh0UmVmLCBMUENUU1RSIHRl
eHQsIGludCBsZW5ndGgsIFBPSU5ULCBjb25zdCBXZWJGb250RGVzY3JpcHRpb24mLCBDb2xvclJl
ZiwgaW50IHVuZGVybGluZWRJbmRleCA9IC0xLCBib29sIGRyYXdBc1Bhc3N3b3JkID0gZmFsc2Up
Owogdm9pZCBXZWJEcmF3VGV4dChXZWJUZXh0UmVuZGVySW5mbyopOwogZmxvYXQgVGV4dEZsb2F0
V2lkdGgoTFBDVFNUUiB0ZXh0LCBpbnQgbGVuZ3RoLCBjb25zdCBXZWJGb250RGVzY3JpcHRpb24m
KTsKIHZvaWQgRm9udE1ldHJpY3MoY29uc3QgV2ViRm9udERlc2NyaXB0aW9uJiwgaW50KiBhc2Nl
bnQsIGludCogZGVzY2VudCwgaW50KiBsaW5lU3BhY2luZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19118</attachid>
            <date>2008-02-13 19:40:49 -0800</date>
            <delta_ts>2008-02-18 17:40:20 -0800</delta_ts>
            <desc>Revised patch based on alp&apos;s comments</desc>
            <filename>cairo_win32.patch</filename>
            <type>text/plain</type>
            <size>65448</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDIxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDgtMDItMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzMzNgorICAgICAgICAg
IHVwZGF0ZSBDYWlyby9XaW4zMiBjb25maWd1cmF0aW9uIHdpdGggZm9udC90ZXh0IHN1cHBvcnQK
KworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiAgVXBkYXRlIHdpdGggbmV3IENH
IGZpbGVzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogIENo
YW5nZSBQTEFURk9STSBmcm9tIEdUSyB0byBDYWlybworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwOiBVc2UgY2ctYWdub3N0aWMgZm9udCBhY2Nlc3NvcgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6IG1ha2UgY2ctYWdub3N0aWMKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWlyb1dpbi5jcHA6IHByb3ZpZGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6fkZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm86
OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YS5oOiBtYWtlIGxlc3MgY2ctc3BlY2lmaWMKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OnNjYWxlZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6cmVhZEJpZ0VuZGlhbldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6ZW51bVN0eWxl
c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNHV2luLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpm
aWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlV2luLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Zmls
bCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fp
cm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNldEZvbnQpOgorCiAyMDA4LTAy
LTEzICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAkocmV2aXNpb24gMzAyMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBAIHR5cGVk
ZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWwKICNpbmNsdWRlIDx1c3AxMC5oPgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby5oPgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwpAQCAtMTA2
LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseU1hY0FzY2Vu
dEhhY2soKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENBSVJP
KQogICAgIHZvaWQgc2V0Rm9udChjYWlyb190KikgY29uc3Q7CiAjZW5kaWYKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAzMDIx
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogZwogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0g
Zm9udC0+cGxhdGZvcm1EYXRhKCk7CiAKLSAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwg
cGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKKyAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwg
cGxhdGZvcm1EYXRhLnBsYXRmb3JtRm9udCgpKTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CiAgICAgbWF0cml4LmIgPSAtbWF0cml4
LmI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAJKHJldmlzaW9uIDMwMjE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4ICszNSwx
MCBAQAogI2luY2x1ZGUgIlVuaWNvZGVSYW5nZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNp
bmNsdWRlIDxtbGFuZy5oPgorI2lmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgogCiB1c2luZyBzdGQ6Om1p
bjsKIApAQCAtNDUsNyArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogCiB2b2lkIEZvbnRDYWNo
ZTo6cGxhdGZvcm1Jbml0KCkKIHsKKyNpZiBQTEFURk9STShDRykKICAgICB3a1NldFVwRm9udENh
Y2hlKDE1MzYgKiAxMDI0ICogNCk7IC8vIFRoaXMgc2l6ZSBtYXRjaGVzIE1hYy4KKyNlbmRpZgog
fQogCiBJTUxhbmdGb250TGluazIqIEZvbnRDYWNoZTo6Z2V0Rm9udExpbmtJbnRlcmZhY2UoKQpA
QCAtNDE0LDcgKzQxOCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFAKICAgICAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3Jt
RGF0YShoZm9udCwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmJvbGQoKSwgZm9udERlc2NyaXB0aW9uLml0YWxpYygpLCB1c2VHREkpOwotICAgIGlmICgh
cmVzdWx0LT5jZ0ZvbnQoKSkgeworICAgIGlmICghcmVzdWx0LT5wbGF0Zm9ybUZvbnQoKSkgewog
ICAgICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIENHRm9udFJlZiBmYWlsZWQgZm9yIHNvbWUg
cmVhc29uLiAgV2UgYWxyZWFkeSBhc3NlcnRlZCBpbiBkZWJ1ZyBidWlsZHMsIGJ1dCB0byBtYWtl
CiAgICAgICAgIC8vIGFic29sdXRlbHkgc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGlzIGZvbnQs
IGdvIGFoZWFkIGFuZCByZXR1cm4gMCBzbyB0aGF0IHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIG5l
eHQKICAgICAgICAgLy8gZm9udC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhaXJvV2luLmNwcAkocmV2aXNpb24gMzAyMTgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLQotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgCi0gICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8u
aCIKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvKCkKK3sKKyAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9udEZhY2UpOworfQorCitG
b250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Zm9udFBsYXRmb3Jt
RGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKK3sKKyAgICByZXR1cm4gRm9u
dFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0
aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8qIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7
CisgICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7CisKKyAgICBidWZmZXItPnJlZigpOwor
ICAgIEhGT05UIGZvbnQgPSByZWludGVycHJldF9jYXN0PEhGT05UPihidWZmZXIpOworICAgIGNh
aXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNhaXJvX3dpbjMyX2ZvbnRfZmFjZV9jcmVhdGVf
Zm9yX2hmb250KGZvbnQpOworICAgIGlmICghZm9udEZhY2UpCisgICAgICAgcmV0dXJuIDA7CisK
KyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKKyAgICBjYWlyb19m
b250X2ZhY2Vfc2V0X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCByZWxl
YXNlRGF0YSk7CisKKyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyhm
b250RmFjZSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YUNhaXJvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YUNhaXJvX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvX2gKKwor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgU2hhcmVk
QnVmZmVyOworCitzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvIDogTm9uY29weWFi
bGUgeworICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyhjYWlyb19mb250X2ZhY2VfdCog
Zm9udEZhY2UpCisgICAgOiBtX2ZvbnRGYWNlKGZvbnRGYWNlKQorICAgIHt9CisgICAgfkZvbnRD
dXN0b21QbGF0Zm9ybURhdGFDYWlybygpOworCisgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxh
dGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKKworICAgIGNhaXJv
X2ZvbnRfZmFjZV90KiBtX2ZvbnRGYWNlOworfTsKKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNh
aXJvKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKTsK
KworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDMwMjE4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFu
CiAgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgogICoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw4ICsyNiwxNyBA
QAogCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgogCi10eXBlZGVmIHN0cnVjdCBIRk9OVF9fICpI
Rk9OVDsKLXR5cGVkZWYgc3RydWN0IENHRm9udCAqQ0dGb250UmVmOworI2lmIFBMQVRGT1JNKENB
SVJPKQorI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qg
SEZPTlRfXyogSEZPTlQ7CisKKyNpZiBQTEFURk9STShDRykKK3R5cGVkZWYgc3RydWN0IENHRm9u
dCogRm9udFJlZjsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQordHlwZWRlZiBjYWlyb19mb250X2Zh
Y2VfdCogRm9udFJlZjsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcg
KzUwLDcgQEAgcHVibGljOgogICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBm
b250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuCiAgICAgRm9udFBsYXRmb3JtRGF0YShEZWxldGVkKQog
ICAgIDogbV9mb250KChIRk9OVCktMSkKLSAgICAsIG1fY2dGb250KE5VTEwpCisgICAgLCBtX3Bs
YXRmb3JtRm9udChOVUxMKQogICAgICwgbV9zaXplKDApCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQo
ZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCkBAIC01MCw3ICs1OSw3IEBA
IHB1YmxpYzoKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEoKQogICAgIDogbV9mb250KDApCi0gICAg
LCBtX2NnRm9udChOVUxMKQorICAgICwgbV9wbGF0Zm9ybUZvbnQoTlVMTCkKICAgICAsIG1fc2l6
ZSgwKQogICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0aWNPYmxp
cXVlKGZhbHNlKQpAQCAtNTksMTEgKzY4LDE1IEBAIHB1YmxpYzoKIAogICAgIEZvbnRQbGF0Zm9y
bURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVz
ZUdESSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
b2JsaXF1ZSk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZsb2F0IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKEZvbnRSZWYsIGZs
b2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKICAgICB+Rm9udFBsYXRmb3JtRGF0
YSgpOwogCiAgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KLSAgICBD
R0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQ7IH0KKyAgICBGb250UmVm
IHBsYXRmb3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1Gb250OyB9CisjaWYgUExB
VEZPUk0oQ0FJUk8pCisgICAgdm9pZCBzZXRGb250KGNhaXJvX3QqIGZ0KSBjb25zdDsKKyAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRG
b250OyB9CisjZW5kaWYKIAogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KICAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CkBAIC03
OCwxNCArOTEsMjMgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtX2ZvbnQg
PT0gb3RoZXIubV9mb250ICYmIG1fY2dGb250ID09b3RoZXIubV9jZ0ZvbnQgJiYgbV9zaXplID09
IG90aGVyLm1fc2l6ZSAmJgorICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udCAm
JgorICAgICAgICAgICAgICAgbV9wbGF0Zm9ybUZvbnQgPT0gb3RoZXIubV9wbGF0Zm9ybUZvbnQg
JiYKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgICAgICAgIG1fc2NhbGVkRm9udCA9PSBv
dGhlci5tX3NjYWxlZEZvbnQgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgbV9zaXplID09IG90
aGVyLm1fc2l6ZSAmJgogICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID09IG90aGVyLm1f
c3ludGhldGljQm9sZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNP
YmxpcXVlICYmCiAgICAgICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKICAg
ICB9CiAKIHByaXZhdGU6CiAgICAgSEZPTlQgbV9mb250OwotICAgIENHRm9udFJlZiBtX2NnRm9u
dDsKKyAgICBGb250UmVmIG1fcGxhdGZvcm1Gb250OworCisjaWYgUExBVEZPUk0oQ0FJUk8pCisg
ICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OworI2VuZGlmCiAKICAgICBmbG9h
dCBtX3NpemU7CiAgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJ
KHJldmlzaW9uIDMwMTU1KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhV2luLmNwcDozMDE1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBs
ZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRo
YW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5n
IHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQgQm9s
ZCA9ICgxIDw8IDApOworc3RhdGljIGNvbnN0IGludCBJdGFsaWMgPSAoMSA8PCAxKTsKK3N0YXRp
YyBjb25zdCBpbnQgQm9sZE9ibGlxdWUgPSAoMSA8PCAyKTsKKworc3RhdGljIGlubGluZSBVU0hP
UlQgcmVhZEJpZ0VuZGlhbldvcmQoY29uc3QgQllURSogd29yZCkgeyByZXR1cm4gKHdvcmRbMF0g
PDwgOCkgfCB3b3JkWzFdOyB9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBnZXRQb3N0U2NyaXB0TmFt
ZShDRlN0cmluZ1JlZiBmYWNlTmFtZSwgSERDIGRjKQoreworICAgIGNvbnN0IERXT1JEIGNNYXhO
YW1lVGFibGVTaXplID0gMTAyNCAqIDEwMjQ7CisKKyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcs
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiBuYW1lTWFwOworCisgICAgLy8gQ2hlY2sgb3VyIGhh
c2ggZmlyc3QuCisgICAgU3RyaW5nIGZhY2VTdHJpbmcoZmFjZU5hbWUpOworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gcmVzdWx0ID0gbmFtZU1hcC5nZXQoZmFjZVN0cmluZyk7CisgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKKworICAgIC8vIFdlIG5lZWQg
dG8gb2J0YWluIHRoZSBQb3N0U2NyaXB0IG5hbWUgZnJvbSB0aGUgbmFtZSB0YWJsZSBhbmQgdXNl
IGl0IGluc3RlYWQsLgorICAgIERXT1JEIGJ1ZmZlclNpemUgPSBHZXRGb250RGF0YShkYywgJ2Vt
YW4nLCAwLCBOVUxMLCAwKTsgLy8gIm5hbWUiIGJhY2t3YXJkcworICAgIGlmIChidWZmZXJTaXpl
ID09IDAgfHwgYnVmZmVyU2l6ZSA9PSBHRElfRVJST1IgfHwgYnVmZmVyU2l6ZSA+IGNNYXhOYW1l
VGFibGVTaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgIAorICAgIFZlY3RvcjxCWVRFPiBi
dWZmZXJWZWN0b3IoYnVmZmVyU2l6ZSk7CisgICAgQllURSogYnVmZmVyID0gYnVmZmVyVmVjdG9y
LmRhdGEoKTsKKyAgICBpZiAoR2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgYnVmZmVyLCBidWZm
ZXJTaXplKSA9PSBHRElfRVJST1IpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGJ1
ZmZlclNpemUgPCA2KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFVTSE9SVCBudW1iZXJP
ZlJlY29yZHMgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyAyKTsKKyAgICBVSU5UIHN0cmlu
Z3NPZmZzZXQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyA0KTsKKyAgICBpZiAoYnVmZmVy
U2l6ZSA8IHN0cmluZ3NPZmZzZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQllURSog
c3RyaW5ncyA9IGJ1ZmZlciArIHN0cmluZ3NPZmZzZXQ7CisKKyAgICAvLyBOb3cgd2FsayBlYWNo
IG5hbWUgcmVjb3JkIGxvb2tpbmcgZm9yIGEgTWFjIG9yIFdpbmRvd3MgUG9zdFNjcmlwdCBuYW1l
LgorICAgIFVJTlQgb2Zmc2V0ID0gNjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
UmVjb3JkczsgaSsrKSB7CisgICAgICAgIGlmIChidWZmZXJTaXplIDwgb2Zmc2V0ICsgMTIpCisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBVU0hPUlQgcGxhdGZvcm1JRCA9IHJl
YWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCk7CisgICAgICAgIFVTSE9SVCBlbmNvZGlu
Z0lEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMik7CisgICAgICAgIFVT
SE9SVCBsYW5ndWFnZUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNCk7
CisgICAgICAgIFVTSE9SVCBuYW1lSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZz
ZXQgKyA2KTsKKyAgICAgICAgVVNIT1JUIGxlbmd0aCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZl
ciArIG9mZnNldCArIDgpOworICAgICAgICBVU0hPUlQgbmFtZU9mZnNldCA9IHJlYWRCaWdFbmRp
YW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDEwKTsKKworICAgICAgICBpZiAocGxhdGZvcm1JRCA9
PSAzICYmIGVuY29kaW5nSUQgPT0gMSAmJiBsYW5ndWFnZUlEID09IDB4NDA5ICYmIG5hbWVJRCA9
PSA2KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgV2luZG93cyBQb3N0U2NyaXB0IG5hbWUg
YW5kIGlzIHRoZXJlZm9yZSBVVEYtMTYuCisgICAgICAgICAgICAvLyBQYXNzIEJpZyBFbmRpYW4g
YXMgdGhlIGVuY29kaW5nLgorICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zm
c2V0ICsgbmFtZU9mZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEws
IHN0cmluZ3MgKyBuYW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGMTZCRSwg
ZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3Jt
SUQgPT0gMSAmJiBlbmNvZGluZ0lEID09IDAgJiYgbGFuZ3VhZ2VJRCA9PSAwICYmIG5hbWVJRCA9
PSA2KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTWFjIFBvc3RTY3JpcHQgbmFtZSBhbmQg
aXMgdGhlcmVmb3JlIEFTQ0lJLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9kZXZlbG9wZXIu
YXBwbGUuY29tL3RleHRmb250cy9UVFJlZk1hbi9STTA2L0NoYXA2bmFtZS5odG1sCisgICAgICAg
ICAgICBpZiAoYnVmZmVyU2l6ZSA8IHN0cmluZ3NPZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3Ro
KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmVzdWx0LmFkb3B0
Q0YoQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxl
bmd0aCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgb2Zmc2V0ICs9IDEyOworICAgIH0KKworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIG5hbWVNYXAuc2V0KGZhY2VTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdC5nZXQoKTsKK30KKworc3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2Fs
bGJhY2soY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywg
RFdPUkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCit7CisgICAgaW50ICpzdHlsZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4obFBhcmFtKTsKKworICAgIC8vIEZJWE1FOiBJbiBvcmRlciB0byBh
Y2NvbW1vZGF0ZSBMdWNpZGEgd2UgZ28gYWhlYWQgYW5kIGNvbnNpZGVyIGEgd2VpZ2h0IG9mIDYw
MCB0byBiZSBib2xkLgorICAgIC8vIFRoaXMgZG9lcyBtZWFuIHdlJ2xsIGNvbnNpZGVyIGRlbWli
b2xkIGFuZCBzZW1pYm9sZCBmb250cyBvbiB3aW5kb3dzIHRvIGFsc28gYmUgYm9sZC4gIFRoaXMK
KyAgICAvLyBpcyByYXJlIGVub3VnaCB0aGF0IGl0IHNlZW1zIGxpa2UgYW4gb2sgaGFjayBmb3Ig
bm93LgorICAgIGlmIChsb2dGb250LT5sZldlaWdodCA+PSA2MDApIHsKKyAgICAgICAgaWYgKGxv
Z0ZvbnQtPmxmSXRhbGljKQorICAgICAgICAgICAgKnN0eWxlIHw9IEJvbGRPYmxpcXVlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICAqc3R5bGUgfD0gQm9sZDsKKyAgICB9IGVsc2UgaWYgKGxv
Z0ZvbnQtPmxmSXRhbGljKQorICAgICAgICAqc3R5bGUgfD0gSXRhbGljOworCisgICAgcmV0dXJu
IDE7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwg
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorICAgIDog
bV9mb250KGZvbnQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY2dGb250KDApCisgICAg
LCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2Up
CisgICAgLCBtX3VzZUdESSh1c2VHREkpCit7CisgICAgSERDIGhkYyA9IEdldERDKDApOworICAg
IFNhdmVEQyhoZGMpOworICAgIAorICAgIFNlbGVjdE9iamVjdChoZGMsIGZvbnQpOworICAgIFVJ
TlQgYnVmZmVyU2l6ZSA9IEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMsIDAsIE5VTEwpOworCisg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShidWZmZXJTaXplICE9IDAsICJCaXRtYXAgZm9udHMgbm90
IHN1cHBvcnRlZCB3aXRoIENvcmVHcmFwaGljcy4iKTsKKworICAgIGlmIChidWZmZXJTaXplICE9
IDApIHsKKyAgICAgICAgT1VUTElORVRFWFRNRVRSSUNXKiBtZXRyaWNzID0gKE9VVExJTkVURVhU
TUVUUklDVyopbWFsbG9jKGJ1ZmZlclNpemUpOworCisgICAgICAgIEdldE91dGxpbmVUZXh0TWV0
cmljc1coaGRjLCBidWZmZXJTaXplLCBtZXRyaWNzKTsKKyAgICAgICAgV0NIQVIqIGZhY2VOYW1l
ID0gKFdDSEFSKikoKHVpbnRwdHJfdCltZXRyaWNzICsgKHVpbnRwdHJfdCltZXRyaWNzLT5vdG1w
RmFjZU5hbWUpOworCisgICAgICAgIGlmICghdXNlR0RJICYmIChib2xkIHx8IG9ibGlxdWUpKSB7
CisgICAgICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7CisKKyAgICAgICAgICAgIGludCBsZW4gPSBt
aW4oKGludCl3Y3NsZW4oZmFjZU5hbWUpLCBMRl9GQUNFU0laRSAtIDEpOworICAgICAgICAgICAg
bWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFjZU5hbWUsIGxlbiAqIHNpemVvZihXT1JEKSk7
CisgICAgICAgICAgICBsb2dGb250LmxmRmFjZU5hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAg
ICBsb2dGb250LmxmQ2hhclNldCA9IG1ldHJpY3MtPm90bVRleHRNZXRyaWNzLnRtQ2hhclNldDsK
KyAgICAgICAgICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IDA7CisKKyAgICAgICAgICAg
IGludCBzdHlsZXMgPSAwOworICAgICAgICAgICAgRW51bUZvbnRGYW1pbGllc0V4KGhkYywgJmxv
Z0ZvbnQsIGVudW1TdHlsZXNDYWxsYmFjaywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZzdHls
ZXMpLCAwKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBzeW50aGVzaXpl
IGJvbGQgb3Igb2JsaXF1ZS4gVGhlIHJ1bGUgdGhhdCBjb21wbGljYXRlcyB0aGluZ3MgaGVyZQor
ICAgICAgICAgICAgLy8gaXMgdGhhdCBpZiB0aGUgcmVxdWVzdGVkIGZvbnQgaXMgYm9sZCBhbmQg
b2JsaXF1ZSwgYW5kIGJvdGggYSBib2xkIGZvbnQgYW5kIGFuIG9ibGlxdWUgZm9udAorICAgICAg
ICAgICAgLy8gZXhpc3QsIHRoZSBib2xkIGZvbnQgc2hvdWxkIGJlIHVzZWQsIGFuZCBvYmxpcXVl
IHN5bnRoZXNpemVkLgorICAgICAgICAgICAgaWYgKGJvbGQgJiYgb2JsaXF1ZSkgeworICAgICAg
ICAgICAgICAgIGlmIChzdHlsZXMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3N5bnRo
ZXRpY0JvbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGVzICYgQm9sZCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChzdHlsZXMgJiBJdGFsaWMpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhl
dGljQm9sZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJvbGQgJiYgKCEoc3R5bGVz
ICYgQm9sZCkpKQorICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOwor
ICAgICAgICAgICAgICBlbHNlIGlmIChvYmxpcXVlICYmICEoc3R5bGVzICYgSXRhbGljKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRyeSB0aGUgZmFjZSBuYW1lIGZpcnN0LiAgV2luZG93cyBtYXkgZW5kIHVw
IGxvY2FsaXppbmcgdGhpcyBuYW1lLCBhbmQgQ0cgZG9lc24ndCBrbm93IGFib3V0CisgICAgICAg
IC8vIHRoZSBsb2NhbGl6YXRpb24uICBJZiB0aGUgY3JlYXRlIGZhaWxzLCB3ZSdsbCB0cnkgdGhl
IFBvc3RTY3JpcHQgbmFtZS4KKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFt
ZShBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChjb25zdCBVbmlD
aGFyKilmYWNlTmFtZSwgd2NzbGVuKGZhY2VOYW1lKSkpOworICAgICAgICBtX2NnRm9udCA9IENH
Rm9udENyZWF0ZVdpdGhGb250TmFtZShmdWxsTmFtZS5nZXQoKSk7CisgICAgICAgIGlmICghbV9j
Z0ZvbnQpIHsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIHBvc3RTY3JpcHROYW1lID0gZ2V0UG9z
dFNjcmlwdE5hbWUoZnVsbE5hbWUuZ2V0KCksIGhkYyk7CisgICAgICAgICAgICBpZiAocG9zdFNj
cmlwdE5hbWUpIHsKKyAgICAgICAgICAgICAgICBtX2NnRm9udCA9IENHRm9udENyZWF0ZVdpdGhG
b250TmFtZShwb3N0U2NyaXB0TmFtZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY2dGb250
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKG1ldHJpY3MpOworICAg
IH0KKworICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMoMCwgaGRjKTsKK30K
KworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisg
ICAgLCBtX2NnRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQoreworfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9hdCBz
aXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9z
aXplKHNpemUpCisgICAgLCBtX2NnRm9udChmb250KQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJv
bGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZh
bHNlKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2aXNpb24gMzAxNTUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFs
IGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9u
ZSBvdGhlciB0aGFuCiAgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgog
ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0x
MzEsNyArMTMxLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2FsbGJhY2soYwog
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAgOiBtX2ZvbnQoZm9u
dCkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKKyAgICAsIG1fcGxhdGZv
cm1Gb250KDApCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUoZmFsc2UpCiAgICAgLCBtX3VzZUdESSh1c2VHREkpCkBAIC0xODIsMTIgKzE4Miwx
MiBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UCiAgICAgICAgIC8v
IFRyeSB0aGUgZmFjZSBuYW1lIGZpcnN0LiAgV2luZG93cyBtYXkgZW5kIHVwIGxvY2FsaXppbmcg
dGhpcyBuYW1lLCBhbmQgQ0cgZG9lc24ndCBrbm93IGFib3V0CiAgICAgICAgIC8vIHRoZSBsb2Nh
bGl6YXRpb24uICBJZiB0aGUgY3JlYXRlIGZhaWxzLCB3ZSdsbCB0cnkgdGhlIFBvc3RTY3JpcHQg
bmFtZS4KICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZShBZG9wdENGLCBD
RlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChjb25zdCBVbmlDaGFyKilmYWNlTmFt
ZSwgd2NzbGVuKGZhY2VOYW1lKSkpOwotICAgICAgICBtX2NnRm9udCA9IENHRm9udENyZWF0ZVdp
dGhGb250TmFtZShmdWxsTmFtZS5nZXQoKSk7Ci0gICAgICAgIGlmICghbV9jZ0ZvbnQpIHsKKyAg
ICAgICAgbV9wbGF0Zm9ybUZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVsbE5hbWUu
Z2V0KCkpOworICAgICAgICBpZiAoIW1fcGxhdGZvcm1Gb250KSB7CiAgICAgICAgICAgICBDRlN0
cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdldCgp
LCBoZGMpOwogICAgICAgICAgICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2NnRm9udCk7CisgICAgICAgICAgICAgICAgbV9wbGF0
Zm9ybUZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChtX3BsYXRmb3JtRm9udCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgZnJlZShtZXRyaWNzKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UCiBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQogICAgIDog
bV9mb250KDApCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fY2dGb250KDApCisgICAgLCBt
X3BsYXRmb3JtRm9udCgwKQogICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKICAgICAsIG1fdXNlR0RJKGZhbHNlKQpAQCAtMjEwLDcg
KzIxMCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQKIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGZvbnQsIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQogICAgIDogbV9mb250KDApCiAgICAgLCBtX3NpemUo
c2l6ZSkKLSAgICAsIG1fY2dGb250KGZvbnQpCisgICAgLCBtX3BsYXRmb3JtRm9udChmb250KQog
ICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2Js
aXF1ZSkKICAgICAsIG1fdXNlR0RJKGZhbHNlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0
IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMu
Y3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBCcmVudCBGdWxnaGFtCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBCb2xkID0gKDEgPDwgMCk7CitzdGF0aWMg
Y29uc3QgaW50IEl0YWxpYyA9ICgxIDw8IDEpOworc3RhdGljIGNvbnN0IGludCBCb2xkT2JsaXF1
ZSA9ICgxIDw8IDIpOworCitzdGF0aWMgaW5saW5lIFVTSE9SVCByZWFkQmlnRW5kaWFuV29yZChj
b25zdCBCWVRFKiB3b3JkKSB7IHJldHVybiAod29yZFswXSA8PCA4KSB8IHdvcmRbMV07IH0KKwor
c3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2FsbGJhY2soY29uc3QgTE9HRk9OVCogbG9n
Rm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdPUkQgZm9udFR5cGUsIExQQVJBTSBs
UGFyYW0pCit7CisgICAgaW50ICpzdHlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4obFBhcmFt
KTsKKworICAgIC8vIEZJWE1FOiBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBMdWNpZGEgd2UgZ28g
YWhlYWQgYW5kIGNvbnNpZGVyIGEgd2VpZ2h0IG9mIDYwMCB0byBiZSBib2xkLgorICAgIC8vIFRo
aXMgZG9lcyBtZWFuIHdlJ2xsIGNvbnNpZGVyIGRlbWlib2xkIGFuZCBzZW1pYm9sZCBmb250cyBv
biB3aW5kb3dzIHRvIGFsc28gYmUgYm9sZC4gIFRoaXMKKyAgICAvLyBpcyByYXJlIGVub3VnaCB0
aGF0IGl0IHNlZW1zIGxpa2UgYW4gb2sgaGFjayBmb3Igbm93LgorICAgIGlmIChsb2dGb250LT5s
ZldlaWdodCA+PSA2MDApIHsKKyAgICAgICAgaWYgKGxvZ0ZvbnQtPmxmSXRhbGljKQorICAgICAg
ICAgICAgKnN0eWxlIHw9IEJvbGRPYmxpcXVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICAq
c3R5bGUgfD0gQm9sZDsKKyAgICB9IGVsc2UgaWYgKGxvZ0ZvbnQtPmxmSXRhbGljKQorICAgICAg
ICAqc3R5bGUgfD0gSXRhbGljOworCisgICAgcmV0dXJuIDE7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorICAgIDogbV9mb250KGZvbnQpCisgICAgLCBtX3Np
emUoc2l6ZSkKKyAgICAsIG1fcGxhdGZvcm1Gb250KDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkK
KyAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShm
YWxzZSkKKyAgICAsIG1fdXNlR0RJKHVzZUdESSkKK3sKKyAgICBIREMgaGRjID0gR2V0REMoMCk7
CisgICAgU2F2ZURDKGhkYyk7CisgICAgCisgICAgU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7Cisg
ICAgVUlOVCBidWZmZXJTaXplID0gR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgMCwgTlVMTCk7
CisKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZlclNpemUgIT0gMCwgIkJpdG1hcCBmb250
cyBub3Qgc3VwcG9ydGVkIHdpdGggQ29yZUdyYXBoaWNzLiIpOworCisgICAgaWYgKGJ1ZmZlclNp
emUgIT0gMCkgeworICAgICAgICBPVVRMSU5FVEVYVE1FVFJJQ1cqIG1ldHJpY3MgPSAoT1VUTElO
RVRFWFRNRVRSSUNXKiltYWxsb2MoYnVmZmVyU2l6ZSk7CisKKyAgICAgICAgR2V0T3V0bGluZVRl
eHRNZXRyaWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MpOworICAgICAgICBXQ0hBUiogZmFj
ZU5hbWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MgKyAodWludHB0cl90KW1ldHJpY3Mt
Pm90bXBGYWNlTmFtZSk7CisKKyAgICAgICAgaWYgKCF1c2VHREkgJiYgKGJvbGQgfHwgb2JsaXF1
ZSkpIHsKKyAgICAgICAgICAgIExPR0ZPTlQgbG9nRm9udDsKKworICAgICAgICAgICAgaW50IGxl
biA9IG1pbigoaW50KXdjc2xlbihmYWNlTmFtZSksIExGX0ZBQ0VTSVpFIC0gMSk7CisgICAgICAg
ICAgICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBmYWNlTmFtZSwgbGVuICogc2l6ZW9mKFdP
UkQpKTsKKyAgICAgICAgICAgIGxvZ0ZvbnQubGZGYWNlTmFtZVtsZW5dID0gJ1wwJzsKKyAgICAg
ICAgICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gbWV0cmljcy0+b3RtVGV4dE1ldHJpY3MudG1DaGFy
U2V0OworICAgICAgICAgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKKworICAgICAg
ICAgICAgaW50IHN0eWxlcyA9IDA7CisgICAgICAgICAgICBFbnVtRm9udEZhbWlsaWVzRXgoaGRj
LCAmbG9nRm9udCwgZW51bVN0eWxlc0NhbGxiYWNrLCByZWludGVycHJldF9jYXN0PExQQVJBTT4o
JnN0eWxlcyksIDApOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHN5bnRo
ZXNpemUgYm9sZCBvciBvYmxpcXVlLiBUaGUgcnVsZSB0aGF0IGNvbXBsaWNhdGVzIHRoaW5ncyBo
ZXJlCisgICAgICAgICAgICAvLyBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgZm9udCBpcyBib2xk
IGFuZCBvYmxpcXVlLCBhbmQgYm90aCBhIGJvbGQgZm9udCBhbmQgYW4gb2JsaXF1ZSBmb250Cisg
ICAgICAgICAgICAvLyBleGlzdCwgdGhlIGJvbGQgZm9udCBzaG91bGQgYmUgdXNlZCwgYW5kIG9i
bGlxdWUgc3ludGhlc2l6ZWQuCisgICAgICAgICAgICBpZiAoYm9sZCAmJiBvYmxpcXVlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
c3ludGhldGljQm9sZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2Js
aXF1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZXMgJiBCb2xkKQor
ICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHN0eWxlcyAmIEl0YWxpYykKKyAgICAgICAgICAgICAgICAgICAgbV9z
eW50aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9sZCAmJiAoIShz
dHlsZXMgJiBCb2xkKSkpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRy
dWU7CisgICAgICAgICAgICAgIGVsc2UgaWYgKG9ibGlxdWUgJiYgIShzdHlsZXMgJiBJdGFsaWMp
KQorICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgbV9wbGF0Zm9ybUZvbnQgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3Jl
YXRlX2Zvcl9oZm9udChmb250KTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3Qgc2l6ZU1hdHJpeCwg
Y3RtOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICAgICAg
Y2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJnNpemVNYXRyaXgsIHNpemUsIHNpemUpOworCisgICAg
ICAgIHN0YXRpYyBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnMgPSAwOworICAgICAg
ICBpZiAoIWZvbnRPcHRpb25zKQorICAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRf
b3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxp
YXMoZm9udE9wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQSVhFTCk7CisKKyAgICAgICAgbV9z
Y2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKG1fcGxhdGZvcm1Gb250LCAmc2l6
ZU1hdHJpeCwgJmN0bSwgZm9udE9wdGlvbnMpOworICAgICAgICBmcmVlKG1ldHJpY3MpOworICAg
IH0KKworICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMoMCwgaGRjKTsKK30K
KworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisg
ICAgLCBtX3BsYXRmb3JtRm9udCgwKQorICAgICwgbV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5
bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAg
ICwgbV91c2VHREkoZmFsc2UpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAg
LCBtX3BsYXRmb3JtRm9udCgwKQorICAgICwgbV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwg
bV91c2VHREkoZmFsc2UpCit7CisgICBjYWlyb19tYXRyaXhfdCBmb250TWF0cml4OworICAgY2Fp
cm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOworICAgY2Fpcm9f
bWF0cml4X3QgY3RtOworICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisgICBj
YWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUo
KTsKKworICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRpbmcgdG8g
cHJvdmlkZSBjb25zaXN0ZW50CisgICAvLyB0eXBvZ3JhcGhpYyBxdWFsaXRpZXMgZm9yIGN1c3Rv
bSBmb250cyBvbiBhbGwgcGxhdGZvcm1zLgorICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50
X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRfU1RZTEVfTk9ORSk7CisgICBjYWlyb19mb250X29w
dGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfR1JBWSk7CisKKyAg
IG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRN
YXRyaXgsICZjdG0sIG9wdGlvbnMpOworICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0
aW9ucyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKK30K
Kwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3NjYWxlZEZvbnQpOworCisgICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNy
LCBtX3NjYWxlZEZvbnQpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkocmV2aXNpb24gMzAyMTgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjQgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBi
ZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgotICogRm9udE1hYy5jcHAsIEZvbnRXaW4u
Y3BwIGFuZCBGb250LmNwcC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IGludCBCb2xkID0gKDEgPDwgMCk7Ci1zdGF0aWMgY29uc3Qg
aW50IEl0YWxpYyA9ICgxIDw8IDEpOwotc3RhdGljIGNvbnN0IGludCBCb2xkT2JsaXF1ZSA9ICgx
IDw8IDIpOwotCi1zdGF0aWMgaW5saW5lIFVTSE9SVCByZWFkQmlnRW5kaWFuV29yZChjb25zdCBC
WVRFKiB3b3JkKSB7IHJldHVybiAod29yZFswXSA8PCA4KSB8IHdvcmRbMV07IH0KLQotc3RhdGlj
IENGU3RyaW5nUmVmIGdldFBvc3RTY3JpcHROYW1lKENGU3RyaW5nUmVmIGZhY2VOYW1lLCBIREMg
ZGMpCi17Ci0gICAgY29uc3QgRFdPUkQgY01heE5hbWVUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsK
LQotICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IG5h
bWVNYXA7Ci0KLSAgICAvLyBDaGVjayBvdXIgaGFzaCBmaXJzdC4KLSAgICBTdHJpbmcgZmFjZVN0
cmluZyhmYWNlTmFtZSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiByZXN1bHQgPSBuYW1l
TWFwLmdldChmYWNlU3RyaW5nKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVz
dWx0LmdldCgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBvYnRhaW4gdGhlIFBvc3RTY3JpcHQgbmFt
ZSBmcm9tIHRoZSBuYW1lIHRhYmxlIGFuZCB1c2UgaXQgaW5zdGVhZCwuCi0gICAgRFdPUkQgYnVm
ZmVyU2l6ZSA9IEdldEZvbnREYXRhKGRjLCAnZW1hbicsIDAsIE5VTEwsIDApOyAvLyAibmFtZSIg
YmFja3dhcmRzCi0gICAgaWYgKGJ1ZmZlclNpemUgPT0gMCB8fCBidWZmZXJTaXplID09IEdESV9F
UlJPUiB8fCBidWZmZXJTaXplID4gY01heE5hbWVUYWJsZVNpemUpCi0gICAgICAgIHJldHVybiBO
VUxMOwotICAgCi0gICAgVmVjdG9yPEJZVEU+IGJ1ZmZlclZlY3RvcihidWZmZXJTaXplKTsKLSAg
ICBCWVRFKiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0YSgpOwotICAgIGlmIChHZXRGb250RGF0
YShkYywgJ2VtYW4nLCAwLCBidWZmZXIsIGJ1ZmZlclNpemUpID09IEdESV9FUlJPUikKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSA8IDYpCi0gICAgICAgIHJldHVy
biBOVUxMOwotCi0gICAgVVNIT1JUIG51bWJlck9mUmVjb3JkcyA9IHJlYWRCaWdFbmRpYW5Xb3Jk
KGJ1ZmZlciArIDIpOwotICAgIFVJTlQgc3RyaW5nc09mZnNldCA9IHJlYWRCaWdFbmRpYW5Xb3Jk
KGJ1ZmZlciArIDQpOwotICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNldCkKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBCWVRFKiBzdHJpbmdzID0gYnVmZmVyICsgc3RyaW5nc09m
ZnNldDsKLQotICAgIC8vIE5vdyB3YWxrIGVhY2ggbmFtZSByZWNvcmQgbG9va2luZyBmb3IgYSBN
YWMgb3IgV2luZG93cyBQb3N0U2NyaXB0IG5hbWUuCi0gICAgVUlOVCBvZmZzZXQgPSA2OwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWNvcmRzOyBpKyspIHsKLSAgICAgICAgaWYg
KGJ1ZmZlclNpemUgPCBvZmZzZXQgKyAxMikKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0g
ICAgICAgIFVTSE9SVCBwbGF0Zm9ybUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zm
c2V0KTsKLSAgICAgICAgVVNIT1JUIGVuY29kaW5nSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZm
ZXIgKyBvZmZzZXQgKyAyKTsKLSAgICAgICAgVVNIT1JUIGxhbmd1YWdlSUQgPSByZWFkQmlnRW5k
aWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA0KTsKLSAgICAgICAgVVNIT1JUIG5hbWVJRCA9IHJl
YWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDYpOwotICAgICAgICBVU0hPUlQgbGVu
Z3RoID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgOCk7Ci0gICAgICAgIFVT
SE9SVCBuYW1lT2Zmc2V0ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMTAp
OwotCi0gICAgICAgIGlmIChwbGF0Zm9ybUlEID09IDMgJiYgZW5jb2RpbmdJRCA9PSAxICYmIGxh
bmd1YWdlSUQgPT0gMHg0MDkgJiYgbmFtZUlEID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBXaW5kb3dzIFBvc3RTY3JpcHQgbmFtZSBhbmQgaXMgdGhlcmVmb3JlIFVURi0xNi4KLSAg
ICAgICAgICAgIC8vIFBhc3MgQmlnIEVuZGlhbiBhcyB0aGUgZW5jb2RpbmcuCi0gICAgICAgICAg
ICBpZiAoYnVmZmVyU2l6ZSA8IHN0cmluZ3NPZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3RoKQot
ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmVzdWx0LmFkb3B0Q0Yo
Q0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxlbmd0
aCwga0NGU3RyaW5nRW5jb2RpbmdVVEYxNkJFLCBmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JRCA9PSAxICYmIGVuY29kaW5nSUQgPT0gMCAm
JiBsYW5ndWFnZUlEID09IDAgJiYgbmFtZUlEID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBNYWMgUG9zdFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVyZWZvcmUgQVNDSUkuCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFu
L1JNMDYvQ2hhcDZuYW1lLmh0bWwKLSAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5n
c09mZnNldCArIG5hbWVPZmZzZXQgKyBsZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgICAgICAgICByZXN1bHQuYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhO
VUxMLCBzdHJpbmdzICsgbmFtZU9mZnNldCwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJ
LCBmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZz
ZXQgKz0gMTI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgbmFtZU1hcC5zZXQo
ZmFjZVN0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpOwotfQotCi1zdGF0
aWMgaW50IENBTExCQUNLIGVudW1TdHlsZXNDYWxsYmFjayhjb25zdCBMT0dGT05UKiBsb2dGb250
LCBjb25zdCBURVhUTUVUUklDKiBtZXRyaWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJh
bSkKLXsKLSAgICBpbnQgKnN0eWxlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihsUGFyYW0pOwot
Ci0gICAgLy8gRklYTUU6IEluIG9yZGVyIHRvIGFjY29tbW9kYXRlIEx1Y2lkYSB3ZSBnbyBhaGVh
ZCBhbmQgY29uc2lkZXIgYSB3ZWlnaHQgb2YgNjAwIHRvIGJlIGJvbGQuCi0gICAgLy8gVGhpcyBk
b2VzIG1lYW4gd2UnbGwgY29uc2lkZXIgZGVtaWJvbGQgYW5kIHNlbWlib2xkIGZvbnRzIG9uIHdp
bmRvd3MgdG8gYWxzbyBiZSBib2xkLiAgVGhpcwotICAgIC8vIGlzIHJhcmUgZW5vdWdoIHRoYXQg
aXQgc2VlbXMgbGlrZSBhbiBvayBoYWNrIGZvciBub3cuCi0gICAgaWYgKGxvZ0ZvbnQtPmxmV2Vp
Z2h0ID49IDYwMCkgewotICAgICAgICBpZiAobG9nRm9udC0+bGZJdGFsaWMpCi0gICAgICAgICAg
ICAqc3R5bGUgfD0gQm9sZE9ibGlxdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpzdHls
ZSB8PSBCb2xkOwotICAgIH0gZWxzZSBpZiAobG9nRm9udC0+bGZJdGFsaWMpCi0gICAgICAgICpz
dHlsZSB8PSBJdGFsaWM7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
b2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBtX2ZvbnQoZm9udCkKLSAgICAsIG1fc2l6ZShz
aXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAg
ICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsK
LSAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0gICAgU2F2ZURDKGhkYyk7Ci0gICAgCi0gICAgU2Vs
ZWN0T2JqZWN0KGhkYywgZm9udCk7Ci0gICAgVUlOVCBidWZmZXJTaXplID0gR2V0T3V0bGluZVRl
eHRNZXRyaWNzKGhkYywgMCwgTlVMTCk7Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZl
clNpemUgIT0gMCwgIkJpdG1hcCBmb250cyBub3Qgc3VwcG9ydGVkIHdpdGggQ29yZUdyYXBoaWNz
LiIpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgIT0gMCkgewotICAgICAgICBPVVRMSU5FVEVYVE1F
VFJJQ1cqIG1ldHJpY3MgPSAoT1VUTElORVRFWFRNRVRSSUNXKiltYWxsb2MoYnVmZmVyU2l6ZSk7
Ci0KLSAgICAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJp
Y3MpOwotICAgICAgICBXQ0hBUiogZmFjZU5hbWUgPSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJp
Y3MgKyAodWludHB0cl90KW1ldHJpY3MtPm90bXBGYWNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKCF1
c2VHREkgJiYgKGJvbGQgfHwgb2JsaXF1ZSkpIHsKLSAgICAgICAgICAgIExPR0ZPTlQgbG9nRm9u
dDsKLQotICAgICAgICAgICAgaW50IGxlbiA9IG1pbigoaW50KXdjc2xlbihmYWNlTmFtZSksIExG
X0ZBQ0VTSVpFIC0gMSk7Ci0gICAgICAgICAgICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBm
YWNlTmFtZSwgbGVuICogc2l6ZW9mKFdPUkQpKTsKLSAgICAgICAgICAgIGxvZ0ZvbnQubGZGYWNl
TmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gbWV0cmlj
cy0+b3RtVGV4dE1ldHJpY3MudG1DaGFyU2V0OwotICAgICAgICAgICAgbG9nRm9udC5sZlBpdGNo
QW5kRmFtaWx5ID0gMDsKLQotICAgICAgICAgICAgaW50IHN0eWxlcyA9IDA7Ci0gICAgICAgICAg
ICBFbnVtRm9udEZhbWlsaWVzRXgoaGRjLCAmbG9nRm9udCwgZW51bVN0eWxlc0NhbGxiYWNrLCBy
ZWludGVycHJldF9jYXN0PExQQVJBTT4oJnN0eWxlcyksIDApOwotCi0gICAgICAgICAgICAvLyBD
aGVjayBpZiB3ZSBuZWVkIHRvIHN5bnRoZXNpemUgYm9sZCBvciBvYmxpcXVlLiBUaGUgcnVsZSB0
aGF0IGNvbXBsaWNhdGVzIHRoaW5ncyBoZXJlCi0gICAgICAgICAgICAvLyBpcyB0aGF0IGlmIHRo
ZSByZXF1ZXN0ZWQgZm9udCBpcyBib2xkIGFuZCBvYmxpcXVlLCBhbmQgYm90aCBhIGJvbGQgZm9u
dCBhbmQgYW4gb2JsaXF1ZSBmb250Ci0gICAgICAgICAgICAvLyBleGlzdCwgdGhlIGJvbGQgZm9u
dCBzaG91bGQgYmUgdXNlZCwgYW5kIG9ibGlxdWUgc3ludGhlc2l6ZWQuCi0gICAgICAgICAgICBp
ZiAoYm9sZCAmJiBvYmxpcXVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlcyA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChzdHlsZXMgJiBCb2xkKQotICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09i
bGlxdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlcyAmIEl0YWxpYykK
LSAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoYm9sZCAmJiAoIShzdHlsZXMgJiBCb2xkKSkpCi0gICAgICAgICAgICAgICAg
ICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKG9ibGlx
dWUgJiYgIShzdHlsZXMgJiBJdGFsaWMpKQotICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRp
Y09ibGlxdWUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHJ5IHRoZSBmYWNlIG5h
bWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQgdXAgbG9jYWxpemluZyB0aGlzIG5hbWUsIGFuZCBD
RyBkb2Vzbid0IGtub3cgYWJvdXQKLSAgICAgICAgLy8gdGhlIGxvY2FsaXphdGlvbi4gIElmIHRo
ZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUgUG9zdFNjcmlwdCBuYW1lLgotICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKWZhY2VOYW1lLCB3Y3NsZW4oZmFjZU5h
bWUpKSk7Ci0gICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1bGxO
YW1lLmdldCgpKTsKLSAgICAgICAgaWYgKCFtX2NnRm9udCkgewotICAgICAgICAgICAgQ0ZTdHJp
bmdSZWYgcG9zdFNjcmlwdE5hbWUgPSBnZXRQb3N0U2NyaXB0TmFtZShmdWxsTmFtZS5nZXQoKSwg
aGRjKTsKLSAgICAgICAgICAgIGlmIChwb3N0U2NyaXB0TmFtZSkgewotICAgICAgICAgICAgICAg
IG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobV9jZ0ZvbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGZyZWUobWV0cmljcyk7Ci0gICAgfQotCi0gICAgUmVzdG9yZURDKGhkYywgLTEp
OwotICAgIFJlbGVhc2VEQygwLCBoZGMpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQotICAgIDogbV9m
b250KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fY2dGb250KDApCi0gICAgLCBtX3N5
bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQotICAg
ICwgbV91c2VHREkoZmFsc2UpCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoQ0dGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVl
KQotICAgIDogbV9mb250KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fY2dGb250KGZv
bnQpCi0gICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShvYmxpcXVlKQotICAgICwgbV91c2VHREkoZmFsc2UpCi17Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJ
KHJldmlzaW9uIDMwMTc0KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZVdpbi5jcHA6MzAxNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdl
VHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8V2Vi
S2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwg
YmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5p
Y29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0
aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAg
Q0dHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07CisgICAgd2tHZXRHbHlw
aHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhC
dWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAg
ICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNl
dCArIGksIDAsIDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5
cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDMwMTc0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5z
aWduZWQgb2Zmc2V0LCB1bgogCiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgQ0dH
bHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07Ci0gICAgd2tHZXRHbHlwaHMo
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZm
ZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLnBsYXRmb3JtRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0
aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKICAgICAgICAgaWYgKCFnbHlwaCkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fp
cm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAzMDE3NCkJKGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwOjMwMTc0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFn
ZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7
CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGgg
cGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0
ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZm
ZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltH
bHlwaFBhZ2U6OnNpemVdOworICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBn
bHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwg
Zm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9X
aW4uY3BwCShyZXZpc2lvbiAzMDE3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE3
ICs0MSwzMSBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIENH
R2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5cGhz
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVm
ZmVyLCBidWZmZXJMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAg
ICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQg
KyBpLCAwLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOwotICAgICAgICAgICAgaGF2ZUdseXBo
cyA9IHRydWU7CisKKyAgICBIREMgZGMgPSBHZXREQygoSFdORCkwKTsKKyAgICBTYXZlREMoZGMp
OworICAgIFNlbGVjdE9iamVjdChkYywgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkp
OworCisgICAgVEVYVE1FVFJJQyB0bTsKKyAgICBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsKKwor
ICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyXTsKKyAgICBEV09S
RCByZXN1bHQgPSBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBsb2Nh
bEdseXBoQnVmZmVyLCAwKTsKKyAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQgIT0gR0RJX0VSUk9S
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpID09IGJ1ZmZlckxlbmd0aDsKKyAgICBp
ZiAoc3VjY2VzcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAg
ICAgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAg
ICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQorICAgIFJlc3RvcmVEQyhkYywgLTEpOworICAgIFJlbGVhc2VEQygwLCBkYyk7CisK
ICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAkocmV2aXNpb24g
MzAyMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBo
UGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEp
Ci17Ci0gICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5
cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFy
YWN0ZXJzLgotICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlmIChi
dWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZl
cltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHbHlw
aCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAg
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlw
aCwgZm9udERhdGEpOwotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShy
ZXZpc2lvbiAzMDIxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5jZ0ZvbnQoKTsKKyAgICBDR0ZvbnRSZWYgZm9udCA9
IG1fZm9udC5wbGF0Zm9ybUZvbnQoKTsKICAgICBpbnQgaUFzY2VudCA9IENHRm9udEdldEFzY2Vu
dChmb250KTsKICAgICBpbnQgaURlc2NlbnQgPSBDR0ZvbnRHZXREZXNjZW50KGZvbnQpOwogICAg
IGludCBpTGluZUdhcCA9IENHRm9udEdldExlYWRpbmcoZm9udCk7CkBAIC0xNDEsNyArMTQxLDcg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBpZiAoIWlz
Q3VzdG9tRm9udCgpKSB7CiAgICAgICAgIERlbGV0ZU9iamVjdChtX2ZvbnQuaGZvbnQoKSk7Ci0g
ICAgICAgIENHRm9udFJlbGVhc2UobV9mb250LmNnRm9udCgpKTsKKyAgICAgICAgQ0dGb250UmVs
ZWFzZShtX2ZvbnQucGxhdGZvcm1Gb250KCkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGhh
c2ggdGhpcyBvbiBXaW4zMiwgc28gaXQncyBlZmZlY3RpdmVseSBvd25lZCBieSB1cy4KQEAgLTE2
Myw3ICsxNjMsNyBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiAg
ICAgICAgIHJldHVybiB3aWR0aDsKICAgICB9CiAKLSAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9u
dC5jZ0ZvbnQoKTsKKyAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5wbGF0Zm9ybUZvbnQoKTsK
ICAgICBmbG9hdCBwb2ludFNpemUgPSBtX2ZvbnQuc2l6ZSgpOwogICAgIENHU2l6ZSBhZHZhbmNl
OwogICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShw
b2ludFNpemUsIHBvaW50U2l6ZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMzAy
MTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJv
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTAgQEAKICNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogI2luY2x1ZGUgPG1s
YW5nLmg+CiAjaW5jbHVkZSA8dGNoYXIuaD4KIApAQCAtNDYsOCArNDksOSBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAw
OwogICAgIG1faXNTeXN0ZW1Gb250ID0gZmFsc2U7CiAgICAgCisgICAgSERDIGhkYyA9IEdldERD
KDApOworCiAgICAgaWYgKG1fZm9udC51c2VHREkoKSkgewotICAgICAgICBIREMgaGRjID0gR2V0
REMoMCk7CiAgICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1fZm9u
dC5oZm9udCgpKTsKICAgICAgICAgT1VUTElORVRFWFRNRVRSSUMgbWV0cmljczsKICAgICAgICAg
R2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgc2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7CkBA
IC03MiwxOSArNzYsNjAgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNlY3Rpb24gc2hvdWxk
IGRldGVybWluZSBmb250IGRpbWVuc2lvbnMgKHNlZSBDRyBpbXBsZW1lbnRhdGlvbikuCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBTYXZlREMoaGRjKTsKKworICAgIGNhaXJvX3NjYWxlZF9m
b250X3QqIHNjYWxlZEZvbnQgPSBtX2ZvbnQuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IGRvdWJs
ZSBtZXRyaWNzTXVsdGlwbGllciA9IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNz
X2ZhY3RvcihzY2FsZWRGb250KSAqIG1fZm9udC5zaXplKCk7CisKKyAgICBjYWlyb193aW4zMl9z
Y2FsZWRfZm9udF9zZWxlY3RfZm9udChzY2FsZWRGb250LCBoZGMpOworCisgICAgVEVYVE1FVFJJ
QyB0ZXh0TWV0cmljczsKKyAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0ZXh0TWV0cmljcyk7Cisg
ICAgbV9hc2NlbnQgPSBscm91bmRmKHRleHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011bHRp
cGxpZXIpOworICAgIG1fZGVzY2VudCA9IGxyb3VuZGYodGV4dE1ldHJpY3MudG1EZXNjZW50ICog
bWV0cmljc011bHRpcGxpZXIpOworICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8v
IEJlc3QgZ3Vlc3MgZm9yIHhIZWlnaHQgZm9yIG5vbi1UcnVldHlwZSBmb250cy4KKyAgICBtX2xp
bmVHYXAgPSBscm91bmRmKHRleHRNZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nICogbWV0cmljc011
bHRpcGxpZXIpOworICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudCArIG1f
bGluZUdhcDsKKworICAgIE9VVExJTkVURVhUTUVUUklDIG1ldHJpY3M7CisgICAgaWYgKEdldE91
dGxpbmVUZXh0TWV0cmljcyhoZGMsIHNpemVvZihtZXRyaWNzKSwgJm1ldHJpY3MpID4gMCkgewor
ICAgICAgICAvLyBUaGlzIGlzIGEgVHJ1ZVR5cGUgZm9udC4gIFdlIG1pZ2h0IGJlIGFibGUgdG8g
Z2V0IGFuIGFjY3VyYXRlIHhIZWlnaHQKKyAgICAgICAgR0xZUEhNRVRSSUNTIGdtOworICAgICAg
ICBNQVQyIG1hdCA9IHsgMSwgMCwgMCwgMSB9OworICAgICAgICBEV09SRCBsZW4gPSBHZXRHbHlw
aE91dGxpbmUoaGRjLCAneCcsIEdHT19NRVRSSUNTLCAmZ20sIDAsIDAsICZtYXQpOworICAgICAg
ICBpZiAobGVuICE9IEdESV9FUlJPUiAmJiBnbS5nbXB0R2x5cGhPcmlnaW4ueSA+IDApCisgICAg
ICAgICAgICBtX3hIZWlnaHQgPSBnbS5nbXB0R2x5cGhPcmlnaW4ueSAqIG1ldHJpY3NNdWx0aXBs
aWVyOworICAgIH0KKworICAgIGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2RvbmVfZm9udChzY2Fs
ZWRGb250KTsKKworICAgIG1faXNTeXN0ZW1Gb250ID0gZmFsc2U7CisgICAgbV9zY3JpcHRDYWNo
ZSA9IDA7CisgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7CisKKyAgICBSZXN0b3JlREMo
aGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CiB9CiAKIHZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjYWly
b19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnQucGxhdGZvcm1Gb250KCkpOworICAgIGNhaXJvX3Nj
YWxlZF9mb250X2Rlc3Ryb3kobV9mb250LnNjYWxlZEZvbnQoKSk7CisKKyAgICBEZWxldGVPYmpl
Y3QobV9mb250Lmhmb250KCkpOworCisgICAgLy8gV2UgZG9uJ3QgaGFzaCB0aGlzIG9uIFdpbjMy
LCBzbyBpdCdzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHVzLgorICAgIGRlbGV0ZSBtX3NtYWxsQ2Fw
c0ZvbnREYXRhOworCisgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKKyAgICBk
ZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAogZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKKyAgICBIREMgaGRj
ID0gR2V0REMoMCk7CisKICAgICBpZiAobV9mb250LnVzZUdESSgpKSB7Ci0gICAgICAgIEhEQyBo
ZGMgPSBHZXREQygwKTsKICAgICAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhk
YywgbV9mb250Lmhmb250KCkpOwogICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgIEdldENoYXJX
aWR0aEkoaGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKTsKQEAgLTkzLDEwICsxMzgsMjcgQEAgZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbAogICAgICAgICByZXR1cm4gd2lk
dGg7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEZsZXNoIG91dCB3aXRoIENhaXJvL3dpbjMyIGZv
bnQgaW1wbGVtZW50YXRpb24KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFNhdmVEQyhoZGMp
OworCisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IG1fZm9udC5zY2FsZWRG
b250KCk7CisgICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9u
dCwgaGRjKTsKIAotICAgIHJldHVybiAwOworICAgIGludCB3aWR0aDsKKyAgICBHZXRDaGFyV2lk
dGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7CisKKyAgICBjYWlyb193aW4zMl9zY2FsZWRf
Zm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CisKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7Cisg
ICAgUmVsZWFzZURDKDAsIGhkYyk7CisKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxp
ZXIgPSBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9u
dCkgKiBtX2ZvbnQuc2l6ZSgpOworICAgIHJldHVybiB3aWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVy
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAor
eworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZvbnQoY3IpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAzMDIxOCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQAogLyogCiAgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgdXNlZCB0byBk
ZXRlcm1pbmUgaG93IGEgd2lkZ2V0IGlzIGRyYXduIHVzaW5nCiAgKiBXaW5kb3dzJyBUaGVtZSBB
UEkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZW1lIHBhcnRzIGFuZCBzdGF0ZXMgc2VlCi0g
KiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJy
YXJ5L2VuLXVzL3NoZWxsY2MvcGxhdGZvcm0vY29tbWN0bHMvdXNlcmV4L3RvcGljcy9wYXJ0c2Fu
ZHN0YXRlcy5hc3AKKyAqIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
YmI3NzMyMTAoVlMuODUpLmFzcHgKICAqLwogI2RlZmluZSBUSEVNRV9DT0xPUiAyMDQKICNkZWZp
bmUgVEhFTUVfRk9OVCAgMjEwCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMzAyMTgpCisrKyBXZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA4LTAyLTEzICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTczMzYKKyAgICAgICAgICB1cGRhdGUgQ2Fpcm8vV2luMzIgY29uZmlndXJh
dGlvbiB3aXRoIGZvbnQvdGV4dCBzdXBwb3J0CisKKyAgICAgICAgKiBXZWJEcmFnQ2xpZW50LmNw
cDogQWRtaXQgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6
OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkZyYW1lOjpzcG9vbFBhZ2VzKToKKyAgICAgICAgKiBXZWJLaXRHcmFwaGljcy5jcHA6
IGltcGxlbWVudCBDYWlyby9XaW4gdGV4dCBkcmF3aW5nCisgICAgICAgIChEcmF3VGV4dEF0UG9p
bnQpOgorICAgICAgICAoV2ViRHJhd1RleHQpOgorICAgICAgICAqIFdlYktpdEdyYXBoaWNzLmg6
CisKIDIwMDgtMDItMTMgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU3NDA2NTY+IExlYWsgaW4gcG9zdERpZEFkZEljb25Ob3RpZmljYXRp
b24gaW4gV2ViSWNvbkRhdGFiYXNlCkluZGV4OiBXZWJLaXQvd2luL1dlYkRyYWdDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDMw
MjE4KQorKysgV2ViS2l0L3dpbi9XZWJEcmFnQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkRyYWdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJE
cm9wU291cmNlLmgiCiAjaW5jbHVkZSAiV2ViS2l0R3JhcGhpY3MuaCIKQEAgLTIyMyw2ICsyMjQs
NyBAQCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltCiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAorI2lmIFBMQVRGT1JNKENHKQogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0UmVmOwogICAgIGltYWdlID0gYWxsb2NJbWFnZSh3b3JraW5nREMsIGltYWdlU2l6ZSwgJmNv
bnRleHRSZWYpOwogICAgIGlmICghaW1hZ2UpIHsKQEAgLTI1OCw2ICsyNjAsMTAgQEAgRHJhZ0lt
YWdlUmVmIFdlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbQogICAgIFdlYkNvcmVEcmF3RG91Ymxl
ZFRleHRBdFBvaW50KGNvbnRleHQsIGxhYmVsLCB0ZXh0UG9zLCBsYWJlbEZvbnQsIHRvcENvbG9y
LCBib3R0b21Db2xvcik7CiAKICAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHRSZWYpOworI2Vs
c2UKKyAgICBub3RJbXBsZW1lbnRlZCAoKTsKKyNlbmRpZgorCiAgICAgRGVsZXRlREMod29ya2lu
Z0RDKTsKICAgICBSZWxlYXNlREMoMCwgZGMpOwogICAgIHJldHVybiBpbWFnZTsKSW5kZXg6IFdl
YktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRnJhbWUu
Y3BwCShyZXZpc2lvbiAzMDIxOCkKKysrIFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzAwLDYgKzI3MDAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkZyYW1lOjpzcG9vCiAgICAgZm9yIChVSU5UIGlpID0gc3RhcnRQYWdlOyBpaSA8IGVuZFBhZ2U7
IGlpKyspIHsKICAgICAgICAgSW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3RzW2lpXTsKIAor
I2lmIFBMQVRGT1JNKENHKQogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKHBjdHgpOwogCiAg
ICAgICAgIEludFJlY3QgcHJpbnRSZWN0ID0gcHJpbnRlclJlY3QocHJpbnREQyk7CkBAIC0yNzM5
LDYgKzI3NDAsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpzcG9vCiAK
ICAgICAgICAgQ0dDb250ZXh0RW5kUGFnZShwY3R4KTsKICAgICAgICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShwY3R4KTsKKyNlbHNlCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYK
ICAgICB9CiAgCiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBXZWJLaXQvd2luL1dlYktpdEdyYXBo
aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAkocmV2
aXNpb24gMzAyMTgpCisrKyBXZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNiArNzAsNyBAQCBzdGF0aWMgRm9udCBtYWtlRm9udChjb25zdCBXZWJGb250
RGVzY3JpCiAgICAgcmV0dXJuIGZvbnQ7CiB9CiAKKyNpZiBQTEFURk9STShDRykKIHZvaWQgRHJh
d1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIExQQ1RTVFIgdGV4dCwgaW50IGxl
bmd0aCwgUE9JTlQgcG9pbnQsIGNvbnN0IFdlYkZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IENHQ29sb3JSZWYgY29sb3IsIGludCB1bmRlcmxpbmVkSW5kZXgsIGJvb2wgZHJhd0FzUGFzc3dv
cmQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY2dDb250ZXh0KTsKQEAgLTc5LDEw
ICs4MCwyMiBAQCB2b2lkIERyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYgY2dDb250CiAgICAg
ICAgIGRyYXdTdHJpbmcgPSBkcmF3U3RyaW5nLmltcGwoKS0+c2VjdXJlKFdlYkNvcmU6OmJ1bGxl
dCk7CiAgICAgV2ViQ29yZURyYXdUZXh0QXRQb2ludChjb250ZXh0LCBkcmF3U3RyaW5nLCBwb2lu
dCwgbWFrZUZvbnQoZGVzY3JpcHRpb24pLCBjb2xvciwgdW5kZXJsaW5lZEluZGV4KTsKIH0KKyNl
bGlmIFBMQVRGT1JNKENBSVJPKQordm9pZCBEcmF3VGV4dEF0UG9pbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBMUENUU1RSIHRleHQsIGludCBsZW5ndGgsIFBPSU5UIHBvaW50LCBjb25zdCBX
ZWJGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBDb2xvciogY29sb3IsIGludCB1
bmRlcmxpbmVkSW5kZXgsIGJvb2wgZHJhd0FzUGFzc3dvcmQpCit7CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgZHJhd1N0cmluZyh0ZXh0LCBsZW5ndGgp
OworICAgIGlmIChkcmF3QXNQYXNzd29yZCkKKyAgICAgICAgZHJhd1N0cmluZyA9IGRyYXdTdHJp
bmcuaW1wbCgpLT5zZWN1cmUoV2ViQ29yZTo6YnVsbGV0KTsKKyAgICBXZWJDb3JlRHJhd1RleHRB
dFBvaW50KCpjb250ZXh0LCBkcmF3U3RyaW5nLCBwb2ludCwgbWFrZUZvbnQoZGVzY3JpcHRpb24p
LCAqY29sb3IsIHVuZGVybGluZWRJbmRleCk7Cit9CisjZW5kaWYKIAogdm9pZCBXZWJEcmF3VGV4
dChXZWJUZXh0UmVuZGVySW5mbyogaW5mbykKIHsKLSAgICBpZiAoIWluZm8gfHwgaW5mby0+c3Ry
dWN0U2l6ZSAhPSBzaXplb2YoV2ViVGV4dFJlbmRlckluZm8pIHx8ICFpbmZvLT5jZ0NvbnRleHQg
fHwgIWluZm8tPmRlc2NyaXB0aW9uKQorICAgIGlmICghaW5mbyB8fCBpbmZvLT5zdHJ1Y3RTaXpl
ICE9IHNpemVvZihXZWJUZXh0UmVuZGVySW5mbykgfHwgIWluZm8tPmdDb250ZXh0IHx8ICFpbmZv
LT5kZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IG9sZEZvbnRTbW9vdGhp
bmdMZXZlbCA9IC0xOwpAQCAtOTEsNyArMTA0LDcgQEAgdm9pZCBXZWJEcmF3VGV4dChXZWJUZXh0
UmVuZGVySW5mbyogaW5mbwogICAgICAgICB3a1NldEZvbnRTbW9vdGhpbmdMZXZlbChpbmZvLT5v
dmVycmlkZVNtb290aGluZ0xldmVsKTsKICAgICB9CiAKLSAgICBEcmF3VGV4dEF0UG9pbnQoaW5m
by0+Y2dDb250ZXh0LCBpbmZvLT50ZXh0LCBpbmZvLT5sZW5ndGgsIGluZm8tPnB0LCAqKGluZm8t
PmRlc2NyaXB0aW9uKSwgaW5mby0+Y29sb3IsIGluZm8tPnVuZGVybGluZWRJbmRleCwgaW5mby0+
ZHJhd0FzUGFzc3dvcmQpOworICAgIERyYXdUZXh0QXRQb2ludChpbmZvLT5nQ29udGV4dCwgaW5m
by0+dGV4dCwgaW5mby0+bGVuZ3RoLCBpbmZvLT5wdCwgKihpbmZvLT5kZXNjcmlwdGlvbiksIGlu
Zm8tPmNvbG9yLCBpbmZvLT51bmRlcmxpbmVkSW5kZXgsIGluZm8tPmRyYXdBc1Bhc3N3b3JkKTsK
IAogICAgIGlmIChpbmZvLT5vdmVycmlkZVNtb290aGluZ0xldmVsID49IDApCiAgICAgICAgIHdr
U2V0Rm9udFNtb290aGluZ0xldmVsKG9sZEZvbnRTbW9vdGhpbmdMZXZlbCk7CkluZGV4OiBXZWJL
aXQvd2luL1dlYktpdEdyYXBoaWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJLaXRH
cmFwaGljcy5oCShyZXZpc2lvbiAzMDIxOCkKKysrIFdlYktpdC93aW4vV2ViS2l0R3JhcGhpY3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTUgQEAKIAogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KIAorI2lmIFBMQVRGT1JNKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciogQ0dDb2xvclJl
ZjsKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1
Y3QgQ0dDb250ZXh0KiBDb250ZXh0UmVmOwordHlwZWRlZiBjb25zdCBDR0NvbG9yUmVmIENvbG9y
UmVmOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Cit0eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogQ29udGV4dFJlZjsKK3R5cGVkZWYg
Y29uc3QgV2ViQ29yZTo6Q29sb3IqIENvbG9yUmVmOworI2VuZGlmCiAKIHR5cGVkZWYgd2NoYXJf
dCBXQ0hBUjsKIHR5cGVkZWYgX19udWxsdGVybWluYXRlZCBjb25zdCBXQ0hBUiogTFBDV1NUUjsK
QEAgLTQ2LDE4ICs1MywxOCBAQCBzdHJ1Y3QgV2ViRm9udERlc2NyaXB0aW9uIHsKIHN0cnVjdCBX
ZWJUZXh0UmVuZGVySW5mbwogewogICAgIERXT1JEIHN0cnVjdFNpemU7Ci0gICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dDsKKyAgICBDb250ZXh0UmVmIGdDb250ZXh0OwogICAgIExQQ1RTVFIgdGV4
dDsKICAgICBpbnQgbGVuZ3RoOwogICAgIFBPSU5UIHB0OwogICAgIGNvbnN0IFdlYkZvbnREZXNj
cmlwdGlvbiogZGVzY3JpcHRpb247Ci0gICAgQ0dDb2xvclJlZiBjb2xvcjsKKyAgICBDb2xvclJl
ZiBjb2xvcjsKICAgICBpbnQgdW5kZXJsaW5lZEluZGV4OwogICAgIGJvb2wgZHJhd0FzUGFzc3dv
cmQ7CiAgICAgaW50IG92ZXJyaWRlU21vb3RoaW5nTGV2ZWw7IC8vIHBhc3MgaW4gLTEgaWYgY2Fs
bGVyIGRvZXMgbm90IHdhbnQgdG8gb3ZlcnJpZGUgc21vb3RoaW5nIGxldmVsCiB9OwogCi12b2lk
IERyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYsIExQQ1RTVFIgdGV4dCwgaW50IGxlbmd0aCwg
UE9JTlQsIGNvbnN0IFdlYkZvbnREZXNjcmlwdGlvbiYsIENHQ29sb3JSZWYsIGludCB1bmRlcmxp
bmVkSW5kZXggPSAtMSwgYm9vbCBkcmF3QXNQYXNzd29yZCA9IGZhbHNlKTsKK3ZvaWQgRHJhd1Rl
eHRBdFBvaW50KENvbnRleHRSZWYsIExQQ1RTVFIgdGV4dCwgaW50IGxlbmd0aCwgUE9JTlQsIGNv
bnN0IFdlYkZvbnREZXNjcmlwdGlvbiYsIENvbG9yUmVmLCBpbnQgdW5kZXJsaW5lZEluZGV4ID0g
LTEsIGJvb2wgZHJhd0FzUGFzc3dvcmQgPSBmYWxzZSk7CiB2b2lkIFdlYkRyYXdUZXh0KFdlYlRl
eHRSZW5kZXJJbmZvKik7CiBmbG9hdCBUZXh0RmxvYXRXaWR0aChMUENUU1RSIHRleHQsIGludCBs
ZW5ndGgsIGNvbnN0IFdlYkZvbnREZXNjcmlwdGlvbiYpOwogdm9pZCBGb250TWV0cmljcyhjb25z
dCBXZWJGb250RGVzY3JpcHRpb24mLCBpbnQqIGFzY2VudCwgaW50KiBkZXNjZW50LCBpbnQqIGxp
bmVTcGFjaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19199</attachid>
            <date>2008-02-18 17:40:20 -0800</date>
            <delta_ts>2008-02-20 10:44:05 -0800</delta_ts>
            <desc>Second revision based on Alp and others comments.</desc>
            <filename>webcore_win32fonts.patch</filename>
            <type>text/plain</type>
            <size>62430</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMwMzkx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMDgtMDIt
MTggIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczMzYKKyAgICAgICAgUHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9y
IFdpbmRvd3MgKENhaXJvKSBidWlsZCBvZiBXZWJLaXQgdGhhdAorICAgICAgICBoYW5kbGVzIGZv
bnQgZm9ybWF0dGluZy4KKyAgICAgICAgLSBTcGxpdCBmb250IGltcGxlbWVudGF0aW9uIGZpbGVz
IHRvIGFsbG93IG1heGltYWwgY29kZSBzaGFyaW5nCisgICAgICAgICAgYmV0d2VlbiBDRyBhbmQg
Q2Fpcm8gYmFjay1lbmRzLgorICAgICAgICAtIAorICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENB
U0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOiAg
QWRkIHNpZ25hdHVyZXMgZm9yIHByaXZhdGUgd2luCisgICAgICAgICAgaW5pdGlhbGl6YXRpb24g
ZnVuY3Rpb25zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
OiAgVXNlIHVuaWZvcm0gZm9udCBhY2Nlc3NvcgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fpcm9XaW4uY3BwOiBSZW1vdmVkLiAgKFVuaXZl
cnNhbCB2ZXJzaW9uCisgICAgICAgICAgbm93IHBhcnQgb2YgdGhlIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvLyBmb2xkZXIpCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGFDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Zm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjpGb250Q3VzdG9tUGxhdGZvcm1E
YXRhQ2Fpcm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzY2FsZWRGb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwOiBDb3BpZWQgZnJv
bSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6ICBTdHJpcHBl
ZCBvdXQKKyAgICAgICAgICBDRy1zcGVjaWZpYyBjb2RlIChtb3ZlZCB0byBGb250UGxhdGZvcm1E
YXRhW0NHfENhaXJvXS5jcHApLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlQ0dXaW4uY3BwOiBDb3BpZWQgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpm
aWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
YWlyb1dpbi5jcHA6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VU
cmVlTm9kZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHA6IFJl
bW92ZWQuICBSZXBsYWNlZAorICAgICAgICAgIHdpdGggcGxhdGZvcm0tc3BlY2lmaWMgdmVyc2lv
bnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtUHJpdmF0ZUlu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtUHJpdmF0ZURl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtUHJpdmF0
ZVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVByaXZhdGVJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVByaXZhdGVEZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVByaXZhdGVXaWR0aEZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpzZXRGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1E
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgpOgorCisKKworCiAyMDA4LTAyLTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0uCkluZGV4OiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gMzAzOTEpCisrKyBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzkwMCw2ICszOTAwLDEwIEBACiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+
DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
d2luXEZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0K
KwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdp
blxGb250UGxhdGZvcm1EYXRhV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpAQCAt
MzkzMiw3ICszOTM2LDcgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0Zp
bGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luXEdseXBoUGFnZVRyZWVOb2RlV2luLmNwcCINCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxHbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcCINCiAJCQkJ
CQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAkocmV2aXNpb24gMzAzOTEpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgogICoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM3
LDYgKzM3LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWwKICNp
bmNsdWRlIDx1c3AxMC5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERl
c2NyaXB0aW9uOwpAQCAtMTA2LDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBz
aG91bGRBcHBseU1hY0FzY2VudEhhY2soKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQor
I2lmIFBMQVRGT1JNKENBSVJPKQogICAgIHZvaWQgc2V0Rm9udChjYWlyb190KikgY29uc3Q7CiAj
ZW5kaWYKIApAQCAtMTIwLDYgKzEyNCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
bW9uSW5pdCgpOwogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQgcGxhdGZvcm1Qcml2YXRl
SW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1Qcml2YXRlRGVzdHJveSgpOworICAgIGZsb2F0IHBs
YXRmb3JtUHJpdmF0ZVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworI2VuZGlmCisK
IHB1YmxpYzoKICAgICBpbnQgbV9hc2NlbnQ7CiAgICAgaW50IG1fZGVzY2VudDsKSW5kZXg6IHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiAzMDM5MSkKKysrIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3
IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKIAogICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwog
Ci0gICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7
CisgICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5wbGF0Zm9ybUZv
bnQoKSk7CiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9y
bUlkZW50aXR5OwogICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwpJbmRleDogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsOCArMzUsMTAgQEAKICNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKICNpbmNsdWRlIDx3aW5k
b3dzLmg+CiAjaW5jbHVkZSA8bWxhbmcuaD4KKyNpZiBQTEFURk9STShDRykKICNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKIAogdXNp
bmcgc3RkOjptaW47CiAKQEAgLTQ1LDcgKzQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAogdm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CisjaWYgUExBVEZPUk0oQ0cpCiAgICAgd2tT
ZXRVcEZvbnRDYWNoZSgxNTM2ICogMTAyNCAqIDQpOyAvLyBUaGlzIHNpemUgbWF0Y2hlcyBNYWMu
CisjZW5kaWYKIH0KIAogSU1MYW5nRm9udExpbmsyKiBGb250Q2FjaGU6OmdldEZvbnRMaW5rSW50
ZXJmYWNlKCkKQEAgLTQxNCw3ICs0MTgsNyBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQCiAgICAgCiAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gbmV3IEZv
bnRQbGF0Zm9ybURhdGEoaGZvbnQsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5ib2xkKCksIGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSwgdXNlR0RJKTsK
LSAgICBpZiAoIXJlc3VsdC0+Y2dGb250KCkpIHsKKyAgICBpZiAoIXJlc3VsdC0+cGxhdGZvcm1G
b250KCkpIHsKICAgICAgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBDR0ZvbnRSZWYgZmFpbGVk
IGZvciBzb21lIHJlYXNvbi4gIFdlIGFscmVhZHkgYXNzZXJ0ZWQgaW4gZGVidWcgYnVpbGRzLCBi
dXQgdG8gbWFrZQogICAgICAgICAvLyBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB3ZSBkb24ndCB1c2Ug
dGhpcyBmb250LCBnbyBhaGVhZCBhbmQgcmV0dXJuIDAgc28gdGhhdCB3ZSBjYW4gZmFsbCBiYWNr
IHRvIHRoZSBuZXh0CiAgICAgICAgIC8vIGZvbnQuCkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhaXJvV2luLmNwcAkocmV2aXNpb24gMzAzOTEpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi19CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMCkKKysrIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YUNhaXJvLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6fkZvbnRD
dXN0b21QbGF0Zm9ybURhdGFDYWlybygpCit7CisgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveSht
X2ZvbnRGYWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Q2Fpcm86OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMp
Cit7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250RmFjZSwgc2l6ZSwgYm9sZCwg
aXRhbGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZURhdGEodm9pZCogZGF0YSkKK3sKKyAg
ICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYoKTsKK30KKworRm9udEN1
c3RvbVBsYXRmb3JtRGF0YUNhaXJvKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJl
ZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOworCisg
ICAgYnVmZmVyLT5yZWYoKTsKKyAgICBIRk9OVCBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxIRk9O
VD4oYnVmZmVyKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UgPSBjYWlyb193aW4z
Ml9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250KTsKKyAgICBpZiAoIWZvbnRGYWNlKQor
ICAgICAgIHJldHVybiAwOworCisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBidWZm
ZXJLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91c2VyX2RhdGEoZm9udEZhY2UsICZidWZm
ZXJLZXksIGJ1ZmZlciwgcmVsZWFzZURhdGEpOworCisgICAgcmV0dXJuIG5ldyBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8oZm9udEZhY2UpOworfQorCit9CkluZGV4OiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oCShyZXZpc2lv
biAwKQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWly
by5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGFDYWlyb19oCisjZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyb19oCisKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKKworc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyA6IE5vbmNvcHlhYmxlIHsK
KyAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8oY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRG
YWNlKQorICAgIDogbV9mb250RmFjZShmb250RmFjZSkKKyAgICB7fQorICAgIH5Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8oKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3Jt
RGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisKKyAgICBjYWlyb19mb250
X2ZhY2VfdCogbV9mb250RmFjZTsKK307CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyog
Y3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CisKK30K
KworI2VuZGlmCkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJ
KHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBp
bmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3Bw
IGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjYsOCArMjYsMTcgQEAKIAogI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIK
IAotdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyAqSEZPTlQ7Ci10eXBlZGVmIHN0cnVjdCBDR0ZvbnQg
KkNHRm9udFJlZjsKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5o
PgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOworCisjaWYgUExBVEZP
Uk0oQ0cpCit0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIEZvbnRSZWY7CisjZWxpZiBQTEFURk9STShD
QUlSTykKK3R5cGVkZWYgY2Fpcm9fZm9udF9mYWNlX3QqIEZvbnRSZWY7CisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBVc2Vk
IGZvciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNoZSdzIGhhc2ggdGFibGVzLgogICAg
IEZvbnRQbGF0Zm9ybURhdGEoRGVsZXRlZCkKICAgICA6IG1fZm9udCgoSEZPTlQpLTEpCi0gICAg
LCBtX2NnRm9udChOVUxMKQorICAgICwgbV9wbGF0Zm9ybUZvbnQoTlVMTCkKICAgICAsIG1fc2l6
ZSgwKQogICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0aWNPYmxp
cXVlKGZhbHNlKQpAQCAtNTAsNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1E
YXRhKCkKICAgICA6IG1fZm9udCgwKQotICAgICwgbV9jZ0ZvbnQoTlVMTCkKKyAgICAsIG1fcGxh
dGZvcm1Gb250KE5VTEwpCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fc3ludGhldGljQm9sZChm
YWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKQEAgLTU5LDExICs2OCwxNyBA
QCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRhKEhGT05ULCBmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEo
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotICAgIEZvbnRQbGF0Zm9ybURh
dGEoQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisgICAg
Rm9udFBsYXRmb3JtRGF0YShGb250UmVmLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2Js
aXF1ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIAorICAgIHZvaWQgcGxhdGZvcm1EYXRh
SW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpOwor
CiAgICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KLSAgICBDR0ZvbnRS
ZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQ7IH0KKyAgICBGb250UmVmIHBsYXRm
b3JtRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1Gb250OyB9CisjaWYgUExBVEZPUk0o
Q0FJUk8pCisgICAgdm9pZCBzZXRGb250KGNhaXJvX3QqIGZ0KSBjb25zdDsKKyAgICBjYWlyb19z
Y2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRGb250OyB9
CisjZW5kaWYKIAogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAg
ICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CkBAIC03OCwxNCAr
OTMsMjMgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKSBjb25zdAogICAgIHsgCi0gICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3Ro
ZXIubV9mb250ICYmIG1fY2dGb250ID09b3RoZXIubV9jZ0ZvbnQgJiYgbV9zaXplID09IG90aGVy
Lm1fc2l6ZSAmJgorICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udCAmJgorICAg
ICAgICAgICAgICAgbV9wbGF0Zm9ybUZvbnQgPT0gb3RoZXIubV9wbGF0Zm9ybUZvbnQgJiYKKyNp
ZiBQTEFURk9STShDQUlSTykKKyAgICAgICAgICAgICAgIG1fc2NhbGVkRm9udCA9PSBvdGhlci5t
X3NjYWxlZEZvbnQgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgbV9zaXplID09IG90aGVyLm1f
c2l6ZSAmJgogICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID09IG90aGVyLm1fc3ludGhl
dGljQm9sZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVl
ICYmCiAgICAgICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKICAgICB9CiAK
IHByaXZhdGU6CiAgICAgSEZPTlQgbV9mb250OwotICAgIENHRm9udFJlZiBtX2NnRm9udDsKKyAg
ICBGb250UmVmIG1fcGxhdGZvcm1Gb250OworCisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OworI2VuZGlmCiAKICAgICBmbG9hdCBtX3Np
emU7CiAgICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2aXNpb24gMzAxNTUpCShmcm9t
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcDozMDE1NSkKKysr
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZv
bnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgY29uc3QgaW50IEJvbGQgPSAoMSA8PCAwKTsKK3N0YXRpYyBjb25zdCBpbnQgSXRhbGlj
ID0gKDEgPDwgMSk7CitzdGF0aWMgY29uc3QgaW50IEJvbGRPYmxpcXVlID0gKDEgPDwgMik7CisK
K3N0YXRpYyBpbmxpbmUgVVNIT1JUIHJlYWRCaWdFbmRpYW5Xb3JkKGNvbnN0IEJZVEUqIHdvcmQp
IHsgcmV0dXJuICh3b3JkWzBdIDw8IDgpIHwgd29yZFsxXTsgfQorCitzdGF0aWMgQ0ZTdHJpbmdS
ZWYgZ2V0UG9zdFNjcmlwdE5hbWUoQ0ZTdHJpbmdSZWYgZmFjZU5hbWUsIEhEQyBkYykKK3sKKyAg
ICBjb25zdCBEV09SRCBjTWF4TmFtZVRhYmxlU2l6ZSA9IDEwMjQgKiAxMDI0OworCisgICAgc3Rh
dGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gbmFtZU1hcDsKKwor
ICAgIC8vIENoZWNrIG91ciBoYXNoIGZpcnN0LgorICAgIFN0cmluZyBmYWNlU3RyaW5nKGZhY2VO
YW1lKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlc3VsdCA9IG5hbWVNYXAuZ2V0KGZh
Y2VTdHJpbmcpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQuZ2V0KCk7
CisKKyAgICAvLyBXZSBuZWVkIHRvIG9idGFpbiB0aGUgUG9zdFNjcmlwdCBuYW1lIGZyb20gdGhl
IG5hbWUgdGFibGUgYW5kIHVzZSBpdCBpbnN0ZWFkLC4KKyAgICBEV09SRCBidWZmZXJTaXplID0g
R2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgTlVMTCwgMCk7IC8vICJuYW1lIiBiYWNrd2FyZHMK
KyAgICBpZiAoYnVmZmVyU2l6ZSA9PSAwIHx8IGJ1ZmZlclNpemUgPT0gR0RJX0VSUk9SIHx8IGJ1
ZmZlclNpemUgPiBjTWF4TmFtZVRhYmxlU2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAK
KyAgICBWZWN0b3I8QllURT4gYnVmZmVyVmVjdG9yKGJ1ZmZlclNpemUpOworICAgIEJZVEUqIGJ1
ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CisgICAgaWYgKEdldEZvbnREYXRhKGRjLCAnZW1h
bicsIDAsIGJ1ZmZlciwgYnVmZmVyU2l6ZSkgPT0gR0RJX0VSUk9SKQorICAgICAgICByZXR1cm4g
TlVMTDsKKworICAgIGlmIChidWZmZXJTaXplIDwgNikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK
KyAgICBVU0hPUlQgbnVtYmVyT2ZSZWNvcmRzID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsg
Mik7CisgICAgVUlOVCBzdHJpbmdzT2Zmc2V0ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsg
NCk7CisgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0KQorICAgICAgICByZXR1cm4g
TlVMTDsKKworICAgIEJZVEUqIHN0cmluZ3MgPSBidWZmZXIgKyBzdHJpbmdzT2Zmc2V0OworCisg
ICAgLy8gTm93IHdhbGsgZWFjaCBuYW1lIHJlY29yZCBsb29raW5nIGZvciBhIE1hYyBvciBXaW5k
b3dzIFBvc3RTY3JpcHQgbmFtZS4KKyAgICBVSU5UIG9mZnNldCA9IDY7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1iZXJPZlJlY29yZHM7IGkrKykgeworICAgICAgICBpZiAoYnVmZmVyU2l6
ZSA8IG9mZnNldCArIDEyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgVVNI
T1JUIHBsYXRmb3JtSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQpOworICAg
ICAgICBVU0hPUlQgZW5jb2RpbmdJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNl
dCArIDIpOworICAgICAgICBVU0hPUlQgbGFuZ3VhZ2VJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1
ZmZlciArIG9mZnNldCArIDQpOworICAgICAgICBVU0hPUlQgbmFtZUlEID0gcmVhZEJpZ0VuZGlh
bldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNik7CisgICAgICAgIFVTSE9SVCBsZW5ndGggPSByZWFk
QmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA4KTsKKyAgICAgICAgVVNIT1JUIG5hbWVP
ZmZzZXQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyAxMCk7CisKKyAgICAg
ICAgaWYgKHBsYXRmb3JtSUQgPT0gMyAmJiBlbmNvZGluZ0lEID09IDEgJiYgbGFuZ3VhZ2VJRCA9
PSAweDQwOSAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFdpbmRv
d3MgUG9zdFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVyZWZvcmUgVVRGLTE2LgorICAgICAgICAgICAg
Ly8gUGFzcyBCaWcgRW5kaWFuIGFzIHRoZSBlbmNvZGluZy4KKyAgICAgICAgICAgIGlmIChidWZm
ZXJTaXplIDwgc3RyaW5nc09mZnNldCArIG5hbWVPZmZzZXQgKyBsZW5ndGgpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXN1bHQuYWRvcHRDRihDRlN0cmluZ0Ny
ZWF0ZVdpdGhCeXRlcyhOVUxMLCBzdHJpbmdzICsgbmFtZU9mZnNldCwgbGVuZ3RoLCBrQ0ZTdHJp
bmdFbmNvZGluZ1VURjE2QkUsIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fSBlbHNlIGlmIChwbGF0Zm9ybUlEID09IDEgJiYgZW5jb2RpbmdJRCA9PSAwICYmIGxhbmd1YWdl
SUQgPT0gMCAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIE1hYyBQ
b3N0U2NyaXB0IG5hbWUgYW5kIGlzIHRoZXJlZm9yZSBBU0NJSS4KKyAgICAgICAgICAgIC8vIFNl
ZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZXh0Zm9udHMvVFRSZWZNYW4vUk0wNi9DaGFw
Nm5hbWUuaHRtbAorICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0ICsg
bmFtZU9mZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
ICAgICAgIHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHN0cmlu
Z3MgKyBuYW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSAxMjsK
KyAgICB9CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBuYW1lTWFwLnNldChmYWNlU3RyaW5n
LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBpbnQgQ0FM
TEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRF
WFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAg
IGludCAqc3R5bGUgPSByZWludGVycHJldF9jYXN0PGludCo+KGxQYXJhbSk7CisKKyAgICAvLyBG
SVhNRTogSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgTHVjaWRhIHdlIGdvIGFoZWFkIGFuZCBjb25z
aWRlciBhIHdlaWdodCBvZiA2MDAgdG8gYmUgYm9sZC4KKyAgICAvLyBUaGlzIGRvZXMgbWVhbiB3
ZSdsbCBjb25zaWRlciBkZW1pYm9sZCBhbmQgc2VtaWJvbGQgZm9udHMgb24gd2luZG93cyB0byBh
bHNvIGJlIGJvbGQuICBUaGlzCisgICAgLy8gaXMgcmFyZSBlbm91Z2ggdGhhdCBpdCBzZWVtcyBs
aWtlIGFuIG9rIGhhY2sgZm9yIG5vdy4KKyAgICBpZiAobG9nRm9udC0+bGZXZWlnaHQgPj0gNjAw
KSB7CisgICAgICAgIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgICAgICpzdHlsZSB8
PSBCb2xkT2JsaXF1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnN0eWxlIHw9IEJvbGQ7
CisgICAgfSBlbHNlIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgKnN0eWxlIHw9IEl0
YWxpYzsKKworICAgIHJldHVybiAxOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBi
b29sIHVzZUdESSkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9zaXplKHNpemUpCisgICAg
LCBtX2NnRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICwgbV9zeW50
aGV0aWNPYmxpcXVlKGZhbHNlKQorICAgICwgbV91c2VHREkodXNlR0RJKQoreworICAgIEhEQyBo
ZGMgPSBHZXREQygwKTsKKyAgICBTYXZlREMoaGRjKTsKKyAgICAKKyAgICBTZWxlY3RPYmplY3Qo
aGRjLCBmb250KTsKKyAgICBVSU5UIGJ1ZmZlclNpemUgPSBHZXRPdXRsaW5lVGV4dE1ldHJpY3Mo
aGRjLCAwLCBOVUxMKTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYnVmZmVyU2l6ZSAhPSAw
LCAiQml0bWFwIGZvbnRzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDb3JlR3JhcGhpY3MuIik7CisKKyAg
ICBpZiAoYnVmZmVyU2l6ZSAhPSAwKSB7CisgICAgICAgIE9VVExJTkVURVhUTUVUUklDVyogbWV0
cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAg
ICBHZXRPdXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6ZSwgbWV0cmljcyk7CisgICAg
ICAgIFdDSEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRyX3QpbWV0cmljcyArICh1aW50
cHRyX3QpbWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKKworICAgICAgICBpZiAoIXVzZUdESSAmJiAo
Ym9sZCB8fCBvYmxpcXVlKSkgeworICAgICAgICAgICAgTE9HRk9OVCBsb2dGb250OworCisgICAg
ICAgICAgICBpbnQgbGVuID0gbWluKChpbnQpd2NzbGVuKGZhY2VOYW1lKSwgTEZfRkFDRVNJWkUg
LSAxKTsKKyAgICAgICAgICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhY2VOYW1lLCBs
ZW4gKiBzaXplb2YoV09SRCkpOworICAgICAgICAgICAgbG9nRm9udC5sZkZhY2VOYW1lW2xlbl0g
PSAnXDAnOworICAgICAgICAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBtZXRyaWNzLT5vdG1UZXh0
TWV0cmljcy50bUNoYXJTZXQ7CisgICAgICAgICAgICBsb2dGb250LmxmUGl0Y2hBbmRGYW1pbHkg
PSAwOworCisgICAgICAgICAgICBpbnQgc3R5bGVzID0gMDsKKyAgICAgICAgICAgIEVudW1Gb250
RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCBlbnVtU3R5bGVzQ2FsbGJhY2ssIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBBUkFNPigmc3R5bGVzKSwgMCk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdl
IG5lZWQgdG8gc3ludGhlc2l6ZSBib2xkIG9yIG9ibGlxdWUuIFRoZSBydWxlIHRoYXQgY29tcGxp
Y2F0ZXMgdGhpbmdzIGhlcmUKKyAgICAgICAgICAgIC8vIGlzIHRoYXQgaWYgdGhlIHJlcXVlc3Rl
ZCBmb250IGlzIGJvbGQgYW5kIG9ibGlxdWUsIGFuZCBib3RoIGEgYm9sZCBmb250IGFuZCBhbiBv
YmxpcXVlIGZvbnQKKyAgICAgICAgICAgIC8vIGV4aXN0LCB0aGUgYm9sZCBmb250IHNob3VsZCBi
ZSB1c2VkLCBhbmQgb2JsaXF1ZSBzeW50aGVzaXplZC4KKyAgICAgICAgICAgIGlmIChib2xkICYm
IG9ibGlxdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVzID09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
bV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0
eWxlcyAmIEJvbGQpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVzICYgSXRhbGljKQorICAgICAgICAg
ICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlm
IChib2xkICYmICghKHN0eWxlcyAmIEJvbGQpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zeW50
aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAob2JsaXF1ZSAmJiAhKHN0
eWxlcyAmIEl0YWxpYykpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdGhlIGZhY2UgbmFtZSBmaXJzdC4g
IFdpbmRvd3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwgYW5kIENHIGRvZXNuJ3Qg
a25vdyBhYm91dAorICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAgSWYgdGhlIGNyZWF0ZSBm
YWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCisgICAgICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNlTmFtZSkpKTsKKyAg
ICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVsbE5hbWUuZ2V0KCkp
OworICAgICAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiBwb3N0
U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdldCgpLCBoZGMpOworICAg
ICAgICAgICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7CisgICAgICAgICAgICAgICAgbV9jZ0ZvbnQg
PSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2NnRm9udCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZnJlZShtZXRyaWNzKTsKKyAgICB9CisKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVs
ZWFzZURDKDAsIGhkYyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBtX2ZvbnQoMCkKKyAg
ICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jZ0ZvbnQoMCkKKyAgICAsIG1fc3ludGhldGljQm9s
ZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX3VzZUdE
SShmYWxzZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0Zv
bnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBt
X2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jZ0ZvbnQoZm9udCkKKyAgICAs
IG1fc3ludGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUp
CisgICAgLCBtX3VzZUdESShmYWxzZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEoKQoreworfQorCit9CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2aXNpb24gMzAxNTUpCisrKyBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250
IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3Ro
ZXIgdGhhbgogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTAg
KzM1LDYgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGNvbnN0IGludCBCb2xkID0gKDEgPDwgMCk7Ci1zdGF0aWMgY29uc3QgaW50IEl0YWxpYyA9ICgx
IDw8IDEpOwotc3RhdGljIGNvbnN0IGludCBCb2xkT2JsaXF1ZSA9ICgxIDw8IDIpOwotCiBzdGF0
aWMgaW5saW5lIFVTSE9SVCByZWFkQmlnRW5kaWFuV29yZChjb25zdCBCWVRFKiB3b3JkKSB7IHJl
dHVybiAod29yZFswXSA8PCA4KSB8IHdvcmRbMV07IH0KIAogc3RhdGljIENGU3RyaW5nUmVmIGdl
dFBvc3RTY3JpcHROYW1lKENGU3RyaW5nUmVmIGZhY2VOYW1lLCBIREMgZGMpCkBAIC0xMTAsMTE1
ICsxMDYsMjkgQEAgc3RhdGljIENGU3RyaW5nUmVmIGdldFBvc3RTY3JpcHROYW1lKENGUwogICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bVN0eWxl
c0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMqIG1ldHJp
Y3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQordm9pZCBGb250UGxhdGZvcm1EYXRh
OjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFS
KiBmYWNlTmFtZSkKIHsKLSAgICBpbnQgKnN0eWxlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihs
UGFyYW0pOwotCi0gICAgLy8gRklYTUU6IEluIG9yZGVyIHRvIGFjY29tbW9kYXRlIEx1Y2lkYSB3
ZSBnbyBhaGVhZCBhbmQgY29uc2lkZXIgYSB3ZWlnaHQgb2YgNjAwIHRvIGJlIGJvbGQuCi0gICAg
Ly8gVGhpcyBkb2VzIG1lYW4gd2UnbGwgY29uc2lkZXIgZGVtaWJvbGQgYW5kIHNlbWlib2xkIGZv
bnRzIG9uIHdpbmRvd3MgdG8gYWxzbyBiZSBib2xkLiAgVGhpcwotICAgIC8vIGlzIHJhcmUgZW5v
dWdoIHRoYXQgaXQgc2VlbXMgbGlrZSBhbiBvayBoYWNrIGZvciBub3cuCi0gICAgaWYgKGxvZ0Zv
bnQtPmxmV2VpZ2h0ID49IDYwMCkgewotICAgICAgICBpZiAobG9nRm9udC0+bGZJdGFsaWMpCi0g
ICAgICAgICAgICAqc3R5bGUgfD0gQm9sZE9ibGlxdWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICpzdHlsZSB8PSBCb2xkOwotICAgIH0gZWxzZSBpZiAobG9nRm9udC0+bGZJdGFsaWMpCi0g
ICAgICAgICpzdHlsZSB8PSBJdGFsaWM7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBtX2ZvbnQoZm9udCkKLSAgICAs
IG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAgICAsIG1fc3ludGhldGljQm9sZChm
YWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fdXNlR0RJKHVz
ZUdESSkKLXsKLSAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0gICAgU2F2ZURDKGhkYyk7Ci0gICAg
Ci0gICAgU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7Ci0gICAgVUlOVCBidWZmZXJTaXplID0gR2V0
T3V0bGluZVRleHRNZXRyaWNzKGhkYywgMCwgTlVMTCk7Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGJ1ZmZlclNpemUgIT0gMCwgIkJpdG1hcCBmb250cyBub3Qgc3VwcG9ydGVkIHdpdGggQ29y
ZUdyYXBoaWNzLiIpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgIT0gMCkgewotICAgICAgICBPVVRM
SU5FVEVYVE1FVFJJQ1cqIG1ldHJpY3MgPSAoT1VUTElORVRFWFRNRVRSSUNXKiltYWxsb2MoYnVm
ZmVyU2l6ZSk7Ci0KLSAgICAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzVyhoZGMsIGJ1ZmZlclNp
emUsIG1ldHJpY3MpOwotICAgICAgICBXQ0hBUiogZmFjZU5hbWUgPSAoV0NIQVIqKSgodWludHB0
cl90KW1ldHJpY3MgKyAodWludHB0cl90KW1ldHJpY3MtPm90bXBGYWNlTmFtZSk7Ci0KLSAgICAg
ICAgaWYgKCF1c2VHREkgJiYgKGJvbGQgfHwgb2JsaXF1ZSkpIHsKLSAgICAgICAgICAgIExPR0ZP
TlQgbG9nRm9udDsKLQotICAgICAgICAgICAgaW50IGxlbiA9IG1pbigoaW50KXdjc2xlbihmYWNl
TmFtZSksIExGX0ZBQ0VTSVpFIC0gMSk7Ci0gICAgICAgICAgICBtZW1jcHkobG9nRm9udC5sZkZh
Y2VOYW1lLCBmYWNlTmFtZSwgbGVuICogc2l6ZW9mKFdPUkQpKTsKLSAgICAgICAgICAgIGxvZ0Zv
bnQubGZGYWNlTmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGxvZ0ZvbnQubGZDaGFyU2V0
ID0gbWV0cmljcy0+b3RtVGV4dE1ldHJpY3MudG1DaGFyU2V0OwotICAgICAgICAgICAgbG9nRm9u
dC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKLQotICAgICAgICAgICAgaW50IHN0eWxlcyA9IDA7Ci0g
ICAgICAgICAgICBFbnVtRm9udEZhbWlsaWVzRXgoaGRjLCAmbG9nRm9udCwgZW51bVN0eWxlc0Nh
bGxiYWNrLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnN0eWxlcyksIDApOwotCi0gICAgICAg
ICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHN5bnRoZXNpemUgYm9sZCBvciBvYmxpcXVlLiBU
aGUgcnVsZSB0aGF0IGNvbXBsaWNhdGVzIHRoaW5ncyBoZXJlCi0gICAgICAgICAgICAvLyBpcyB0
aGF0IGlmIHRoZSByZXF1ZXN0ZWQgZm9udCBpcyBib2xkIGFuZCBvYmxpcXVlLCBhbmQgYm90aCBh
IGJvbGQgZm9udCBhbmQgYW4gb2JsaXF1ZSBmb250Ci0gICAgICAgICAgICAvLyBleGlzdCwgdGhl
IGJvbGQgZm9udCBzaG91bGQgYmUgdXNlZCwgYW5kIG9ibGlxdWUgc3ludGhlc2l6ZWQuCi0gICAg
ICAgICAgICBpZiAoYm9sZCAmJiBvYmxpcXVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxl
cyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChzdHlsZXMgJiBCb2xkKQotICAgICAgICAgICAgICAgICAgICBtX3N5
bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlcyAm
IEl0YWxpYykKLSAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYm9sZCAmJiAoIShzdHlsZXMgJiBCb2xkKSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Ci0gICAgICAgICAgICAgIGVsc2Ug
aWYgKG9ibGlxdWUgJiYgIShzdHlsZXMgJiBJdGFsaWMpKQotICAgICAgICAgICAgICAgICAgICBt
X3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHJ5IHRo
ZSBmYWNlIG5hbWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQgdXAgbG9jYWxpemluZyB0aGlzIG5h
bWUsIGFuZCBDRyBkb2Vzbid0IGtub3cgYWJvdXQKLSAgICAgICAgLy8gdGhlIGxvY2FsaXphdGlv
bi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUgUG9zdFNjcmlwdCBuYW1lLgot
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKWZhY2VOYW1lLCB3Y3Ns
ZW4oZmFjZU5hbWUpKSk7Ci0gICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnRO
YW1lKGZ1bGxOYW1lLmdldCgpKTsKLSAgICAgICAgaWYgKCFtX2NnRm9udCkgewotICAgICAgICAg
ICAgQ0ZTdHJpbmdSZWYgcG9zdFNjcmlwdE5hbWUgPSBnZXRQb3N0U2NyaXB0TmFtZShmdWxsTmFt
ZS5nZXQoKSwgaGRjKTsKLSAgICAgICAgICAgIGlmIChwb3N0U2NyaXB0TmFtZSkgewotICAgICAg
ICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3JpcHRO
YW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jZ0ZvbnQpOwotICAgICAgICAgICAgfQor
ICAgIC8vIFRyeSB0aGUgZmFjZSBuYW1lIGZpcnN0LiAgV2luZG93cyBtYXkgZW5kIHVwIGxvY2Fs
aXppbmcgdGhpcyBuYW1lLCBhbmQgQ0cgZG9lc24ndCBrbm93IGFib3V0CisgICAgLy8gdGhlIGxv
Y2FsaXphdGlvbi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUgUG9zdFNjcmlw
dCBuYW1lLgorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUs
IHdjc2xlbihmYWNlTmFtZSkpKTsKKyAgICBtX3BsYXRmb3JtRm9udCA9IENHRm9udENyZWF0ZVdp
dGhGb250TmFtZShmdWxsTmFtZS5nZXQoKSk7CisgICAgaWYgKCFtX3BsYXRmb3JtRm9udCkgewor
ICAgICAgICBDRlN0cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1
bGxOYW1lLmdldCgpLCBoZGMpOworICAgICAgICBpZiAocG9zdFNjcmlwdE5hbWUpIHsKKyAgICAg
ICAgICAgIG1fcGxhdGZvcm1Gb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3Jp
cHROYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3BsYXRmb3JtRm9udCk7CiAgICAgICAgIH0K
LSAgICAgICAgZnJlZShtZXRyaWNzKTsKICAgICB9Ci0KLSAgICBSZXN0b3JlREMoaGRjLCAtMSk7
Ci0gICAgUmVsZWFzZURDKDAsIGhkYyk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX2Zv
bnQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCi0gICAg
LCBtX3VzZUdESShmYWxzZSkKLXsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
CiAgICAgOiBtX2ZvbnQoMCkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoZm9u
dCkKKyAgICAsIG1fcGxhdGZvcm1Gb250KGZvbnQpCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9s
ZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV91c2VHREkoZmFs
c2UpCiB7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLX0K
LQogfQpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDApCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0
aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorICog
Rm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IEJyZW50IEZ1bGdoYW0KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgorCit1c2luZyBzdGQ6Om1pbjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0
YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKQor
eworICAgIG1fcGxhdGZvcm1Gb250ID0gY2Fpcm9fd2luMzJfZm9udF9mYWNlX2NyZWF0ZV9mb3Jf
aGZvbnQoZm9udCk7CisgICAgY2Fpcm9fbWF0cml4X3Qgc2l6ZU1hdHJpeCwgY3RtOworICAgIGNh
aXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOworICAgIGNhaXJvX21hdHJpeF9pbml0X3Nj
YWxlKCZzaXplTWF0cml4LCBzaXplLCBzaXplKTsKKworICAgIHN0YXRpYyBjYWlyb19mb250X29w
dGlvbnNfdCogZm9udE9wdGlvbnMgPSAwOworICAgIGlmICghZm9udE9wdGlvbnMpCisgICAgICAg
Zm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgY2Fpcm9fZm9u
dF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQ
SVhFTCk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUobV9w
bGF0Zm9ybUZvbnQsICZzaXplTWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNl
LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQor
ICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3BsYXRmb3JtRm9udChmb250RmFjZSkKKyAgICAs
IG1fc2NhbGVkRm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQoreworICAgY2Fp
cm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKCZmb250
TWF0cml4LCBzaXplLCBzaXplKTsKKyAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgIGNhaXJvX21h
dHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOworICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9wdGlv
bnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisKKyAgIC8vIFdlIGZvcmNlIGFudGlh
bGlhc2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3ZpZGUgY29uc2lzdGVudAorICAgLy8g
dHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZvciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4K
KyAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfaGludF9zdHlsZShvcHRpb25zLCBDQUlST19ISU5U
X1NUWUxFX05PTkUpOworICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9u
cywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOworCisgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2Fs
ZWRfZm9udF9jcmVhdGUoZm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAg
IGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG9wdGlvbnMpOworfQorCit2b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OnNldEZvbnQoY2Fpcm9fdCogY3IpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2Nh
bGVkRm9udCk7CisKKyAgICBjYWlyb19zZXRfc2NhbGVkX2ZvbnQoY3IsIG1fc2NhbGVkRm9udCk7
Cit9CisKK30KSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YVdpbi5jcHAJKHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsOCBAQAogICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBz
aG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCiAgKiBGb250TWFjLmNw
cCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEJyZW50IEZ1bGdoYW0KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjYsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksNzcgKzM5LDYg
QEAgc3RhdGljIGNvbnN0IGludCBCb2xkID0gKDEgPDwgMCk7CiBzdGF0aWMgY29uc3QgaW50IEl0
YWxpYyA9ICgxIDw8IDEpOwogc3RhdGljIGNvbnN0IGludCBCb2xkT2JsaXF1ZSA9ICgxIDw8IDIp
OwogCi1zdGF0aWMgaW5saW5lIFVTSE9SVCByZWFkQmlnRW5kaWFuV29yZChjb25zdCBCWVRFKiB3
b3JkKSB7IHJldHVybiAod29yZFswXSA8PCA4KSB8IHdvcmRbMV07IH0KLQotc3RhdGljIENGU3Ry
aW5nUmVmIGdldFBvc3RTY3JpcHROYW1lKENGU3RyaW5nUmVmIGZhY2VOYW1lLCBIREMgZGMpCi17
Ci0gICAgY29uc3QgRFdPUkQgY01heE5hbWVUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsKLQotICAg
IHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IG5hbWVNYXA7
Ci0KLSAgICAvLyBDaGVjayBvdXIgaGFzaCBmaXJzdC4KLSAgICBTdHJpbmcgZmFjZVN0cmluZyhm
YWNlTmFtZSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiByZXN1bHQgPSBuYW1lTWFwLmdl
dChmYWNlU3RyaW5nKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0Lmdl
dCgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBvYnRhaW4gdGhlIFBvc3RTY3JpcHQgbmFtZSBmcm9t
IHRoZSBuYW1lIHRhYmxlIGFuZCB1c2UgaXQgaW5zdGVhZCwuCi0gICAgRFdPUkQgYnVmZmVyU2l6
ZSA9IEdldEZvbnREYXRhKGRjLCAnZW1hbicsIDAsIE5VTEwsIDApOyAvLyAibmFtZSIgYmFja3dh
cmRzCi0gICAgaWYgKGJ1ZmZlclNpemUgPT0gMCB8fCBidWZmZXJTaXplID09IEdESV9FUlJPUiB8
fCBidWZmZXJTaXplID4gY01heE5hbWVUYWJsZVNpemUpCi0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgCi0gICAgVmVjdG9yPEJZVEU+IGJ1ZmZlclZlY3RvcihidWZmZXJTaXplKTsKLSAgICBCWVRF
KiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0YSgpOwotICAgIGlmIChHZXRGb250RGF0YShkYywg
J2VtYW4nLCAwLCBidWZmZXIsIGJ1ZmZlclNpemUpID09IEdESV9FUlJPUikKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSA8IDYpCi0gICAgICAgIHJldHVybiBOVUxM
OwotCi0gICAgVVNIT1JUIG51bWJlck9mUmVjb3JkcyA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZl
ciArIDIpOwotICAgIFVJTlQgc3RyaW5nc09mZnNldCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZl
ciArIDQpOwotICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNldCkKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0KLSAgICBCWVRFKiBzdHJpbmdzID0gYnVmZmVyICsgc3RyaW5nc09mZnNldDsK
LQotICAgIC8vIE5vdyB3YWxrIGVhY2ggbmFtZSByZWNvcmQgbG9va2luZyBmb3IgYSBNYWMgb3Ig
V2luZG93cyBQb3N0U2NyaXB0IG5hbWUuCi0gICAgVUlOVCBvZmZzZXQgPSA2OwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWNvcmRzOyBpKyspIHsKLSAgICAgICAgaWYgKGJ1ZmZl
clNpemUgPCBvZmZzZXQgKyAxMikKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAg
IFVTSE9SVCBwbGF0Zm9ybUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0KTsK
LSAgICAgICAgVVNIT1JUIGVuY29kaW5nSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBv
ZmZzZXQgKyAyKTsKLSAgICAgICAgVVNIT1JUIGxhbmd1YWdlSUQgPSByZWFkQmlnRW5kaWFuV29y
ZChidWZmZXIgKyBvZmZzZXQgKyA0KTsKLSAgICAgICAgVVNIT1JUIG5hbWVJRCA9IHJlYWRCaWdF
bmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDYpOwotICAgICAgICBVU0hPUlQgbGVuZ3RoID0g
cmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgOCk7Ci0gICAgICAgIFVTSE9SVCBu
YW1lT2Zmc2V0ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMTApOwotCi0g
ICAgICAgIGlmIChwbGF0Zm9ybUlEID09IDMgJiYgZW5jb2RpbmdJRCA9PSAxICYmIGxhbmd1YWdl
SUQgPT0gMHg0MDkgJiYgbmFtZUlEID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBX
aW5kb3dzIFBvc3RTY3JpcHQgbmFtZSBhbmQgaXMgdGhlcmVmb3JlIFVURi0xNi4KLSAgICAgICAg
ICAgIC8vIFBhc3MgQmlnIEVuZGlhbiBhcyB0aGUgZW5jb2RpbmcuCi0gICAgICAgICAgICBpZiAo
YnVmZmVyU2l6ZSA8IHN0cmluZ3NPZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3RoKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmVzdWx0LmFkb3B0Q0YoQ0ZTdHJp
bmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxlbmd0aCwga0NG
U3RyaW5nRW5jb2RpbmdVVEYxNkJFLCBmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JRCA9PSAxICYmIGVuY29kaW5nSUQgPT0gMCAmJiBsYW5n
dWFnZUlEID09IDAgJiYgbmFtZUlEID09IDYpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBN
YWMgUG9zdFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVyZWZvcmUgQVNDSUkuCi0gICAgICAgICAgICAv
LyBTZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFuL1JNMDYv
Q2hhcDZuYW1lLmh0bWwKLSAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNl
dCArIG5hbWVPZmZzZXQgKyBsZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgICAgICAgICByZXN1bHQuYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhOVUxMLCBz
dHJpbmdzICsgbmFtZU9mZnNldCwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJLCBmYWxz
ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgKz0g
MTI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgbmFtZU1hcC5zZXQoZmFjZVN0
cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmdldCgpOwotfQotCiBzdGF0aWMgaW50
IENBTExCQUNLIGVudW1TdHlsZXNDYWxsYmFjayhjb25zdCBMT0dGT05UKiBsb2dGb250LCBjb25z
dCBURVhUTUVUUklDKiBtZXRyaWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKIHsK
ICAgICBpbnQgKnN0eWxlID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihsUGFyYW0pOwpAQCAtMTMx
LDcgKzYwLDEwIEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGMKIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQogICAgIDogbV9mb250KGZvbnQp
CiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fY2dGb250KDApCisgICAgLCBtX3BsYXRmb3Jt
Rm9udCgwKQorI2lmIFBMQVRGT1JNKENBSVJPKQorICAgICwgbV9zY2FsZWRGb250KDApCisjZW5k
aWYKICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKICAgICAsIG1fdXNlR0RJKHVzZUdESSkKQEAgLTE3OSwxNyArMTExLDggQEAgRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVAogICAgICAgICAgICAgICAgICAg
ICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVHJ5
IHRoZSBmYWNlIG5hbWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQgdXAgbG9jYWxpemluZyB0aGlz
IG5hbWUsIGFuZCBDRyBkb2Vzbid0IGtub3cgYWJvdXQKLSAgICAgICAgLy8gdGhlIGxvY2FsaXph
dGlvbi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUgUG9zdFNjcmlwdCBuYW1l
LgotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lKEFkb3B0Q0YsIENGU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKWZhY2VOYW1lLCB3
Y3NsZW4oZmFjZU5hbWUpKSk7Ci0gICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZv
bnROYW1lKGZ1bGxOYW1lLmdldCgpKTsKLSAgICAgICAgaWYgKCFtX2NnRm9udCkgewotICAgICAg
ICAgICAgQ0ZTdHJpbmdSZWYgcG9zdFNjcmlwdE5hbWUgPSBnZXRQb3N0U2NyaXB0TmFtZShmdWxs
TmFtZS5nZXQoKSwgaGRjKTsKLSAgICAgICAgICAgIGlmIChwb3N0U2NyaXB0TmFtZSkgewotICAg
ICAgICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3Jp
cHROYW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jZ0ZvbnQpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIHBsYXRmb3JtRGF0YUluaXQoZm9udCwgc2l6ZSwgaGRjLCBm
YWNlTmFtZSk7CisKICAgICAgICAgZnJlZShtZXRyaWNzKTsKICAgICB9CiAKQEAgLTIwMCwxNyAr
MTIzLDEwIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQKIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUpCiAgICAgOiBtX2ZvbnQoMCkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9j
Z0ZvbnQoMCkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3VzZUdESShmYWxzZSkKLXsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShzaXpl
KQotICAgICwgbV9jZ0ZvbnQoZm9udCkKKyAgICAsIG1fcGxhdGZvcm1Gb250KDApCisjaWYgUExB
VEZPUk0oQ0FJUk8pCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyNlbmRpZgogICAgICwgbV9zeW50
aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKICAgICAs
IG1fdXNlR0RJKGZhbHNlKQpJbmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRy
ZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMzAxNzQpCShmcm9tIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHA6MzAxNzQpCisrKyBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkds
eXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0
aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIg
aGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1
cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNp
emUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OworICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOworICAgIHdr
R2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2Nh
bEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJb
aV07CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRl
eChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlw
aERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAg
aGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGhhdmVHbHlw
aHM7Cit9CisKK30KSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDMwMTc0KQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Myw3ICs0Myw3IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW4K
IAogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgp
OworICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5wbGF0Zm9ybUZvbnQo
KSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBHbHlwaCBnbHlwaCA9IGxv
Y2FsR2x5cGhCdWZmZXJbaV07CiAgICAgICAgIGlmICghZ2x5cGgpCkluZGV4OiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZp
c2lvbiAzMDE3NCkJKGZyb20gcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
V2luLmNwcDozMDE3NCkKKysrIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
L1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciog
YnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRo
ZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5
IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAg
aWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgQ0dHbHlwaCBsb2NhbEdseXBo
QnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07CisgICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0
aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
IEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgaWYgKCFnbHlwaCkK
KyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IGdseXBoLCBmb250RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAko
cmV2aXNpb24gMzAxNzQpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTcgKzQxLDMxIEBAIGJvb2wg
R2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW4KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgQ0dHbHlwaCBsb2NhbEdseXBo
QnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07Ci0gICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0
aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKLSAgICAgICAgaWYgKCFnbHlwaCkK
LSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IGdseXBoLCBmb250RGF0YSk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKworICAg
IEhEQyBkYyA9IEdldERDKChIV05EKTApOworICAgIFNhdmVEQyhkYyk7CisgICAgU2VsZWN0T2Jq
ZWN0KGRjLCBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7CisKKyAgICBURVhUTUVU
UklDIHRtOworICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdG0pOworCisgICAgV09SRCBsb2NhbEds
eXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDJdOworICAgIERXT1JEIHJlc3VsdCA9IEdldEds
eXBoSW5kaWNlcyhkYywgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIsIDAp
OworICAgIGJvb2wgc3VjY2VzcyA9IHJlc3VsdCAhPSBHRElfRVJST1IgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJlc3VsdCkgPT0gYnVmZmVyTGVuZ3RoOworICAgIGlmIChzdWNjZXNzKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICAgICAgaWYgKCFn
bHlwaCkKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAw
LCAwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZv
ckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7CisgICAgICAgICAgICAgICAgaGF2
ZUdseXBocyA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgUmVz
dG9yZURDKGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGRjKTsKKwogICAgIHJldHVybiBoYXZl
R2x5cGhzOwogfQogCkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VU
cmVlTm9kZVdpbi5jcHAJKHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5v
ZGUuaCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKLXsKLSAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3Jl
YXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBz
dXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCi0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZv
ciBub3cuCi0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgQ0dHbHlw
aCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07Ci0gICAgd2tHZXRHbHlwaHMoZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIs
IGJ1ZmZlckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKLSAgICAgICAg
aWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGks
IDAsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQpJ
bmRleDogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAko
cmV2aXNpb24gMzAzOTEpCisrKyBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFD
R1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDQwICs0OCw5IEBAIHVzaW5nIHN0ZDo6bWF4
OwogCiBzdGF0aWMgaW5saW5lIGZsb2F0IHNjYWxlRW1Ub1VuaXRzKGZsb2F0IHgsIHVuc2lnbmVk
IHVuaXRzUGVyRW0pIHsgcmV0dXJuIHVuaXRzUGVyRW0gPyB4IC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHVuaXRzUGVyRW0pIDogeDsgfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQo
KQordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Qcml2YXRlSW5pdCgpCiB7Ci0gICAgbV9z
eW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9mb250LnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7
Ci0gICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7
Ci0gICAgbV9pc1N5c3RlbUZvbnQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9mb250LnVzZUdE
SSgpKSB7Ci0gICAgICAgIEhEQyBoZGMgPSBHZXREQygwKTsKLSAgICAgICAgSEdESU9CSiBvbGRG
b250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9mb250Lmhmb250KCkpOwotICAgICAgICBPVVRMSU5F
VEVYVE1FVFJJQyBtZXRyaWNzOwotICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaGRjLCBz
aXplb2YobWV0cmljcyksICZtZXRyaWNzKTsKLSAgICAgICAgVEVYVE1FVFJJQyYgdGV4dE1ldHJp
Y3MgPSBtZXRyaWNzLm90bVRleHRNZXRyaWNzOwotICAgICAgICBtX2FzY2VudCA9IHRleHRNZXRy
aWNzLnRtQXNjZW50OwotICAgICAgICBtX2Rlc2NlbnQgPSB0ZXh0TWV0cmljcy50bURlc2NlbnQ7
Ci0gICAgICAgIG1fbGluZUdhcCA9IHRleHRNZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nOwotICAg
ICAgICBtX2xpbmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Ci0g
ICAgICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhI
ZWlnaHQgaWYgbm8geCBnbHlwaCBpcyBwcmVzZW50LgotCi0gICAgICAgIEdMWVBITUVUUklDUyBn
bTsKLSAgICAgICAgTUFUMiBtYXQgPSB7IDEsIDAsIDAsIDEgfTsKLSAgICAgICAgRFdPUkQgbGVu
ID0gR2V0R2x5cGhPdXRsaW5lKGhkYywgJ3gnLCBHR09fTUVUUklDUywgJmdtLCAwLCAwLCAmbWF0
KTsKLSAgICAgICAgaWYgKGxlbiAhPSBHRElfRVJST1IgJiYgZ20uZ21wdEdseXBoT3JpZ2luLnkg
PiAwKQotICAgICAgICAgICAgbV94SGVpZ2h0ID0gZ20uZ21wdEdseXBoT3JpZ2luLnk7Ci0KLSAg
ICAgICAgbV91bml0c1BlckVtID0gbWV0cmljcy5vdG1FTVNxdWFyZTsKLQotICAgICAgICBTZWxl
Y3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICAgICAgUmVsZWFzZURDKDAsIGhkYyk7Ci0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHRm9udFJlZiBmb250ID0gbV9mb250LmNnRm9u
dCgpOworICAgIENHRm9udFJlZiBmb250ID0gbV9mb250LnBsYXRmb3JtRm9udCgpOwogICAgIGlu
dCBpQXNjZW50ID0gQ0dGb250R2V0QXNjZW50KGZvbnQpOwogICAgIGludCBpRGVzY2VudCA9IENH
Rm9udEdldERlc2NlbnQoZm9udCk7CiAgICAgaW50IGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGlu
Zyhmb250KTsKQEAgLTEzNywzMyArMTA2LDE3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCiAgICAgfQogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Qcml2YXRlRGVzdHJveSgpCiB7CiAg
ICAgaWYgKCFpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBEZWxldGVPYmplY3QobV9mb250Lmhm
b250KCkpOwotICAgICAgICBDR0ZvbnRSZWxlYXNlKG1fZm9udC5jZ0ZvbnQoKSk7CisgICAgICAg
IENHRm9udFJlbGVhc2UobV9mb250LnBsYXRmb3JtRm9udCgpKTsKICAgICB9Ci0KLSAgICAvLyBX
ZSBkb24ndCBoYXNoIHRoaXMgb24gV2luMzIsIHNvIGl0J3MgZWZmZWN0aXZlbHkgb3duZWQgYnkg
dXMuCi0gICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Ci0KLSAgICBTY3JpcHRGcmVlQ2Fj
aGUoJm1fc2NyaXB0Q2FjaGUpOwotICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwog
fQogCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAorZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtUHJpdmF0ZVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9udC51c2VHREkoKSkgewot
ICAgICAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNl
bGVjdE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKLSAgICAgICAgaW50IHdpZHRoOwotICAg
ICAgICBHZXRDaGFyV2lkdGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7Ci0gICAgICAgIFNl
bGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKLSAg
ICAgICAgcmV0dXJuIHdpZHRoOwotICAgIH0KLQotICAgIENHRm9udFJlZiBmb250ID0gbV9mb250
LmNnRm9udCgpOworICAgIENHRm9udFJlZiBmb250ID0gbV9mb250LnBsYXRmb3JtRm9udCgpOwog
ICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fZm9udC5zaXplKCk7CiAgICAgQ0dTaXplIGFkdmFuY2U7
CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHBv
aW50U2l6ZSwgcG9pbnRTaXplKTsKSW5kZXg6IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2OSArMzQsODUgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hl
LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxjYWlyby13aW4zMi5oPgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVkZSA8dGNoYXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUluaXQoKQordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Qcml2YXRlSW5pdCgpCiB7Ci0g
ICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0g
ICAgbV9pc1N5c3RlbUZvbnQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9mb250LnVzZUdESSgp
KSB7Ci0gICAgICAgIEhEQyBoZGMgPSBHZXREQygwKTsKLSAgICAgICAgSEdESU9CSiBvbGRGb250
ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9mb250Lmhmb250KCkpOwotICAgICAgICBPVVRMSU5FVEVY
VE1FVFJJQyBtZXRyaWNzOwotICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaGRjLCBzaXpl
b2YobWV0cmljcyksICZtZXRyaWNzKTsKLSAgICAgICAgVEVYVE1FVFJJQyYgdGV4dE1ldHJpY3Mg
PSBtZXRyaWNzLm90bVRleHRNZXRyaWNzOwotICAgICAgICBtX2FzY2VudCA9IHRleHRNZXRyaWNz
LnRtQXNjZW50OwotICAgICAgICBtX2Rlc2NlbnQgPSB0ZXh0TWV0cmljcy50bURlc2NlbnQ7Ci0g
ICAgICAgIG1fbGluZUdhcCA9IHRleHRNZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nOwotICAgICAg
ICBtX2xpbmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Ci0gICAg
ICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhIZWln
aHQgaWYgbm8geCBnbHlwaCBpcyBwcmVzZW50LgorICAgIEhEQyBoZGMgPSBHZXREQygwKTsKKyAg
ICBTYXZlREMoaGRjKTsKKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBt
X2ZvbnQuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlwbGllciA9
IGNhaXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRGb250KSAq
IG1fZm9udC5zaXplKCk7CisKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9u
dChzY2FsZWRGb250LCBoZGMpOwogCisgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljczsKKyAgICBH
ZXRUZXh0TWV0cmljcyhoZGMsICZ0ZXh0TWV0cmljcyk7CisgICAgbV9hc2NlbnQgPSBscm91bmRm
KHRleHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011bHRpcGxpZXIpOworICAgIG1fZGVzY2Vu
dCA9IGxyb3VuZGYodGV4dE1ldHJpY3MudG1EZXNjZW50ICogbWV0cmljc011bHRpcGxpZXIpOwor
ICAgIG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhIZWln
aHQgZm9yIG5vbi1UcnVldHlwZSBmb250cy4KKyAgICBtX2xpbmVHYXAgPSBscm91bmRmKHRleHRN
ZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nICogbWV0cmljc011bHRpcGxpZXIpOworICAgIG1fbGlu
ZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudCArIG1fbGluZUdhcDsKKworICAgIE9VVExJ
TkVURVhUTUVUUklDIG1ldHJpY3M7CisgICAgaWYgKEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMs
IHNpemVvZihtZXRyaWNzKSwgJm1ldHJpY3MpID4gMCkgeworICAgICAgICAvLyBUaGlzIGlzIGEg
VHJ1ZVR5cGUgZm9udC4gIFdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGFuIGFjY3VyYXRlIHhIZWln
aHQKICAgICAgICAgR0xZUEhNRVRSSUNTIGdtOwogICAgICAgICBNQVQyIG1hdCA9IHsgMSwgMCwg
MCwgMSB9OwogICAgICAgICBEV09SRCBsZW4gPSBHZXRHbHlwaE91dGxpbmUoaGRjLCAneCcsIEdH
T19NRVRSSUNTLCAmZ20sIDAsIDAsICZtYXQpOwogICAgICAgICBpZiAobGVuICE9IEdESV9FUlJP
UiAmJiBnbS5nbXB0R2x5cGhPcmlnaW4ueSA+IDApCi0gICAgICAgICAgICBtX3hIZWlnaHQgPSBn
bS5nbXB0R2x5cGhPcmlnaW4ueTsKLQotICAgICAgICBtX3VuaXRzUGVyRW0gPSBtZXRyaWNzLm90
bUVNU3F1YXJlOworICAgICAgICAgICAgbV94SGVpZ2h0ID0gZ20uZ21wdEdseXBoT3JpZ2luLnkg
KiBtZXRyaWNzTXVsdGlwbGllcjsKKyAgICB9CiAKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywg
b2xkRm9udCk7Ci0gICAgICAgIFJlbGVhc2VEQygwLCBoZGMpOworICAgIGNhaXJvX3dpbjMyX3Nj
YWxlZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250KTsKIAotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIG1faXNTeXN0ZW1Gb250ID0gZmFsc2U7CisgICAgbV9zY3JpcHRDYWNoZSA9IDA7Cisg
ICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzZWN0
aW9uIHNob3VsZCBkZXRlcm1pbmUgZm9udCBkaW1lbnNpb25zIChzZWUgQ0cgaW1wbGVtZW50YXRp
b24pLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVzdG9yZURDKGhkYywgLTEpOworICAg
IFJlbGVhc2VEQygwLCBoZGMpOwogfQogCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURl
c3Ryb3koKQordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Qcml2YXRlRGVzdHJveSgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2Zv
bnQucGxhdGZvcm1Gb250KCkpOworICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9mb250
LnNjYWxlZEZvbnQoKSk7CisKKyAgICBEZWxldGVPYmplY3QobV9mb250Lmhmb250KCkpOwogfQog
Ci1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAorZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtUHJpdmF0ZVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9udC51c2VHREkoKSkgewotICAg
ICAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVj
dE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAg
ICBHZXRDaGFyV2lkdGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7Ci0gICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKLSAgICAg
ICAgcmV0dXJuIHdpZHRoOwotICAgIH0KKyAgICBIREMgaGRjID0gR2V0REMoMCk7CisgICAgU2F2
ZURDKGhkYyk7CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gbV9mb250
LnNjYWxlZEZvbnQoKTsKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChz
Y2FsZWRGb250LCBoZGMpOworCisgICAgaW50IHdpZHRoOworICAgIEdldENoYXJXaWR0aEkoaGRj
LCBnbHlwaCwgMSwgMCwgJndpZHRoKTsKIAotICAgIC8vIEZJWE1FOiBGbGVzaCBvdXQgd2l0aCBD
YWlyby93aW4zMiBmb250IGltcGxlbWVudGF0aW9uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CiAKLSAgICBy
ZXR1cm4gMDsKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7
CisKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4zMl9zY2Fs
ZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX2ZvbnQuc2l6ZSgpOwor
ICAgIHJldHVybiB3aWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChjcik7Cisg
ICAgbV9mb250LnNldEZvbnQoY3IpOwogfQogCiB9CkluZGV4OiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDMwMzkxKQorKysgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NiArNjAsNTYgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6c2hvdWxkQXBwbHlNYWNBc2NlbgogICAg
IHJldHVybiBnX3Nob3VsZEFwcGx5TWFjQXNjZW50SGFjazsKIH0KIAordm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyNpZiBQTEFURk9STShDRykKKyAgICBtX3N5bnRoZXRp
Y0JvbGRPZmZzZXQgPSBtX2ZvbnQuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKKyNlbmRp
ZgorICAgIG1fc2NyaXB0Q2FjaGUgPSAwOworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAw
OworICAgIG1faXNTeXN0ZW1Gb250ID0gZmFsc2U7CisgICAgCisgICAgaWYgKG1fZm9udC51c2VH
REkoKSkgeworICAgICAgICBIREMgaGRjID0gR2V0REMoMCk7CisgICAgICAgIEhHRElPQkogb2xk
Rm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKKyAgICAgICAgT1VUTElO
RVRFWFRNRVRSSUMgbWV0cmljczsKKyAgICAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywg
c2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7CisgICAgICAgIFRFWFRNRVRSSUMmIHRleHRNZXRy
aWNzID0gbWV0cmljcy5vdG1UZXh0TWV0cmljczsKKyAgICAgICAgbV9hc2NlbnQgPSB0ZXh0TWV0
cmljcy50bUFzY2VudDsKKyAgICAgICAgbV9kZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNjZW50
OworICAgICAgICBtX2xpbmVHYXAgPSB0ZXh0TWV0cmljcy50bUV4dGVybmFsTGVhZGluZzsKKyAg
ICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOwor
ICAgICAgICBtX3hIZWlnaHQgPSBtX2FzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4
SGVpZ2h0IGlmIG5vIHggZ2x5cGggaXMgcHJlc2VudC4KKworICAgICAgICBHTFlQSE1FVFJJQ1Mg
Z207CisgICAgICAgIE1BVDIgbWF0ID0geyAxLCAwLCAwLCAxIH07CisgICAgICAgIERXT1JEIGxl
biA9IEdldEdseXBoT3V0bGluZShoZGMsICd4JywgR0dPX01FVFJJQ1MsICZnbSwgMCwgMCwgJm1h
dCk7CisgICAgICAgIGlmIChsZW4gIT0gR0RJX0VSUk9SICYmIGdtLmdtcHRHbHlwaE9yaWdpbi55
ID4gMCkKKyAgICAgICAgICAgIG1feEhlaWdodCA9IGdtLmdtcHRHbHlwaE9yaWdpbi55OworCisg
ICAgICAgIG1fdW5pdHNQZXJFbSA9IG1ldHJpY3Mub3RtRU1TcXVhcmU7CisKKyAgICAgICAgU2Vs
ZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgICAgIFJlbGVhc2VEQygwLCBoZGMpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiBub3QgdXNpbmcgR0RJIGZvbnRzLCBj
YWxsIGludG8gZ3JhcGhpY3MgYmFjay1lbmQgc3BlY2lmaWMgaW5pdCBsb2dpYworICAgIHBsYXRm
b3JtUHJpdmF0ZUluaXQoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKKyAgICBwbGF0Zm9ybVByaXZhdGVEZXN0cm95KCk7CisKKyAgICAvLyBXZSBkb24n
dCBoYXNoIHRoaXMgb24gV2luMzIsIHNvIGl0J3MgZWZmZWN0aXZlbHkgb3duZWQgYnkgdXMuCisg
ICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CisKKyAgICBTY3JpcHRGcmVlQ2FjaGUoJm1f
c2NyaXB0Q2FjaGUpOworICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOworfQorCiBT
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9zbWFs
bENhcHNGb250RGF0YSkgewpAQCAtMTM3LDYgKzE4NywyMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVsZWFzZURDKDAsIGRjKTsKIH0KIAorZmxvYXQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sK
KyAgICBpZiAobV9mb250LnVzZUdESSgpKSB7CisgICAgICAgIEhEQyBoZGMgPSBHZXREQygwKTsK
KyAgICAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9mb250Lmhmb250
KCkpOworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIEdldENoYXJXaWR0aEkoaGRjLCBnbHlw
aCwgMSwgMCwgJndpZHRoKTsKKyAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Cisg
ICAgICAgIFJlbGVhc2VEQygwLCBoZGMpOworICAgICAgICByZXR1cm4gd2lkdGg7CisgICAgfQor
CisgICAgLy8gSWYgbm90IHVzaW5nIEdESSBmb250cywgY2FsbCBpbnRvIGdyYXBoaWNzIGJhY2st
ZW5kIHNwZWNpZmljIGluaXQgbG9naWMKKyAgICByZXR1cm4gcGxhdGZvcm1Qcml2YXRlV2lkdGhG
b3JHbHlwaChnbHlwaCk7Cit9CisKIFNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERh
dGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2NyaXB0Rm9u
dFByb3BlcnRpZXMpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19231</attachid>
            <date>2008-02-20 10:44:05 -0800</date>
            <delta_ts>2008-02-20 12:51:48 -0800</delta_ts>
            <desc>Third revision based on dhyatt and mitzpettel&apos;s comments</desc>
            <filename>win32_cairofont.patch</filename>
            <type>text/plain</type>
            <size>60587</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMDgtMDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMzYKKyAgICAgICAgUHJv
dmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9yIFdpbmRvd3MgKENhaXJvKSBidWlsZCBvZiBXZWJLaXQg
dGhhdAorICAgICAgICBoYW5kbGVzIGZvbnQgZm9ybWF0dGluZy4KKyAgICAgICAgLSBTcGxpdCBm
b250IGltcGxlbWVudGF0aW9uIGZpbGVzIHRvIGFsbG93IG1heGltYWwgY29kZSBzaGFyaW5nCisg
ICAgICAgICAgYmV0d2VlbiBDRyBhbmQgQ2Fpcm8gYmFjay1lbmRzLiAKKworICAgICAgICBXQVJO
SU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmg6ICAgQWRkIHNpZ25hdHVyZXMgZm9yIHByaXZhdGUgd2luCisgICAgICAgICAg
aW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9y
bUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhaXJvV2luLmNwcDog
UmVtb3ZlZC4gIFVuaXZlcnNhbCB2ZXJzaW9uCisgICAgICAgICAgaXMgbm93IHBhcnQgb2YgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Zm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjpGb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnRGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNjYWxlZEZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6IENvcGllZCBm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cDogIE1vdmVkIENHLXNwZWNpZmljCisgICAgICAgICAgY29kZSB0byBGb250UGxhdGZvcm1EYXRh
Q0cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q0dXaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZVdpbi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZVdpbi5jcHA6IFJlbW92ZWQuICBSZXBsYWNlZAorICAgICAgICAgIHdpdGgg
Q0ctIGFuZCBDYWlyby1zcGVjaWZpYyB2ZXJzaW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNl
dEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aW5pdEdESUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ29tbW9uRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaCk6CisK
IDIwMDgtMDItMjAgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzA0MjUpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAwLDYgKzM5MDAsMTAgQEAK
IAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIg0KIAkJCQkJ
CT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0zOTMyLDcgKzM5MzYsNyBAQAogCQkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwIg0K
KwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEdseXBoUGFnZVRy
ZWVOb2RlQ0dXaW4uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNp
b24gMzA0MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzcsMTAg
QEAgdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRTVVN0eWxlKiBBVFNVU3R5bAogI2luY2x1ZGUgPHVz
cDEwLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247
CkBAIC0xMDYsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHNob3VsZEFwcGx5
TWFjQXNjZW50SGFjaygpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZP
Uk0oQ0FJUk8pCiAgICAgdm9pZCBzZXRGb250KGNhaXJvX3QqKSBjb25zdDsKICNlbmRpZgogCkBA
IC0xMjAsNiArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21tb25Jbml0KCk7
CiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZvaWQg
cGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3Q7CisjZW5kaWYKKwogcHVibGljOgogICAgIGludCBtX2FzY2VudDsKICAg
ICBpbnQgbV9kZXNjZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsOCArMzUsMTAgQEAKICNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKICNpbmNsdWRlIDx3
aW5kb3dzLmg+CiAjaW5jbHVkZSA8bWxhbmcuaD4KKyNpZiBQTEFURk9STShDRykKICNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKIAog
dXNpbmcgc3RkOjptaW47CiAKQEAgLTQ1LDcgKzQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAog
dm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CisjaWYgUExBVEZPUk0oQ0cpCiAgICAg
d2tTZXRVcEZvbnRDYWNoZSgxNTM2ICogMTAyNCAqIDQpOyAvLyBUaGlzIHNpemUgbWF0Y2hlcyBN
YWMuCisjZW5kaWYKIH0KIAogSU1MYW5nRm9udExpbmsyKiBGb250Q2FjaGU6OmdldEZvbnRMaW5r
SW50ZXJmYWNlKCkKQEAgLTQxNCw3ICs0MTgsMTQgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpjcmVhdGVGb250UAogICAgIAogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IG5l
dyBGb250UGxhdGZvcm1EYXRhKGhmb250LCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uYm9sZCgpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCksIHVzZUdE
SSk7Ci0gICAgaWYgKCFyZXN1bHQtPmNnRm9udCgpKSB7CisKKyNpZiBQTEFURk9STShDRykKKyAg
ICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9IChyZXN1bHQtPmNnRm9udCgpID09IDApOworI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAocmVzdWx0
LT5mb250RmFjZSgpID09IDApOworI2VuZGlmCisKKyAgICBpZiAoZm9udENyZWF0aW9uRmFpbGVk
KSB7CiAgICAgICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgQ0dGb250UmVmIGZhaWxlZCBmb3Ig
c29tZSByZWFzb24uICBXZSBhbHJlYWR5IGFzc2VydGVkIGluIGRlYnVnIGJ1aWxkcywgYnV0IHRv
IG1ha2UKICAgICAgICAgLy8gYWJzb2x1dGVseSBzdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoaXMg
Zm9udCwgZ28gYWhlYWQgYW5kIHJldHVybiAwIHNvIHRoYXQgd2UgY2FuIGZhbGwgYmFjayB0byB0
aGUgbmV4dAogICAgICAgICAvLyBmb250LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udC5oIgotCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhQ2Fpcm8uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwg
SW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9y
bURhdGFDYWlyby5oIgorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm86On5Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8oKQoreworICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3kobV9mb250RmFj
ZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjpm
b250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQoreworICAg
IHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udEZhY2UsIHNpemUsIGJvbGQsIGl0YWxpYyk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VEYXRhKHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGlj
X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisKK0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGFDYWlybyogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICBBU1NFUlRfQVJHKGJ1ZmZlciwgYnVmZmVyKTsKKworICAgIGJ1ZmZl
ci0+cmVmKCk7CisgICAgSEZPTlQgZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KGJ1ZmZl
cik7CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7CisgICAgaWYgKCFmb250RmFjZSkKKyAgICAgICBy
ZXR1cm4gMDsKKworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3QgYnVmZmVyS2V5Owor
ICAgIGNhaXJvX2ZvbnRfZmFjZV9zZXRfdXNlcl9kYXRhKGZvbnRGYWNlLCAmYnVmZmVyS2V5LCBi
dWZmZXIsIHJlbGVhc2VEYXRhKTsKKworICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YUNhaXJvKGZvbnRGYWNlKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm9faAorI2RlZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Q2Fpcm9faAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpbmNsdWRlIDxjYWly
by5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Citj
bGFzcyBTaGFyZWRCdWZmZXI7CisKK3N0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8g
OiBOb25jb3B5YWJsZSB7CisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvKGNhaXJvX2Zv
bnRfZmFjZV90KiBmb250RmFjZSkKKyAgICA6IG1fZm9udEZhY2UoZm9udEZhY2UpCisgICAge30K
KyAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvKCk7CisKKyAgICBGb250UGxhdGZvcm1E
YXRhIGZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwor
CisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7Cit9OworCitGb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8qIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVy
KiBidWZmZXIpOworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMzA0MjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwg
Zm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25l
IG90aGVyIHRoYW4KICAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCiAg
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2
LDggKzI2LDEyIEBACiAKICNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCiAKLXR5cGVkZWYgc3RydWN0
IEhGT05UX18gKkhGT05UOwotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250ICpDR0ZvbnRSZWY7CisjaWYg
UExBVEZPUk0oQ0FJUk8pCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNlbmRpZgorCit0eXBl
ZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKK3R5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250
UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcgKzQ1LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBVc2VkIGZvciBkZWxldGVkIHZhbHVlcyBpbiB0aGUgZm9udCBjYWNoZSdzIGhhc2gg
dGFibGVzLgogICAgIEZvbnRQbGF0Zm9ybURhdGEoRGVsZXRlZCkKICAgICA6IG1fZm9udCgoSEZP
TlQpLTEpCi0gICAgLCBtX2NnRm9udChOVUxMKQorI2lmIFBMQVRGT1JNKENHKQorICAgICwgbV9j
Z0ZvbnQoMCkKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgICwgbV9mb250RmFjZSgwKQorI2Vu
ZGlmCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAs
IG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKQEAgLTUwLDcgKzU4LDExIEBAIHB1YmxpYzoKIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGEoKQogICAgIDogbV9mb250KDApCi0gICAgLCBtX2NnRm9udChO
VUxMKQorI2lmIFBMQVRGT1JNKENHKQorICAgICwgbV9jZ0ZvbnQoMCkKKyNlbGlmIFBMQVRGT1JN
KENBSVJPKQorICAgICwgbV9mb250RmFjZSgwKQorI2VuZGlmCiAgICAgLCBtX3NpemUoMCkKICAg
ICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxz
ZSkKQEAgLTU5LDExICs3MSwyNCBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRhKEhG
T05ULCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpOwog
ICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
OworCisjaWYgUExBVEZPUk0oQ0cpCiAgICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZs
b2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKKyNlbGlmIFBMQVRGT1JNKENBSVJP
KQorICAgIEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqLCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisjZW5kaWYKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgp
OwogCisgICAgdm9pZCBwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhE
QyBoZGMsIFdDSEFSKiBmYWNlTmFtZSk7CisKICAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udDsgfQorI2lmIFBMQVRGT1JNKENHKQogICAgIENHRm9udFJlZiBjZ0ZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2NnRm9udDsgfQorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgdm9p
ZCBzZXRGb250KGNhaXJvX3QqIGZ0KSBjb25zdDsKKyAgICBjYWlyb19mb250X2ZhY2VfdCogZm9u
dEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlOyB9CisgICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfdCogc2NhbGVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkRm9udDsgfQorI2VuZGlm
CiAKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBz
ZXRTaXplKGZsb2F0IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQpAQCAtNzgsMTQgKzEwMywyNiBA
QCBwdWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIpIGNvbnN0CiAgICAgeyAKLSAgICAgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2Zv
bnQgJiYgbV9jZ0ZvbnQgPT1vdGhlci5tX2NnRm9udCAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
ICYmCisgICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250ICYmCisjaWYgUExBVEZP
Uk0oQ0cpCisgICAgICAgICAgICAgICBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udCAmJgorI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICAgICAgICBtX2ZvbnRGYWNlID09IG90aGVyLm1f
Zm9udEZhY2UgJiYKKyAgICAgICAgICAgICAgIG1fc2NhbGVkRm9udCA9PSBvdGhlci5tX3NjYWxl
ZEZvbnQgJiYKKyNlbmRpZgorICAgICAgICAgICAgICAgbV9zaXplID09IG90aGVyLm1fc2l6ZSAm
JgogICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID09IG90aGVyLm1fc3ludGhldGljQm9s
ZCAmJiBtX3N5bnRoZXRpY09ibGlxdWUgPT0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlICYmCiAg
ICAgICAgICAgICAgICBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgSEZPTlQgbV9mb250OworI2lmIFBMQVRGT1JNKENHKQogICAgIENHRm9udFJlZiBt
X2NnRm9udDsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBt
X2ZvbnRGYWNlOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKKyNlbmRp
ZgogCiAgICAgZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9zeW50aGV0aWNCb2xkOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ0dXaW4uY3BwCShyZXZpc2lvbiAzMDE1NSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6MzAxNTUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVy
bmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFu
eW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3Bw
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgaW50IEJvbGQgPSAoMSA8PCAwKTsKK3N0YXRpYyBjb25zdCBpbnQgSXRhbGljID0gKDEg
PDwgMSk7CitzdGF0aWMgY29uc3QgaW50IEJvbGRPYmxpcXVlID0gKDEgPDwgMik7CisKK3N0YXRp
YyBpbmxpbmUgVVNIT1JUIHJlYWRCaWdFbmRpYW5Xb3JkKGNvbnN0IEJZVEUqIHdvcmQpIHsgcmV0
dXJuICh3b3JkWzBdIDw8IDgpIHwgd29yZFsxXTsgfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgZ2V0
UG9zdFNjcmlwdE5hbWUoQ0ZTdHJpbmdSZWYgZmFjZU5hbWUsIEhEQyBkYykKK3sKKyAgICBjb25z
dCBEV09SRCBjTWF4TmFtZVRhYmxlU2l6ZSA9IDEwMjQgKiAxMDI0OworCisgICAgc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gbmFtZU1hcDsKKworICAgIC8v
IENoZWNrIG91ciBoYXNoIGZpcnN0LgorICAgIFN0cmluZyBmYWNlU3RyaW5nKGZhY2VOYW1lKTsK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHJlc3VsdCA9IG5hbWVNYXAuZ2V0KGZhY2VTdHJp
bmcpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CisKKyAg
ICAvLyBXZSBuZWVkIHRvIG9idGFpbiB0aGUgUG9zdFNjcmlwdCBuYW1lIGZyb20gdGhlIG5hbWUg
dGFibGUgYW5kIHVzZSBpdCBpbnN0ZWFkLC4KKyAgICBEV09SRCBidWZmZXJTaXplID0gR2V0Rm9u
dERhdGEoZGMsICdlbWFuJywgMCwgTlVMTCwgMCk7IC8vICJuYW1lIiBiYWNrd2FyZHMKKyAgICBp
ZiAoYnVmZmVyU2l6ZSA9PSAwIHx8IGJ1ZmZlclNpemUgPT0gR0RJX0VSUk9SIHx8IGJ1ZmZlclNp
emUgPiBjTWF4TmFtZVRhYmxlU2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAKKyAgICBW
ZWN0b3I8QllURT4gYnVmZmVyVmVjdG9yKGJ1ZmZlclNpemUpOworICAgIEJZVEUqIGJ1ZmZlciA9
IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CisgICAgaWYgKEdldEZvbnREYXRhKGRjLCAnZW1hbicsIDAs
IGJ1ZmZlciwgYnVmZmVyU2l6ZSkgPT0gR0RJX0VSUk9SKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIGlmIChidWZmZXJTaXplIDwgNikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBV
U0hPUlQgbnVtYmVyT2ZSZWNvcmRzID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgMik7Cisg
ICAgVUlOVCBzdHJpbmdzT2Zmc2V0ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgNCk7Cisg
ICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0KQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIEJZVEUqIHN0cmluZ3MgPSBidWZmZXIgKyBzdHJpbmdzT2Zmc2V0OworCisgICAgLy8g
Tm93IHdhbGsgZWFjaCBuYW1lIHJlY29yZCBsb29raW5nIGZvciBhIE1hYyBvciBXaW5kb3dzIFBv
c3RTY3JpcHQgbmFtZS4KKyAgICBVSU5UIG9mZnNldCA9IDY7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1iZXJPZlJlY29yZHM7IGkrKykgeworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA8IG9m
ZnNldCArIDEyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgVVNIT1JUIHBs
YXRmb3JtSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQpOworICAgICAgICBV
U0hPUlQgZW5jb2RpbmdJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDIp
OworICAgICAgICBVU0hPUlQgbGFuZ3VhZ2VJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciAr
IG9mZnNldCArIDQpOworICAgICAgICBVU0hPUlQgbmFtZUlEID0gcmVhZEJpZ0VuZGlhbldvcmQo
YnVmZmVyICsgb2Zmc2V0ICsgNik7CisgICAgICAgIFVTSE9SVCBsZW5ndGggPSByZWFkQmlnRW5k
aWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA4KTsKKyAgICAgICAgVVNIT1JUIG5hbWVPZmZzZXQg
PSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyAxMCk7CisKKyAgICAgICAgaWYg
KHBsYXRmb3JtSUQgPT0gMyAmJiBlbmNvZGluZ0lEID09IDEgJiYgbGFuZ3VhZ2VJRCA9PSAweDQw
OSAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFdpbmRvd3MgUG9z
dFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVyZWZvcmUgVVRGLTE2LgorICAgICAgICAgICAgLy8gUGFz
cyBCaWcgRW5kaWFuIGFzIHRoZSBlbmNvZGluZy4KKyAgICAgICAgICAgIGlmIChidWZmZXJTaXpl
IDwgc3RyaW5nc09mZnNldCArIG5hbWVPZmZzZXQgKyBsZW5ndGgpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXN1bHQuYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdp
dGhCeXRlcyhOVUxMLCBzdHJpbmdzICsgbmFtZU9mZnNldCwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjE2QkUsIGZhbHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IGlmIChwbGF0Zm9ybUlEID09IDEgJiYgZW5jb2RpbmdJRCA9PSAwICYmIGxhbmd1YWdlSUQgPT0g
MCAmJiBuYW1lSUQgPT0gNikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIE1hYyBQb3N0U2Ny
aXB0IG5hbWUgYW5kIGlzIHRoZXJlZm9yZSBBU0NJSS4KKyAgICAgICAgICAgIC8vIFNlZSBodHRw
Oi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZXh0Zm9udHMvVFRSZWZNYW4vUk0wNi9DaGFwNm5hbWUu
aHRtbAorICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0ICsgbmFtZU9m
ZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHN0cmluZ3MgKyBu
YW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSAxMjsKKyAgICB9
CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBuYW1lTWFwLnNldChmYWNlU3RyaW5nLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Cit9CisKK3N0YXRpYyBpbnQgQ0FMTEJBQ0sg
ZW51bVN0eWxlc0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRFWFRNRVRS
SUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQoreworICAgIGludCAq
c3R5bGUgPSByZWludGVycHJldF9jYXN0PGludCo+KGxQYXJhbSk7CisKKyAgICAvLyBGSVhNRTog
SW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgTHVjaWRhIHdlIGdvIGFoZWFkIGFuZCBjb25zaWRlciBh
IHdlaWdodCBvZiA2MDAgdG8gYmUgYm9sZC4KKyAgICAvLyBUaGlzIGRvZXMgbWVhbiB3ZSdsbCBj
b25zaWRlciBkZW1pYm9sZCBhbmQgc2VtaWJvbGQgZm9udHMgb24gd2luZG93cyB0byBhbHNvIGJl
IGJvbGQuICBUaGlzCisgICAgLy8gaXMgcmFyZSBlbm91Z2ggdGhhdCBpdCBzZWVtcyBsaWtlIGFu
IG9rIGhhY2sgZm9yIG5vdy4KKyAgICBpZiAobG9nRm9udC0+bGZXZWlnaHQgPj0gNjAwKSB7Cisg
ICAgICAgIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgICAgICpzdHlsZSB8PSBCb2xk
T2JsaXF1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnN0eWxlIHw9IEJvbGQ7CisgICAg
fSBlbHNlIGlmIChsb2dGb250LT5sZkl0YWxpYykKKyAgICAgICAgKnN0eWxlIHw9IEl0YWxpYzsK
KworICAgIHJldHVybiAxOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVz
ZUdESSkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2Nn
Rm9udCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQorICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKGZhbHNlKQorICAgICwgbV91c2VHREkodXNlR0RJKQoreworICAgIEhEQyBoZGMgPSBH
ZXREQygwKTsKKyAgICBTYXZlREMoaGRjKTsKKyAgICAKKyAgICBTZWxlY3RPYmplY3QoaGRjLCBm
b250KTsKKyAgICBVSU5UIGJ1ZmZlclNpemUgPSBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaGRjLCAw
LCBOVUxMKTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYnVmZmVyU2l6ZSAhPSAwLCAiQml0
bWFwIGZvbnRzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDb3JlR3JhcGhpY3MuIik7CisKKyAgICBpZiAo
YnVmZmVyU2l6ZSAhPSAwKSB7CisgICAgICAgIE9VVExJTkVURVhUTUVUUklDVyogbWV0cmljcyA9
IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAgICBHZXRP
dXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6ZSwgbWV0cmljcyk7CisgICAgICAgIFdD
SEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRyX3QpbWV0cmljcyArICh1aW50cHRyX3Qp
bWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKKworICAgICAgICBpZiAoIXVzZUdESSAmJiAoYm9sZCB8
fCBvYmxpcXVlKSkgeworICAgICAgICAgICAgTE9HRk9OVCBsb2dGb250OworCisgICAgICAgICAg
ICBpbnQgbGVuID0gbWluKChpbnQpd2NzbGVuKGZhY2VOYW1lKSwgTEZfRkFDRVNJWkUgLSAxKTsK
KyAgICAgICAgICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhY2VOYW1lLCBsZW4gKiBz
aXplb2YoV09SRCkpOworICAgICAgICAgICAgbG9nRm9udC5sZkZhY2VOYW1lW2xlbl0gPSAnXDAn
OworICAgICAgICAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBtZXRyaWNzLT5vdG1UZXh0TWV0cmlj
cy50bUNoYXJTZXQ7CisgICAgICAgICAgICBsb2dGb250LmxmUGl0Y2hBbmRGYW1pbHkgPSAwOwor
CisgICAgICAgICAgICBpbnQgc3R5bGVzID0gMDsKKyAgICAgICAgICAgIEVudW1Gb250RmFtaWxp
ZXNFeChoZGMsICZsb2dGb250LCBlbnVtU3R5bGVzQ2FsbGJhY2ssIHJlaW50ZXJwcmV0X2Nhc3Q8
TFBBUkFNPigmc3R5bGVzKSwgMCk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQg
dG8gc3ludGhlc2l6ZSBib2xkIG9yIG9ibGlxdWUuIFRoZSBydWxlIHRoYXQgY29tcGxpY2F0ZXMg
dGhpbmdzIGhlcmUKKyAgICAgICAgICAgIC8vIGlzIHRoYXQgaWYgdGhlIHJlcXVlc3RlZCBmb250
IGlzIGJvbGQgYW5kIG9ibGlxdWUsIGFuZCBib3RoIGEgYm9sZCBmb250IGFuZCBhbiBvYmxpcXVl
IGZvbnQKKyAgICAgICAgICAgIC8vIGV4aXN0LCB0aGUgYm9sZCBmb250IHNob3VsZCBiZSB1c2Vk
LCBhbmQgb2JsaXF1ZSBzeW50aGVzaXplZC4KKyAgICAgICAgICAgIGlmIChib2xkICYmIG9ibGlx
dWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVzID09IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9zeW50
aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlcyAm
IEJvbGQpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVzICYgSXRhbGljKQorICAgICAgICAgICAgICAg
ICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChib2xk
ICYmICghKHN0eWxlcyAmIEJvbGQpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNC
b2xkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAob2JsaXF1ZSAmJiAhKHN0eWxlcyAm
IEl0YWxpYykpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IHRydWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdGhlIGZhY2UgbmFtZSBmaXJzdC4gIFdpbmRv
d3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwgYW5kIENHIGRvZXNuJ3Qga25vdyBh
Ym91dAorICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAgSWYgdGhlIGNyZWF0ZSBmYWlscywg
d2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCisgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxM
LCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNlTmFtZSkpKTsKKyAgICAgICAg
bV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVsbE5hbWUuZ2V0KCkpOworICAg
ICAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiBwb3N0U2NyaXB0
TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdldCgpLCBoZGMpOworICAgICAgICAg
ICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7CisgICAgICAgICAgICAgICAgbV9jZ0ZvbnQgPSBDR0Zv
bnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOworICAgICAgICAgICAgICAgIEFT
U0VSVChtX2NnRm9udCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJlZSht
ZXRyaWNzKTsKKyAgICB9CisKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVsZWFzZURD
KDAsIGhkYyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBtX2ZvbnQoMCkKKyAgICAsIG1f
c2l6ZShzaXplKQorICAgICwgbV9jZ0ZvbnQoMCkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xk
KQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX3VzZUdESShmYWxz
ZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYg
Zm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBtX2ZvbnQo
MCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9jZ0ZvbnQoZm9udCkKKyAgICAsIG1fc3lu
dGhldGljQm9sZChib2xkKQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCisgICAg
LCBtX3VzZUdESShmYWxzZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9y
bURhdGEoKQoreworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHJldmlzaW9uIDMwMTU1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFu
ZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzUsMTAgKzM1LDYgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBCb2xkID0gKDEgPDwgMCk7Ci1zdGF0aWMgY29u
c3QgaW50IEl0YWxpYyA9ICgxIDw8IDEpOwotc3RhdGljIGNvbnN0IGludCBCb2xkT2JsaXF1ZSA9
ICgxIDw8IDIpOwotCiBzdGF0aWMgaW5saW5lIFVTSE9SVCByZWFkQmlnRW5kaWFuV29yZChjb25z
dCBCWVRFKiB3b3JkKSB7IHJldHVybiAod29yZFswXSA8PCA4KSB8IHdvcmRbMV07IH0KIAogc3Rh
dGljIENGU3RyaW5nUmVmIGdldFBvc3RTY3JpcHROYW1lKENGU3RyaW5nUmVmIGZhY2VOYW1lLCBI
REMgZGMpCkBAIC0xMTAsMTAxICsxMDYsMTkgQEAgc3RhdGljIENGU3RyaW5nUmVmIGdldFBvc3RT
Y3JpcHROYW1lKENGUwogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbnQg
Q0FMTEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0
IFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQordm9p
ZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNp
emUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFtZSkKIHsKLSAgICBpbnQgKnN0eWxlID0gcmVpbnRl
cnByZXRfY2FzdDxpbnQqPihsUGFyYW0pOwotCi0gICAgLy8gRklYTUU6IEluIG9yZGVyIHRvIGFj
Y29tbW9kYXRlIEx1Y2lkYSB3ZSBnbyBhaGVhZCBhbmQgY29uc2lkZXIgYSB3ZWlnaHQgb2YgNjAw
IHRvIGJlIGJvbGQuCi0gICAgLy8gVGhpcyBkb2VzIG1lYW4gd2UnbGwgY29uc2lkZXIgZGVtaWJv
bGQgYW5kIHNlbWlib2xkIGZvbnRzIG9uIHdpbmRvd3MgdG8gYWxzbyBiZSBib2xkLiAgVGhpcwot
ICAgIC8vIGlzIHJhcmUgZW5vdWdoIHRoYXQgaXQgc2VlbXMgbGlrZSBhbiBvayBoYWNrIGZvciBu
b3cuCi0gICAgaWYgKGxvZ0ZvbnQtPmxmV2VpZ2h0ID49IDYwMCkgewotICAgICAgICBpZiAobG9n
Rm9udC0+bGZJdGFsaWMpCi0gICAgICAgICAgICAqc3R5bGUgfD0gQm9sZE9ibGlxdWU7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICpzdHlsZSB8PSBCb2xkOwotICAgIH0gZWxzZSBpZiAobG9n
Rm9udC0+bGZJdGFsaWMpCi0gICAgICAgICpzdHlsZSB8PSBJdGFsaWM7Ci0KLSAgICByZXR1cm4g
MTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBt
X2ZvbnQoZm9udCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAgICAs
IG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkK
LSAgICAsIG1fdXNlR0RJKHVzZUdESSkKLXsKLSAgICBIREMgaGRjID0gR2V0REMoMCk7Ci0gICAg
U2F2ZURDKGhkYyk7Ci0gICAgCi0gICAgU2VsZWN0T2JqZWN0KGhkYywgZm9udCk7Ci0gICAgVUlO
VCBidWZmZXJTaXplID0gR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgMCwgTlVMTCk7Ci0KLSAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJ1ZmZlclNpemUgIT0gMCwgIkJpdG1hcCBmb250cyBub3Qg
c3VwcG9ydGVkIHdpdGggQ29yZUdyYXBoaWNzLiIpOwotCi0gICAgaWYgKGJ1ZmZlclNpemUgIT0g
MCkgewotICAgICAgICBPVVRMSU5FVEVYVE1FVFJJQ1cqIG1ldHJpY3MgPSAoT1VUTElORVRFWFRN
RVRSSUNXKiltYWxsb2MoYnVmZmVyU2l6ZSk7Ci0KLSAgICAgICAgR2V0T3V0bGluZVRleHRNZXRy
aWNzVyhoZGMsIGJ1ZmZlclNpemUsIG1ldHJpY3MpOwotICAgICAgICBXQ0hBUiogZmFjZU5hbWUg
PSAoV0NIQVIqKSgodWludHB0cl90KW1ldHJpY3MgKyAodWludHB0cl90KW1ldHJpY3MtPm90bXBG
YWNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKCF1c2VHREkgJiYgKGJvbGQgfHwgb2JsaXF1ZSkpIHsK
LSAgICAgICAgICAgIExPR0ZPTlQgbG9nRm9udDsKLQotICAgICAgICAgICAgaW50IGxlbiA9IG1p
bigoaW50KXdjc2xlbihmYWNlTmFtZSksIExGX0ZBQ0VTSVpFIC0gMSk7Ci0gICAgICAgICAgICBt
ZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBmYWNlTmFtZSwgbGVuICogc2l6ZW9mKFdPUkQpKTsK
LSAgICAgICAgICAgIGxvZ0ZvbnQubGZGYWNlTmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAg
IGxvZ0ZvbnQubGZDaGFyU2V0ID0gbWV0cmljcy0+b3RtVGV4dE1ldHJpY3MudG1DaGFyU2V0Owot
ICAgICAgICAgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKLQotICAgICAgICAgICAg
aW50IHN0eWxlcyA9IDA7Ci0gICAgICAgICAgICBFbnVtRm9udEZhbWlsaWVzRXgoaGRjLCAmbG9n
Rm9udCwgZW51bVN0eWxlc0NhbGxiYWNrLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnN0eWxl
cyksIDApOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHN5bnRoZXNpemUg
Ym9sZCBvciBvYmxpcXVlLiBUaGUgcnVsZSB0aGF0IGNvbXBsaWNhdGVzIHRoaW5ncyBoZXJlCi0g
ICAgICAgICAgICAvLyBpcyB0aGF0IGlmIHRoZSByZXF1ZXN0ZWQgZm9udCBpcyBib2xkIGFuZCBv
YmxpcXVlLCBhbmQgYm90aCBhIGJvbGQgZm9udCBhbmQgYW4gb2JsaXF1ZSBmb250Ci0gICAgICAg
ICAgICAvLyBleGlzdCwgdGhlIGJvbGQgZm9udCBzaG91bGQgYmUgdXNlZCwgYW5kIG9ibGlxdWUg
c3ludGhlc2l6ZWQuCi0gICAgICAgICAgICBpZiAoYm9sZCAmJiBvYmxpcXVlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0eWxlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhl
dGljQm9sZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljT2JsaXF1ZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZXMgJiBCb2xkKQotICAgICAg
ICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHN0eWxlcyAmIEl0YWxpYykKLSAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0
aWNCb2xkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9sZCAmJiAoIShzdHlsZXMg
JiBCb2xkKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgIGVsc2UgaWYgKG9ibGlxdWUgJiYgIShzdHlsZXMgJiBJdGFsaWMpKQotICAg
ICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gVHJ5IHRoZSBmYWNlIG5hbWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQgdXAg
bG9jYWxpemluZyB0aGlzIG5hbWUsIGFuZCBDRyBkb2Vzbid0IGtub3cgYWJvdXQKLSAgICAgICAg
Ly8gdGhlIGxvY2FsaXphdGlvbi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUg
UG9zdFNjcmlwdCBuYW1lLgotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1l
KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNo
YXIqKWZhY2VOYW1lLCB3Y3NsZW4oZmFjZU5hbWUpKSk7Ci0gICAgICAgIG1fY2dGb250ID0gQ0dG
b250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1bGxOYW1lLmdldCgpKTsKLSAgICAgICAgaWYgKCFtX2Nn
Rm9udCkgewotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgcG9zdFNjcmlwdE5hbWUgPSBnZXRQb3N0
U2NyaXB0TmFtZShmdWxsTmFtZS5nZXQoKSwgaGRjKTsKLSAgICAgICAgICAgIGlmIChwb3N0U2Ny
aXB0TmFtZSkgewotICAgICAgICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZv
bnROYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jZ0ZvbnQp
OwotICAgICAgICAgICAgfQorICAgIC8vIFRyeSB0aGUgZmFjZSBuYW1lIGZpcnN0LiAgV2luZG93
cyBtYXkgZW5kIHVwIGxvY2FsaXppbmcgdGhpcyBuYW1lLCBhbmQgQ0cgZG9lc24ndCBrbm93IGFi
b3V0CisgICAgLy8gdGhlIGxvY2FsaXphdGlvbi4gIElmIHRoZSBjcmVhdGUgZmFpbHMsIHdlJ2xs
IHRyeSB0aGUgUG9zdFNjcmlwdCBuYW1lLgorICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVs
bE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3Qg
VW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNlTmFtZSkpKTsKKyAgICBtX2NnRm9udCA9IENH
Rm9udENyZWF0ZVdpdGhGb250TmFtZShmdWxsTmFtZS5nZXQoKSk7CisgICAgaWYgKCFtX2NnRm9u
dCkgeworICAgICAgICBDRlN0cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHRO
YW1lKGZ1bGxOYW1lLmdldCgpLCBoZGMpOworICAgICAgICBpZiAocG9zdFNjcmlwdE5hbWUpIHsK
KyAgICAgICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3Jp
cHROYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2NnRm9udCk7CiAgICAgICAgIH0KLSAgICAg
ICAgZnJlZShtZXRyaWNzKTsKICAgICB9Ci0KLSAgICBSZXN0b3JlREMoaGRjLCAtMSk7Ci0gICAg
UmVsZWFzZURDKDAsIGhkYyk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX2ZvbnQoMCkK
LSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9jZ0ZvbnQoMCkKLSAgICAsIG1fc3ludGhldGlj
Qm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3Vz
ZUdESShmYWxzZSkKLXsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShD
R0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCkBAIC0y
MTcsOCArMTMxLDQgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0Zvbgog
ewogfQogCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWly
b1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJu
YWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55
b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBCcmVudCBG
dWxnaGFtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKwor
dXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250UGxhdGZv
cm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMs
IFdDSEFSKiBmYWNlTmFtZSkKK3sKKyAgICBtX2ZvbnRGYWNlID0gY2Fpcm9fd2luMzJfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfaGZvbnQoZm9udCk7CisgICAgY2Fpcm9fbWF0cml4X3Qgc2l6ZU1hdHJp
eCwgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOworICAgIGNhaXJv
X21hdHJpeF9pbml0X3NjYWxlKCZzaXplTWF0cml4LCBzaXplLCBzaXplKTsKKworICAgIHN0YXRp
YyBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnMgPSAwOworICAgIGlmICghZm9udE9w
dGlvbnMpCisgICAgICAgZm9udE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7
CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJP
X0FOVElBTElBU19TVUJQSVhFTCk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRf
Zm9udF9jcmVhdGUobV9mb250RmFjZSwgJnNpemVNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25zKTsK
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2Vf
dCogZm9udEZhY2UsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQorICAgIDog
bV9mb250KDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fZm9udEZhY2UoZm9udEZhY2Up
CisgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQorICAg
ICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX3VzZUdESShmYWxzZSkKK3sK
KyAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisgICBjYWlyb19tYXRyaXhfaW5pdF9zY2Fs
ZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7CisgICBjYWlyb19tYXRyaXhfdCBjdG07CisgICBj
YWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgIGNhaXJvX2ZvbnRfb3B0aW9uc190
KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworCisgICAvLyBXZSBmb3Jj
ZSBhbnRpYWxpYXNpbmcgYW5kIGRpc2FibGUgaGludGluZyB0byBwcm92aWRlIGNvbnNpc3RlbnQK
KyAgIC8vIHR5cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZvbnRzIG9uIGFsbCBwbGF0
Zm9ybXMuCisgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJ
Uk9fSElOVF9TVFlMRV9OT05FKTsKKyAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFz
KG9wdGlvbnMsIENBSVJPX0FOVElBTElBU19HUkFZKTsKKworICAgbV9zY2FsZWRGb250ID0gY2Fp
cm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9u
cyk7CisgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveShvcHRpb25zKTsKK30KKwordm9pZCBG
b250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VS
VChtX3NjYWxlZEZvbnQpOworCisgICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNyLCBtX3NjYWxl
ZEZvbnQpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkocmV2aXNpb24gMzA0MjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDggQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRl
cm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBh
bnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNw
cC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBCcmVudCBGdWxnaGFtCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDcgKzI3LDYgQEAKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTM5LDc3ICszOSw2IEBAIHN0YXRpYyBjb25zdCBpbnQgQm9sZCA9
ICgxIDw8IDApOwogc3RhdGljIGNvbnN0IGludCBJdGFsaWMgPSAoMSA8PCAxKTsKIHN0YXRpYyBj
b25zdCBpbnQgQm9sZE9ibGlxdWUgPSAoMSA8PCAyKTsKIAotc3RhdGljIGlubGluZSBVU0hPUlQg
cmVhZEJpZ0VuZGlhbldvcmQoY29uc3QgQllURSogd29yZCkgeyByZXR1cm4gKHdvcmRbMF0gPDwg
OCkgfCB3b3JkWzFdOyB9Ci0KLXN0YXRpYyBDRlN0cmluZ1JlZiBnZXRQb3N0U2NyaXB0TmFtZShD
RlN0cmluZ1JlZiBmYWNlTmFtZSwgSERDIGRjKQotewotICAgIGNvbnN0IERXT1JEIGNNYXhOYW1l
VGFibGVTaXplID0gMTAyNCAqIDEwMjQ7Ci0KLSAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gPiBuYW1lTWFwOwotCi0gICAgLy8gQ2hlY2sgb3VyIGhhc2gg
Zmlyc3QuCi0gICAgU3RyaW5nIGZhY2VTdHJpbmcoZmFjZU5hbWUpOwotICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gcmVzdWx0ID0gbmFtZU1hcC5nZXQoZmFjZVN0cmluZyk7Ci0gICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKLQotICAgIC8vIFdlIG5lZWQgdG8g
b2J0YWluIHRoZSBQb3N0U2NyaXB0IG5hbWUgZnJvbSB0aGUgbmFtZSB0YWJsZSBhbmQgdXNlIGl0
IGluc3RlYWQsLgotICAgIERXT1JEIGJ1ZmZlclNpemUgPSBHZXRGb250RGF0YShkYywgJ2VtYW4n
LCAwLCBOVUxMLCAwKTsgLy8gIm5hbWUiIGJhY2t3YXJkcwotICAgIGlmIChidWZmZXJTaXplID09
IDAgfHwgYnVmZmVyU2l6ZSA9PSBHRElfRVJST1IgfHwgYnVmZmVyU2l6ZSA+IGNNYXhOYW1lVGFi
bGVTaXplKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgIAotICAgIFZlY3RvcjxCWVRFPiBidWZm
ZXJWZWN0b3IoYnVmZmVyU2l6ZSk7Ci0gICAgQllURSogYnVmZmVyID0gYnVmZmVyVmVjdG9yLmRh
dGEoKTsKLSAgICBpZiAoR2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgYnVmZmVyLCBidWZmZXJT
aXplKSA9PSBHRElfRVJST1IpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGJ1ZmZl
clNpemUgPCA2KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIFVTSE9SVCBudW1iZXJPZlJl
Y29yZHMgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyAyKTsKLSAgICBVSU5UIHN0cmluZ3NP
ZmZzZXQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyA0KTsKLSAgICBpZiAoYnVmZmVyU2l6
ZSA8IHN0cmluZ3NPZmZzZXQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgQllURSogc3Ry
aW5ncyA9IGJ1ZmZlciArIHN0cmluZ3NPZmZzZXQ7Ci0KLSAgICAvLyBOb3cgd2FsayBlYWNoIG5h
bWUgcmVjb3JkIGxvb2tpbmcgZm9yIGEgTWFjIG9yIFdpbmRvd3MgUG9zdFNjcmlwdCBuYW1lLgot
ICAgIFVJTlQgb2Zmc2V0ID0gNjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mUmVj
b3JkczsgaSsrKSB7Ci0gICAgICAgIGlmIChidWZmZXJTaXplIDwgb2Zmc2V0ICsgMTIpCi0gICAg
ICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBVU0hPUlQgcGxhdGZvcm1JRCA9IHJlYWRC
aWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCk7Ci0gICAgICAgIFVTSE9SVCBlbmNvZGluZ0lE
ID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMik7Ci0gICAgICAgIFVTSE9S
VCBsYW5ndWFnZUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNCk7Ci0g
ICAgICAgIFVTSE9SVCBuYW1lSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQg
KyA2KTsKLSAgICAgICAgVVNIT1JUIGxlbmd0aCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciAr
IG9mZnNldCArIDgpOwotICAgICAgICBVU0hPUlQgbmFtZU9mZnNldCA9IHJlYWRCaWdFbmRpYW5X
b3JkKGJ1ZmZlciArIG9mZnNldCArIDEwKTsKLQotICAgICAgICBpZiAocGxhdGZvcm1JRCA9PSAz
ICYmIGVuY29kaW5nSUQgPT0gMSAmJiBsYW5ndWFnZUlEID09IDB4NDA5ICYmIG5hbWVJRCA9PSA2
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgV2luZG93cyBQb3N0U2NyaXB0IG5hbWUgYW5k
IGlzIHRoZXJlZm9yZSBVVEYtMTYuCi0gICAgICAgICAgICAvLyBQYXNzIEJpZyBFbmRpYW4gYXMg
dGhlIGVuY29kaW5nLgotICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0
ICsgbmFtZU9mZnNldCArIGxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICAgICAgICAgIHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHN0
cmluZ3MgKyBuYW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGMTZCRSwgZmFs
c2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSUQg
PT0gMSAmJiBlbmNvZGluZ0lEID09IDAgJiYgbGFuZ3VhZ2VJRCA9PSAwICYmIG5hbWVJRCA9PSA2
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgTWFjIFBvc3RTY3JpcHQgbmFtZSBhbmQgaXMg
dGhlcmVmb3JlIEFTQ0lJLgotICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBw
bGUuY29tL3RleHRmb250cy9UVFJlZk1hbi9STTA2L0NoYXA2bmFtZS5odG1sCi0gICAgICAgICAg
ICBpZiAoYnVmZmVyU2l6ZSA8IHN0cmluZ3NPZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3RoKQot
ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmVzdWx0LmFkb3B0Q0Yo
Q0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxlbmd0
aCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgb2Zmc2V0ICs9IDEyOwotICAgIH0KLQotICAgIGlmIChyZXN1
bHQpCi0gICAgICAgIG5hbWVNYXAuc2V0KGZhY2VTdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKLX0KLQogc3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2FsbGJh
Y2soY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdP
UkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgaW50ICpzdHlsZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50Kj4obFBhcmFtKTsKQEAgLTEzMSw3ICs2MCwxMiBAQCBzdGF0aWMgaW50IENB
TExCQUNLIGVudW1TdHlsZXNDYWxsYmFjayhjCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBi
b29sIHVzZUdESSkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9zaXplKHNpemUpCisjaWYg
UExBVEZPUk0oQ0cpCiAgICAgLCBtX2NnRm9udCgwKQorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisg
ICAgLCBtX2ZvbnRGYWNlKDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyNlbmRpZgogICAgICwg
bV9zeW50aGV0aWNCb2xkKGZhbHNlKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQog
ICAgICwgbV91c2VHREkodXNlR0RJKQpAQCAtMTc5LDE3ICsxMTMsOCBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UCiAgICAgICAgICAgICAgICAgICAgIG1fc3ludGhl
dGljT2JsaXF1ZSA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUcnkgdGhlIGZhY2Ug
bmFtZSBmaXJzdC4gIFdpbmRvd3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwgYW5k
IENHIGRvZXNuJ3Qga25vdyBhYm91dAotICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAgSWYg
dGhlIGNyZWF0ZSBmYWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCi0gICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNl
TmFtZSkpKTsKLSAgICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVs
bE5hbWUuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fY2dGb250KSB7Ci0gICAgICAgICAgICBDRlN0
cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdldCgp
LCBoZGMpOwotICAgICAgICAgICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2NnRm9udCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KKyAgICAgICAgcGxhdGZvcm1EYXRhSW5pdChmb250LCBzaXplLCBoZGMsIGZhY2VOYW1lKTsK
KwogICAgICAgICBmcmVlKG1ldHJpY3MpOwogICAgIH0KIApAQCAtMjAwLDE3ICsxMjUsMTIgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVAogRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkK
ICAgICA6IG1fZm9udCgwKQogICAgICwgbV9zaXplKHNpemUpCisjaWYgUExBVEZPUk0oQ0cpCiAg
ICAgLCBtX2NnRm9udCgwKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQotewotfQotCi1G
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9hdCBz
aXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKLSAgICA6IG1fZm9udCgwKQotICAgICwgbV9z
aXplKHNpemUpCi0gICAgLCBtX2NnRm9udChmb250KQorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisg
ICAgLCBtX2ZvbnRGYWNlKDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKKyNlbmRpZgogICAgICwg
bV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkK
ICAgICAsIG1fdXNlR0RJKGZhbHNlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDMw
MTc0KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZVdpbi5jcHA6MzAxNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBh
Z2VUcmVlTm9kZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIK
KworI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50
ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0
aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZlciBoYXMgVW5pY29kZSBzdXBwbGVt
ZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cu
CisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisgICAgQ0dHbHlwaCBsb2Nh
bEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07CisgICAgd2tHZXRHbHlwaHMoZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZl
ckxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgaWYgKCFn
bHlwaCkKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDAp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNl
dCArIGksIGdseXBoLCBmb250RGF0YSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDMwMTc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAzMDE3NCkJKGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwOjMwMTc0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWly
b1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRl
ICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBo
UGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEp
Cit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZ2x5
cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBjaGFy
YWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlmIChi
dWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZl
cltHbHlwaFBhZ2U6OnNpemVdOworICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURh
dGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHbHlw
aCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07CisgICAgICAgIGlmICghZ2x5cGgpCisgICAg
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlw
aCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fp
cm9XaW4uY3BwCShyZXZpc2lvbiAzMDE3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
L1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQy
LDE3ICs0MSwzMSBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAg
IENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5
cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBo
QnVmZmVyLCBidWZmZXJMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0g
ICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZz
ZXQgKyBpLCAwLCAwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFG
b3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOwotICAgICAgICAgICAgaGF2ZUds
eXBocyA9IHRydWU7CisKKyAgICBIREMgZGMgPSBHZXREQygoSFdORCkwKTsKKyAgICBTYXZlREMo
ZGMpOworICAgIFNlbGVjdE9iamVjdChkYywgZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250
KCkpOworCisgICAgVEVYVE1FVFJJQyB0bTsKKyAgICBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsK
KworICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyXTsKKyAgICBE
V09SRCByZXN1bHQgPSBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBs
b2NhbEdseXBoQnVmZmVyLCAwKTsKKyAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQgIT0gR0RJX0VS
Uk9SICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpID09IGJ1ZmZlckxlbmd0aDsKKyAg
ICBpZiAoc3VjY2VzcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsK
KyAgICAgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9udERhdGEpOwor
ICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQorICAgIFJlc3RvcmVEQyhkYywgLTEpOworICAgIFJlbGVhc2VEQygwLCBkYyk7
CisKICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAkocmV2aXNp
b24gMzA0MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9X
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEds
eXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCi17Ci0gICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUg
Z2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBj
aGFyYWN0ZXJzLgotICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlm
IChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBH
bHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAgICAgIGlmICghZ2x5cGgpCi0g
ICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBn
bHlwaCwgZm9udERhdGEpOwotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3Bw
CShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwzMiArNTQsOSBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwog
ICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwogICAgIG1faXNTeXN0ZW1Gb250ID0gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKG1fZm9udC51c2VHREkoKSkgewotICAgICAgICBIREMgaGRjID0g
R2V0REMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1f
Zm9udC5oZm9udCgpKTsKLSAgICAgICAgT1VUTElORVRFWFRNRVRSSUMgbWV0cmljczsKLSAgICAg
ICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgc2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7
Ci0gICAgICAgIFRFWFRNRVRSSUMmIHRleHRNZXRyaWNzID0gbWV0cmljcy5vdG1UZXh0TWV0cmlj
czsKLSAgICAgICAgbV9hc2NlbnQgPSB0ZXh0TWV0cmljcy50bUFzY2VudDsKLSAgICAgICAgbV9k
ZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNjZW50OwotICAgICAgICBtX2xpbmVHYXAgPSB0ZXh0
TWV0cmljcy50bUV4dGVybmFsTGVhZGluZzsKLSAgICAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNj
ZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOwotICAgICAgICBtX3hIZWlnaHQgPSBtX2FzY2Vu
dCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5cGggaXMgcHJl
c2VudC4KLQotICAgICAgICBHTFlQSE1FVFJJQ1MgZ207Ci0gICAgICAgIE1BVDIgbWF0ID0geyAx
LCAwLCAwLCAxIH07Ci0gICAgICAgIERXT1JEIGxlbiA9IEdldEdseXBoT3V0bGluZShoZGMsICd4
JywgR0dPX01FVFJJQ1MsICZnbSwgMCwgMCwgJm1hdCk7Ci0gICAgICAgIGlmIChsZW4gIT0gR0RJ
X0VSUk9SICYmIGdtLmdtcHRHbHlwaE9yaWdpbi55ID4gMCkKLSAgICAgICAgICAgIG1feEhlaWdo
dCA9IGdtLmdtcHRHbHlwaE9yaWdpbi55OwogCi0gICAgICAgIG1fdW5pdHNQZXJFbSA9IG1ldHJp
Y3Mub3RtRU1TcXVhcmU7Ci0KLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0g
ICAgICAgIFJlbGVhc2VEQygwLCBoZGMpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1fZm9udC51c2VHREkoKSkKKyAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKIAogICAg
IENHRm9udFJlZiBmb250ID0gbV9mb250LmNnRm9udCgpOwogICAgIGludCBpQXNjZW50ID0gQ0dG
b250R2V0QXNjZW50KGZvbnQpOwpAQCAtMTQ0LDI0ICsxMjEsMTMgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKICAgICAgICAgQ0dGb250UmVsZWFzZShtX2ZvbnQuY2dG
b250KCkpOwogICAgIH0KIAotICAgIC8vIFdlIGRvbid0IGhhc2ggdGhpcyBvbiBXaW4zMiwgc28g
aXQncyBlZmZlY3RpdmVseSBvd25lZCBieSB1cy4KLSAgICBkZWxldGUgbV9zbWFsbENhcHNGb250
RGF0YTsKLQotICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNoZSk7Ci0gICAgZGVsZXRl
IG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CisgICAgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7CiB9
CiAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9udC51c2VHREkoKSkgewotICAgICAgICBIREMgaGRj
ID0gR2V0REMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMs
IG1fZm9udC5oZm9udCgpKTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBHZXRDaGFyV2lk
dGhJKGhkYywgZ2x5cGgsIDEsIDAsICZ3aWR0aCk7Ci0gICAgICAgIFNlbGVjdE9iamVjdChoZGMs
IG9sZEZvbnQpOwotICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKLSAgICAgICAgcmV0dXJuIHdp
ZHRoOwotICAgIH0KKyAgICBpZiAobV9mb250LnVzZUdESSgpKQorICAgICAgIHJldHVybiB3aWR0
aEZvckdESUdseXBoKGdseXBoKTsKIAogICAgIENHRm9udFJlZiBmb250ID0gbV9mb250LmNnRm9u
dCgpOwogICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fZm9udC5zaXplKCk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJv
V2luLmNwcAkocmV2aXNpb24gMzA0MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
MTAgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxjYWlyby13
aW4zMi5oPgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVkZSA8dGNoYXIuaD4KIApAQCAtNDUs
NTggKzQ4LDgxIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgbV9z
Y3JpcHRDYWNoZSA9IDA7CiAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7CiAgICAgbV9p
c1N5c3RlbUZvbnQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9mb250LnVzZUdESSgpKSB7Ci0g
ICAgICAgIEhEQyBoZGMgPSBHZXREQygwKTsKLSAgICAgICAgSEdESU9CSiBvbGRGb250ID0gU2Vs
ZWN0T2JqZWN0KGhkYywgbV9mb250Lmhmb250KCkpOwotICAgICAgICBPVVRMSU5FVEVYVE1FVFJJ
QyBtZXRyaWNzOwotICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaGRjLCBzaXplb2YobWV0
cmljcyksICZtZXRyaWNzKTsKLSAgICAgICAgVEVYVE1FVFJJQyYgdGV4dE1ldHJpY3MgPSBtZXRy
aWNzLm90bVRleHRNZXRyaWNzOwotICAgICAgICBtX2FzY2VudCA9IHRleHRNZXRyaWNzLnRtQXNj
ZW50OwotICAgICAgICBtX2Rlc2NlbnQgPSB0ZXh0TWV0cmljcy50bURlc2NlbnQ7Ci0gICAgICAg
IG1fbGluZUdhcCA9IHRleHRNZXRyaWNzLnRtRXh0ZXJuYWxMZWFkaW5nOwotICAgICAgICBtX2xp
bmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Ci0gICAgICAgIG1f
eEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhIZWlnaHQgaWYg
bm8geCBnbHlwaCBpcyBwcmVzZW50LgogCisgICAgaWYgKG1fZm9udC51c2VHREkoKSkKKyAgICAg
ICByZXR1cm4gaW5pdEdESUZvbnQoKTsKKworICAgIEhEQyBoZGMgPSBHZXREQygwKTsKKyAgICBT
YXZlREMoaGRjKTsKKworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBtX2Zv
bnQuc2NhbGVkRm9udCgpOworICAgIGNvbnN0IGRvdWJsZSBtZXRyaWNzTXVsdGlwbGllciA9IGNh
aXJvX3dpbjMyX3NjYWxlZF9mb250X2dldF9tZXRyaWNzX2ZhY3RvcihzY2FsZWRGb250KSAqIG1f
Zm9udC5zaXplKCk7CisKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChz
Y2FsZWRGb250LCBoZGMpOworCisgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljczsKKyAgICBHZXRU
ZXh0TWV0cmljcyhoZGMsICZ0ZXh0TWV0cmljcyk7CisgICAgbV9hc2NlbnQgPSBscm91bmRmKHRl
eHRNZXRyaWNzLnRtQXNjZW50ICogbWV0cmljc011bHRpcGxpZXIpOworICAgIG1fZGVzY2VudCA9
IGxyb3VuZGYodGV4dE1ldHJpY3MudG1EZXNjZW50ICogbWV0cmljc011bHRpcGxpZXIpOworICAg
IG1feEhlaWdodCA9IG1fYXNjZW50ICogMC41NmY7IC8vIEJlc3QgZ3Vlc3MgZm9yIHhIZWlnaHQg
Zm9yIG5vbi1UcnVldHlwZSBmb250cy4KKyAgICBtX2xpbmVHYXAgPSBscm91bmRmKHRleHRNZXRy
aWNzLnRtRXh0ZXJuYWxMZWFkaW5nICogbWV0cmljc011bHRpcGxpZXIpOworICAgIG1fbGluZVNw
YWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudCArIG1fbGluZUdhcDsKKworICAgIE9VVExJTkVU
RVhUTUVUUklDIG1ldHJpY3M7CisgICAgaWYgKEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMsIHNp
emVvZihtZXRyaWNzKSwgJm1ldHJpY3MpID4gMCkgeworICAgICAgICAvLyBUaGlzIGlzIGEgVHJ1
ZVR5cGUgZm9udC4gIFdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGFuIGFjY3VyYXRlIHhIZWlnaHQK
ICAgICAgICAgR0xZUEhNRVRSSUNTIGdtOwogICAgICAgICBNQVQyIG1hdCA9IHsgMSwgMCwgMCwg
MSB9OwogICAgICAgICBEV09SRCBsZW4gPSBHZXRHbHlwaE91dGxpbmUoaGRjLCAneCcsIEdHT19N
RVRSSUNTLCAmZ20sIDAsIDAsICZtYXQpOwogICAgICAgICBpZiAobGVuICE9IEdESV9FUlJPUiAm
JiBnbS5nbXB0R2x5cGhPcmlnaW4ueSA+IDApCi0gICAgICAgICAgICBtX3hIZWlnaHQgPSBnbS5n
bXB0R2x5cGhPcmlnaW4ueTsKLQotICAgICAgICBtX3VuaXRzUGVyRW0gPSBtZXRyaWNzLm90bUVN
U3F1YXJlOworICAgICAgICAgICAgbV94SGVpZ2h0ID0gZ20uZ21wdEdseXBoT3JpZ2luLnkgKiBt
ZXRyaWNzTXVsdGlwbGllcjsKKyAgICB9CiAKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xk
Rm9udCk7Ci0gICAgICAgIFJlbGVhc2VEQygwLCBoZGMpOworICAgIGNhaXJvX3dpbjMyX3NjYWxl
ZF9mb250X2RvbmVfZm9udChzY2FsZWRGb250KTsKIAotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIG1faXNTeXN0ZW1Gb250ID0gZmFsc2U7CisgICAgbV9zY3JpcHRDYWNoZSA9IDA7CisgICAg
bV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzZWN0aW9u
IHNob3VsZCBkZXRlcm1pbmUgZm9udCBkaW1lbnNpb25zIChzZWUgQ0cgaW1wbGVtZW50YXRpb24p
LgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVzdG9yZURDKGhkYywgLTEpOworICAgIFJl
bGVhc2VEQygwLCBoZGMpOwogfQogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ry
b3kobV9mb250LmZvbnRGYWNlKCkpOworICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3kobV9m
b250LnNjYWxlZEZvbnQoKSk7CisKKyAgICBEZWxldGVPYmplY3QobV9mb250Lmhmb250KCkpOwog
fQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewotICAgIGlmIChtX2ZvbnQudXNlR0RJKCkpIHsKLSAgICAgICAgSERDIGhk
YyA9IEdldERDKDApOwotICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRj
LCBtX2ZvbnQuaGZvbnQoKSk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgR2V0Q2hhcldp
ZHRoSShoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpOwotICAgICAgICBTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLSAgICAgICAgUmVsZWFzZURDKDAsIGhkYyk7Ci0gICAgICAgIHJldHVybiB3
aWR0aDsKLSAgICB9CisgICAgaWYgKG1fZm9udC51c2VHREkoKSkKKyAgICAgICByZXR1cm4gd2lk
dGhGb3JHRElHbHlwaChnbHlwaCk7CisKKyAgICBIREMgaGRjID0gR2V0REMoMCk7CisgICAgU2F2
ZURDKGhkYyk7CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gbV9mb250
LnNjYWxlZEZvbnQoKTsKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9zZWxlY3RfZm9udChz
Y2FsZWRGb250LCBoZGMpOworCisgICAgaW50IHdpZHRoOworICAgIEdldENoYXJXaWR0aEkoaGRj
LCBnbHlwaCwgMSwgMCwgJndpZHRoKTsKIAotICAgIC8vIEZJWE1FOiBGbGVzaCBvdXQgd2l0aCBD
YWlyby93aW4zMiBmb250IGltcGxlbWVudGF0aW9uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2ZvbnQoc2NhbGVkRm9udCk7CiAKLSAgICBy
ZXR1cm4gMDsKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7
CisKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4zMl9zY2Fs
ZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX2ZvbnQuc2l6ZSgpOwor
ICAgIHJldHVybiB3aWR0aCAqIG1ldHJpY3NNdWx0aXBsaWVyOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChjcik7Cisg
ICAgbV9mb250LnNldEZvbnQoY3IpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAzMDQy
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNDIgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6
c2hvdWxkQXBwbHlNYWNBc2NlbgogICAgIHJldHVybiBnX3Nob3VsZEFwcGx5TWFjQXNjZW50SGFj
azsKIH0KIAordm9pZCBTaW1wbGVGb250RGF0YTo6aW5pdEdESUZvbnQoKQoreworICAgICBIREMg
aGRjID0gR2V0REMoMCk7CisgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMs
IG1fZm9udC5oZm9udCgpKTsKKyAgICAgT1VUTElORVRFWFRNRVRSSUMgbWV0cmljczsKKyAgICAg
R2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgc2l6ZW9mKG1ldHJpY3MpLCAmbWV0cmljcyk7Cisg
ICAgIFRFWFRNRVRSSUMmIHRleHRNZXRyaWNzID0gbWV0cmljcy5vdG1UZXh0TWV0cmljczsKKyAg
ICAgbV9hc2NlbnQgPSB0ZXh0TWV0cmljcy50bUFzY2VudDsKKyAgICAgbV9kZXNjZW50ID0gdGV4
dE1ldHJpY3MudG1EZXNjZW50OworICAgICBtX2xpbmVHYXAgPSB0ZXh0TWV0cmljcy50bUV4dGVy
bmFsTGVhZGluZzsKKyAgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50ICsg
bV9saW5lR2FwOworICAgICBtX3hIZWlnaHQgPSBtX2FzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1
ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5cGggaXMgcHJlc2VudC4KKworICAgICBHTFlQSE1F
VFJJQ1MgZ207CisgICAgIE1BVDIgbWF0ID0geyAxLCAwLCAwLCAxIH07CisgICAgIERXT1JEIGxl
biA9IEdldEdseXBoT3V0bGluZShoZGMsICd4JywgR0dPX01FVFJJQ1MsICZnbSwgMCwgMCwgJm1h
dCk7CisgICAgIGlmIChsZW4gIT0gR0RJX0VSUk9SICYmIGdtLmdtcHRHbHlwaE9yaWdpbi55ID4g
MCkKKyAgICAgICAgIG1feEhlaWdodCA9IGdtLmdtcHRHbHlwaE9yaWdpbi55OworCisgICAgIG1f
dW5pdHNQZXJFbSA9IG1ldHJpY3Mub3RtRU1TcXVhcmU7CisKKyAgICAgU2VsZWN0T2JqZWN0KGhk
Yywgb2xkRm9udCk7CisgICAgIFJlbGVhc2VEQygwLCBoZGMpOworCisgICAgIHJldHVybjsKK30K
Kwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Db21tb25EZXN0cm95KCkKK3sKKyAgICAv
LyBXZSBkb24ndCBoYXNoIHRoaXMgb24gV2luMzIsIHNvIGl0J3MgZWZmZWN0aXZlbHkgb3duZWQg
YnkgdXMuCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CisKKyAgICBTY3JpcHRGcmVl
Q2FjaGUoJm1fc2NyaXB0Q2FjaGUpOworICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVz
OworfQorCiBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlm
ICghbV9zbWFsbENhcHNGb250RGF0YSkgewpAQCAtMTM3LDYgKzE3MywxNyBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVsZWFzZURDKDAsIGRjKTsKIH0KIAor
ZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Cit7CisgICAgSERDIGhkYyA9IEdldERDKDApOworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVj
dE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKKyAgICBpbnQgd2lkdGg7CisgICAgR2V0Q2hh
cldpZHRoSShoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpOworICAgIFNlbGVjdE9iamVjdChoZGMs
IG9sZEZvbnQpOworICAgIFJlbGVhc2VEQygwLCBoZGMpOworICAgIHJldHVybiB3aWR0aDsKK30K
KwogU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0Rm9udFByb3Bl
cnRpZXMoKSBjb25zdAogewogICAgIGlmICghbV9zY3JpcHRGb250UHJvcGVydGllcykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19234</attachid>
            <date>2008-02-20 12:51:48 -0800</date>
            <delta_ts>2008-02-20 14:39:33 -0800</delta_ts>
            <desc>Fourth revision based on mitzpettel&apos;s comments</desc>
            <filename>win32_cairo_font.patch</filename>
            <type>text/plain</type>
            <size>61808</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMDgtMDItMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMzYKKyAgICAgICAgUHJv
dmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9yIFdpbmRvd3MgKENhaXJvKSBidWlsZCBvZiBXZWJLaXQg
dGhhdAorICAgICAgICBoYW5kbGVzIGZvbnQgZm9ybWF0dGluZy4KKyAgICAgICAgLSBTcGxpdCBm
b250IGltcGxlbWVudGF0aW9uIGZpbGVzIHRvIGFsbG93IG1heGltYWwgY29kZSBzaGFyaW5nCisg
ICAgICAgICAgYmV0d2VlbiBDRyBhbmQgQ2Fpcm8gYmFjay1lbmRzLiAKKworICAgICAgICBXQVJO
SU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmg6ICAgQWRkIHNpZ25hdHVyZXMgZm9yIHByaXZhdGUgd2luCisgICAgICAgICAg
aW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9y
bUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhaXJvV2luLmNwcDog
UmVtb3ZlZC4gIFVuaXZlcnNhbCB2ZXJzaW9uCisgICAgICAgICAgaXMgbm93IHBhcnQgb2YgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybzo6Zm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvOjpGb250Q3VzdG9tUGxh
dGZvcm1EYXRhQ2Fpcm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnRGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNjYWxlZEZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6IENvcGllZCBm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dp
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cDogIE1vdmVkIENHLXNwZWNpZmljCisgICAgICAgICAgY29kZSB0byBGb250UGxhdGZvcm1EYXRh
Q0cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q0dXaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZVdpbi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ds
eXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZVdpbi5jcHA6IFJlbW92ZWQuICBSZXBsYWNlZAorICAgICAgICAgIHdpdGgg
Q0ctIGFuZCBDYWlyby1zcGVjaWZpYyB2ZXJzaW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNl
dEZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aW5pdEdESUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ29tbW9uRGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHRElHbHlwaCk6CisK
IDIwMDgtMDItMjAgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzA0MjUpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAwLDYgKzM5MDAsMTAgQEAK
IAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcCINCisJ
CQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KIAkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIg0KIAkJCQkJ
CT4NCiAJCQkJCTwvRmlsZT4NCkBAIC0zOTMyLDcgKzM5MzYsNyBAQAogCQkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwIg0K
KwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXEdseXBoUGFnZVRy
ZWVOb2RlQ0dXaW4uY3BwIg0KIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNp
b24gMzA0MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzcsMTAg
QEAgdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRTVVN0eWxlKiBBVFNVU3R5bAogI2luY2x1ZGUgPHVz
cDEwLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247
CkBAIC0xMDYsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHNob3VsZEFwcGx5
TWFjQXNjZW50SGFjaygpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZP
Uk0oQ0FJUk8pCiAgICAgdm9pZCBzZXRGb250KGNhaXJvX3QqKSBjb25zdDsKICNlbmRpZgogCkBA
IC0xMjAsNiArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21tb25Jbml0KCk7
CiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCBpbml0R0RJRm9udCgpOworICAgIHZvaWQg
cGxhdGZvcm1Db21tb25EZXN0cm95KCk7CisgICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3Q7CisjZW5kaWYKKwogcHVibGljOgogICAgIGludCBtX2FzY2VudDsKICAg
ICBpbnQgbV9kZXNjZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsOCArMzUsMTAgQEAKICNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKICNpbmNsdWRlIDx3
aW5kb3dzLmg+CiAjaW5jbHVkZSA8bWxhbmcuaD4KKyNpZiBQTEFURk9STShDRykKICNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKIAog
dXNpbmcgc3RkOjptaW47CiAKQEAgLTQ1LDcgKzQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIAog
dm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CisjaWYgUExBVEZPUk0oQ0cpCiAgICAg
d2tTZXRVcEZvbnRDYWNoZSgxNTM2ICogMTAyNCAqIDQpOyAvLyBUaGlzIHNpemUgbWF0Y2hlcyBN
YWMuCisjZW5kaWYKIH0KIAogSU1MYW5nRm9udExpbmsyKiBGb250Q2FjaGU6OmdldEZvbnRMaW5r
SW50ZXJmYWNlKCkKQEAgLTQxNCw3ICs0MTgsMTQgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpjcmVhdGVGb250UAogICAgIAogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IG5l
dyBGb250UGxhdGZvcm1EYXRhKGhmb250LCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uYm9sZCgpLCBmb250RGVzY3JpcHRpb24uaXRhbGljKCksIHVzZUdE
SSk7Ci0gICAgaWYgKCFyZXN1bHQtPmNnRm9udCgpKSB7CisKKyNpZiBQTEFURk9STShDRykKKyAg
ICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPmNnRm9udCgpOworI2VsaWYgUExB
VEZPUk0oQ0FJUk8pCisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5mb250
RmFjZSgpOworI2VuZGlmCisKKyAgICBpZiAoZm9udENyZWF0aW9uRmFpbGVkKSB7CiAgICAgICAg
IC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgQ0dGb250UmVmIGZhaWxlZCBmb3Igc29tZSByZWFzb24u
ICBXZSBhbHJlYWR5IGFzc2VydGVkIGluIGRlYnVnIGJ1aWxkcywgYnV0IHRvIG1ha2UKICAgICAg
ICAgLy8gYWJzb2x1dGVseSBzdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoaXMgZm9udCwgZ28gYWhl
YWQgYW5kIHJldHVybiAwIHNvIHRoYXQgd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgbmV4dAogICAg
ICAgICAvLyBmb250LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMzA0
MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAgY2xhc3MgU2hhcmVkQnVmZmVy
OwogCiBzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSA6IE5vbmNvcHlhYmxlIHsKICAgICBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKENHRm9udFJlZiBjZ0ZvbnQpCi0gICAgOiBtX2NnRm9udChj
Z0ZvbnQpCi0gICAge30KKyAgICAgICAgOiBtX2NnRm9udChjZ0ZvbnQpCisgICAgeworICAgIH0K
ICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwogCiAgICAgRm9udFBsYXRmb3JtRGF0YSBm
b250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKQEAgLTQx
LDcgKzQyLDcgQEAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YQogICAg
IENHRm9udFJlZiBtX2NnRm9udDsKIH07CiAKLUZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0
ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpOworRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIq
KTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fp
cm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmgiCisKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGFDYWlybzo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybygpCit7CisgICBjYWly
b19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnRGYWNlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm86OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9m
b250RmFjZSwgc2l6ZSwgYm9sZCwgaXRhbGljKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZURh
dGEodm9pZCogZGF0YSkKK3sKKyAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+
ZGVyZWYoKTsKK30KKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvKiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkco
YnVmZmVyLCBidWZmZXIpOworCisgICAgYnVmZmVyLT5yZWYoKTsKKyAgICBIRk9OVCBmb250ID0g
cmVpbnRlcnByZXRfY2FzdDxIRk9OVD4oYnVmZmVyKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCog
Zm9udEZhY2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250KTsK
KyAgICBpZiAoIWZvbnRGYWNlKQorICAgICAgIHJldHVybiAwOworCisgICAgc3RhdGljIGNhaXJv
X3VzZXJfZGF0YV9rZXlfdCBidWZmZXJLZXk7CisgICAgY2Fpcm9fZm9udF9mYWNlX3NldF91c2Vy
X2RhdGEoZm9udEZhY2UsICZidWZmZXJLZXksIGJ1ZmZlciwgcmVsZWFzZURhdGEpOworCisgICAg
cmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8oZm9udEZhY2UpOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyb19oCisj
ZGVmaW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyb19oCisKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlybyA6IE5vbmNvcHlhYmxlIHsKKyAgICBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhQ2Fpcm8oY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlKQorICAgICAg
ICA6IG1fZm9udEZhY2UoZm9udEZhY2UpCisgICAgeworICAgIH0KKyAgICB+Rm9udEN1c3RvbVBs
YXRmb3JtRGF0YUNhaXJvKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURh
dGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworCisgICAgY2Fpcm9fZm9udF9m
YWNlX3QqIG1fZm9udEZhY2U7Cit9OworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8qIGNy
ZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKik7CisKK30KKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YS5oCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQg
c2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1hYy5j
cHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsOCArMjYsMTIgQEAKIAogI2luY2x1ZGUg
IlN0cmluZ0ltcGwuaCIKIAotdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyAqSEZPTlQ7Ci10eXBlZGVm
IHN0cnVjdCBDR0ZvbnQgKkNHRm9udFJlZjsKKyNpZiBQTEFURk9STShDQUlSTykKKyNpbmNsdWRl
IDxjYWlyby13aW4zMi5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05U
OwordHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDAsMzAgKzQ0LDUzIEBAIHB1YmxpYzoKIAogICAgIC8vIFVzZWQgZm9yIGRlbGV0
ZWQgdmFsdWVzIGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuCiAgICAgRm9udFBsYXRm
b3JtRGF0YShEZWxldGVkKQotICAgIDogbV9mb250KChIRk9OVCktMSkKLSAgICAsIG1fY2dGb250
KE5VTEwpCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAg
ICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQotICAg
IHt9CisgICAgICAgIDogbV9mb250KChIRk9OVCktMSkKKyNpZiBQTEFURk9STShDRykKKyAgICAg
ICAgLCBtX2NnRm9udCgwKQorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAgICwgbV9mb250
RmFjZSgwKQorI2VuZGlmCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9zeW50aGV0
aWNCb2xkKGZhbHNlKQorICAgICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKKyAgICAg
ICAgLCBtX3VzZUdESShmYWxzZSkKKyAgICB7CisgICAgfQogCiAgICAgRm9udFBsYXRmb3JtRGF0
YSgpCi0gICAgOiBtX2ZvbnQoMCkKLSAgICAsIG1fY2dGb250KE5VTEwpCi0gICAgLCBtX3NpemUo
MCkKLSAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKLSAgICAsIG1fc3ludGhldGljT2JsaXF1
ZShmYWxzZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQotICAgIHt9CisgICAgICAgIDogbV9mb250
KDApCisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICwgbV9jZ0ZvbnQoMCkKKyNlbGlmIFBMQVRG
T1JNKENBSVJPKQorICAgICAgICAsIG1fZm9udEZhY2UoMCkKKyNlbmRpZgorICAgICAgICAsIG1f
c2l6ZSgwKQorICAgICAgICAsIG1fc3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3N5
bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgICAgICwgbV91c2VHREkoZmFsc2UpCisgICAgewor
ICAgIH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisKKyNpZiBQTEFURk9STShDRykKICAg
ICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUpOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgRm9udFBsYXRmb3JtRGF0YShj
YWlyb19mb250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsK
KyNlbmRpZgogICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CiAKKyAgICB2b2lkIHBsYXRmb3JtRGF0
YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKTsK
KwogICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CisjaWYgUExBVEZP
Uk0oQ0cpCiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250OyB9
CisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICB2b2lkIHNldEZvbnQoY2Fpcm9fdCogZnQpIGNv
bnN0OworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udEZhY2U7IH0KKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZWRGb250OyB9CisjZW5kaWYKIAogICAgIGZsb2F0IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoZmxvYXQgc2l6ZSkgeyBtX3Np
emUgPSBzaXplOyB9CkBAIC03OCwxNCArMTA1LDI2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKICAgICB7IAotICAg
ICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udCAmJiBtX2NnRm9udCA9PW90aGVyLm1f
Y2dGb250ICYmIG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKKyAgICAgICAgcmV0dXJuIG1fZm9u
dCA9PSBvdGhlci5tX2ZvbnQgJiYKKyNpZiBQTEFURk9STShDRykKKyAgICAgICAgICAgICAgIG1f
Y2dGb250ID09IG90aGVyLm1fY2dGb250ICYmCisjZWxpZiBQTEFURk9STShDQUlSTykKKyAgICAg
ICAgICAgICAgIG1fZm9udEZhY2UgPT0gb3RoZXIubV9mb250RmFjZSAmJgorICAgICAgICAgICAg
ICAgbV9zY2FsZWRGb250ID09IG90aGVyLm1fc2NhbGVkRm9udCAmJgorI2VuZGlmCisgICAgICAg
ICAgICAgICBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmCiAgICAgICAgICAgICAgICBtX3N5bnRo
ZXRpY0JvbGQgPT0gb3RoZXIubV9zeW50aGV0aWNCb2xkICYmIG1fc3ludGhldGljT2JsaXF1ZSA9
PSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWUgJiYKICAgICAgICAgICAgICAgIG1fdXNlR0RJID09
IG90aGVyLm1fdXNlR0RJOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBIRk9OVCBtX2ZvbnQ7Cisj
aWYgUExBVEZPUk0oQ0cpCiAgICAgQ0dGb250UmVmIG1fY2dGb250OworI2VsaWYgUExBVEZPUk0o
Q0FJUk8pCisgICAgY2Fpcm9fZm9udF9mYWNlX3QqIG1fZm9udEZhY2U7CisgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogbV9zY2FsZWRGb250OworI2VuZGlmCiAKICAgICBmbG9hdCBtX3NpemU7CiAg
ICAgYm9vbCBtX3N5bnRoZXRpY0JvbGQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHJldmlzaW9uIDMw
MTU1KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRh
V2luLmNwcDozMDE1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4g
IEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRN
YWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIHN0ZDo6bWluOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQgQm9sZCA9ICgxIDw8IDAp
Oworc3RhdGljIGNvbnN0IGludCBJdGFsaWMgPSAoMSA8PCAxKTsKK3N0YXRpYyBjb25zdCBpbnQg
Qm9sZE9ibGlxdWUgPSAoMSA8PCAyKTsKKworc3RhdGljIGlubGluZSBVU0hPUlQgcmVhZEJpZ0Vu
ZGlhbldvcmQoY29uc3QgQllURSogd29yZCkgeyByZXR1cm4gKHdvcmRbMF0gPDwgOCkgfCB3b3Jk
WzFdOyB9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBnZXRQb3N0U2NyaXB0TmFtZShDRlN0cmluZ1Jl
ZiBmYWNlTmFtZSwgSERDIGRjKQoreworICAgIGNvbnN0IERXT1JEIGNNYXhOYW1lVGFibGVTaXpl
ID0gMTAyNCAqIDEwMjQ7CisKKyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gPiBuYW1lTWFwOworCisgICAgLy8gQ2hlY2sgb3VyIGhhc2ggZmlyc3QuCisg
ICAgU3RyaW5nIGZhY2VTdHJpbmcoZmFjZU5hbWUpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gcmVzdWx0ID0gbmFtZU1hcC5nZXQoZmFjZVN0cmluZyk7CisgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKKworICAgIC8vIFdlIG5lZWQgdG8gb2J0YWluIHRo
ZSBQb3N0U2NyaXB0IG5hbWUgZnJvbSB0aGUgbmFtZSB0YWJsZSBhbmQgdXNlIGl0IGluc3RlYWQs
LgorICAgIERXT1JEIGJ1ZmZlclNpemUgPSBHZXRGb250RGF0YShkYywgJ2VtYW4nLCAwLCBOVUxM
LCAwKTsgLy8gIm5hbWUiIGJhY2t3YXJkcworICAgIGlmIChidWZmZXJTaXplID09IDAgfHwgYnVm
ZmVyU2l6ZSA9PSBHRElfRVJST1IgfHwgYnVmZmVyU2l6ZSA+IGNNYXhOYW1lVGFibGVTaXplKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgIAorICAgIFZlY3RvcjxCWVRFPiBidWZmZXJWZWN0b3Io
YnVmZmVyU2l6ZSk7CisgICAgQllURSogYnVmZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKKyAg
ICBpZiAoR2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgYnVmZmVyLCBidWZmZXJTaXplKSA9PSBH
RElfRVJST1IpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGJ1ZmZlclNpemUgPCA2
KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFVTSE9SVCBudW1iZXJPZlJlY29yZHMgPSBy
ZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyAyKTsKKyAgICBVSU5UIHN0cmluZ3NPZmZzZXQgPSBy
ZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyA0KTsKKyAgICBpZiAoYnVmZmVyU2l6ZSA8IHN0cmlu
Z3NPZmZzZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQllURSogc3RyaW5ncyA9IGJ1
ZmZlciArIHN0cmluZ3NPZmZzZXQ7CisKKyAgICAvLyBOb3cgd2FsayBlYWNoIG5hbWUgcmVjb3Jk
IGxvb2tpbmcgZm9yIGEgTWFjIG9yIFdpbmRvd3MgUG9zdFNjcmlwdCBuYW1lLgorICAgIFVJTlQg
b2Zmc2V0ID0gNjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mUmVjb3JkczsgaSsr
KSB7CisgICAgICAgIGlmIChidWZmZXJTaXplIDwgb2Zmc2V0ICsgMTIpCisgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKworICAgICAgICBVU0hPUlQgcGxhdGZvcm1JRCA9IHJlYWRCaWdFbmRpYW5X
b3JkKGJ1ZmZlciArIG9mZnNldCk7CisgICAgICAgIFVTSE9SVCBlbmNvZGluZ0lEID0gcmVhZEJp
Z0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgMik7CisgICAgICAgIFVTSE9SVCBsYW5ndWFn
ZUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNCk7CisgICAgICAgIFVT
SE9SVCBuYW1lSUQgPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQgKyA2KTsKKyAg
ICAgICAgVVNIT1JUIGxlbmd0aCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCAr
IDgpOworICAgICAgICBVU0hPUlQgbmFtZU9mZnNldCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZl
ciArIG9mZnNldCArIDEwKTsKKworICAgICAgICBpZiAocGxhdGZvcm1JRCA9PSAzICYmIGVuY29k
aW5nSUQgPT0gMSAmJiBsYW5ndWFnZUlEID09IDB4NDA5ICYmIG5hbWVJRCA9PSA2KSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgV2luZG93cyBQb3N0U2NyaXB0IG5hbWUgYW5kIGlzIHRoZXJl
Zm9yZSBVVEYtMTYuCisgICAgICAgICAgICAvLyBQYXNzIEJpZyBFbmRpYW4gYXMgdGhlIGVuY29k
aW5nLgorICAgICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0ICsgbmFtZU9m
ZnNldCArIGxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IHJlc3VsdC5hZG9wdENGKENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHN0cmluZ3MgKyBu
YW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGMTZCRSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSUQgPT0gMSAmJiBl
bmNvZGluZ0lEID09IDAgJiYgbGFuZ3VhZ2VJRCA9PSAwICYmIG5hbWVJRCA9PSA2KSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgTWFjIFBvc3RTY3JpcHQgbmFtZSBhbmQgaXMgdGhlcmVmb3Jl
IEFTQ0lJLgorICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3Rl
eHRmb250cy9UVFJlZk1hbi9STTA2L0NoYXA2bmFtZS5odG1sCisgICAgICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSA8IHN0cmluZ3NPZmZzZXQgKyBuYW1lT2Zmc2V0ICsgbGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmVzdWx0LmFkb3B0Q0YoQ0ZTdHJpbmdD
cmVhdGVXaXRoQnl0ZXMoTlVMTCwgc3RyaW5ncyArIG5hbWVPZmZzZXQsIGxlbmd0aCwga0NGU3Ry
aW5nRW5jb2RpbmdBU0NJSSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgb2Zmc2V0ICs9IDEyOworICAgIH0KKworICAgIGlmIChyZXN1bHQpCisgICAg
ICAgIG5hbWVNYXAuc2V0KGZhY2VTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdC5n
ZXQoKTsKK30KKworc3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2FsbGJhY2soY29uc3Qg
TE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdPUkQgZm9udFR5
cGUsIExQQVJBTSBsUGFyYW0pCit7CisgICAgaW50ICpzdHlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50Kj4obFBhcmFtKTsKKworICAgIC8vIEZJWE1FOiBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBM
dWNpZGEgd2UgZ28gYWhlYWQgYW5kIGNvbnNpZGVyIGEgd2VpZ2h0IG9mIDYwMCB0byBiZSBib2xk
LgorICAgIC8vIFRoaXMgZG9lcyBtZWFuIHdlJ2xsIGNvbnNpZGVyIGRlbWlib2xkIGFuZCBzZW1p
Ym9sZCBmb250cyBvbiB3aW5kb3dzIHRvIGFsc28gYmUgYm9sZC4gIFRoaXMKKyAgICAvLyBpcyBy
YXJlIGVub3VnaCB0aGF0IGl0IHNlZW1zIGxpa2UgYW4gb2sgaGFjayBmb3Igbm93LgorICAgIGlm
IChsb2dGb250LT5sZldlaWdodCA+PSA2MDApIHsKKyAgICAgICAgaWYgKGxvZ0ZvbnQtPmxmSXRh
bGljKQorICAgICAgICAgICAgKnN0eWxlIHw9IEJvbGRPYmxpcXVlOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICAqc3R5bGUgfD0gQm9sZDsKKyAgICB9IGVsc2UgaWYgKGxvZ0ZvbnQtPmxmSXRh
bGljKQorICAgICAgICAqc3R5bGUgfD0gSXRhbGljOworCisgICAgcmV0dXJuIDE7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorICAgIDogbV9mb250KGZvbnQp
CisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY2dGb250KDApCisgICAgLCBtX3N5bnRoZXRp
Y0JvbGQoZmFsc2UpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUoZmFsc2UpCisgICAgLCBtX3Vz
ZUdESSh1c2VHREkpCit7CisgICAgSERDIGhkYyA9IEdldERDKDApOworICAgIFNhdmVEQyhoZGMp
OworICAgIAorICAgIFNlbGVjdE9iamVjdChoZGMsIGZvbnQpOworICAgIFVJTlQgYnVmZmVyU2l6
ZSA9IEdldE91dGxpbmVUZXh0TWV0cmljcyhoZGMsIDAsIE5VTEwpOworCisgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShidWZmZXJTaXplICE9IDAsICJCaXRtYXAgZm9udHMgbm90IHN1cHBvcnRlZCB3
aXRoIENvcmVHcmFwaGljcy4iKTsKKworICAgIGlmIChidWZmZXJTaXplICE9IDApIHsKKyAgICAg
ICAgT1VUTElORVRFWFRNRVRSSUNXKiBtZXRyaWNzID0gKE9VVExJTkVURVhUTUVUUklDVyopbWFs
bG9jKGJ1ZmZlclNpemUpOworCisgICAgICAgIEdldE91dGxpbmVUZXh0TWV0cmljc1coaGRjLCBi
dWZmZXJTaXplLCBtZXRyaWNzKTsKKyAgICAgICAgV0NIQVIqIGZhY2VOYW1lID0gKFdDSEFSKiko
KHVpbnRwdHJfdCltZXRyaWNzICsgKHVpbnRwdHJfdCltZXRyaWNzLT5vdG1wRmFjZU5hbWUpOwor
CisgICAgICAgIGlmICghdXNlR0RJICYmIChib2xkIHx8IG9ibGlxdWUpKSB7CisgICAgICAgICAg
ICBMT0dGT05UIGxvZ0ZvbnQ7CisKKyAgICAgICAgICAgIGludCBsZW4gPSBtaW4oKGludCl3Y3Ns
ZW4oZmFjZU5hbWUpLCBMRl9GQUNFU0laRSAtIDEpOworICAgICAgICAgICAgbWVtY3B5KGxvZ0Zv
bnQubGZGYWNlTmFtZSwgZmFjZU5hbWUsIGxlbiAqIHNpemVvZihXT1JEKSk7CisgICAgICAgICAg
ICBsb2dGb250LmxmRmFjZU5hbWVbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBsb2dGb250Lmxm
Q2hhclNldCA9IG1ldHJpY3MtPm90bVRleHRNZXRyaWNzLnRtQ2hhclNldDsKKyAgICAgICAgICAg
IGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IDA7CisKKyAgICAgICAgICAgIGludCBzdHlsZXMg
PSAwOworICAgICAgICAgICAgRW51bUZvbnRGYW1pbGllc0V4KGhkYywgJmxvZ0ZvbnQsIGVudW1T
dHlsZXNDYWxsYmFjaywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZzdHlsZXMpLCAwKTsKKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBzeW50aGVzaXplIGJvbGQgb3Igb2Js
aXF1ZS4gVGhlIHJ1bGUgdGhhdCBjb21wbGljYXRlcyB0aGluZ3MgaGVyZQorICAgICAgICAgICAg
Ly8gaXMgdGhhdCBpZiB0aGUgcmVxdWVzdGVkIGZvbnQgaXMgYm9sZCBhbmQgb2JsaXF1ZSwgYW5k
IGJvdGggYSBib2xkIGZvbnQgYW5kIGFuIG9ibGlxdWUgZm9udAorICAgICAgICAgICAgLy8gZXhp
c3QsIHRoZSBib2xkIGZvbnQgc2hvdWxkIGJlIHVzZWQsIGFuZCBvYmxpcXVlIHN5bnRoZXNpemVk
LgorICAgICAgICAgICAgaWYgKGJvbGQgJiYgb2JsaXF1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChzdHlsZXMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGVzICYgQm9sZCkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChz
dHlsZXMgJiBJdGFsaWMpCisgICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGljQm9sZCA9IHRy
dWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJvbGQgJiYgKCEoc3R5bGVzICYgQm9sZCkpKQor
ICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOworICAgICAgICAgICAg
ICBlbHNlIGlmIChvYmxpcXVlICYmICEoc3R5bGVzICYgSXRhbGljKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFRyeSB0aGUgZmFjZSBuYW1lIGZpcnN0LiAgV2luZG93cyBtYXkgZW5kIHVwIGxvY2FsaXppbmcg
dGhpcyBuYW1lLCBhbmQgQ0cgZG9lc24ndCBrbm93IGFib3V0CisgICAgICAgIC8vIHRoZSBsb2Nh
bGl6YXRpb24uICBJZiB0aGUgY3JlYXRlIGZhaWxzLCB3ZSdsbCB0cnkgdGhlIFBvc3RTY3JpcHQg
bmFtZS4KKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZShBZG9wdENGLCBD
RlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChjb25zdCBVbmlDaGFyKilmYWNlTmFt
ZSwgd2NzbGVuKGZhY2VOYW1lKSkpOworICAgICAgICBtX2NnRm9udCA9IENHRm9udENyZWF0ZVdp
dGhGb250TmFtZShmdWxsTmFtZS5nZXQoKSk7CisgICAgICAgIGlmICghbV9jZ0ZvbnQpIHsKKyAg
ICAgICAgICAgIENGU3RyaW5nUmVmIHBvc3RTY3JpcHROYW1lID0gZ2V0UG9zdFNjcmlwdE5hbWUo
ZnVsbE5hbWUuZ2V0KCksIGhkYyk7CisgICAgICAgICAgICBpZiAocG9zdFNjcmlwdE5hbWUpIHsK
KyAgICAgICAgICAgICAgICBtX2NnRm9udCA9IENHRm9udENyZWF0ZVdpdGhGb250TmFtZShwb3N0
U2NyaXB0TmFtZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY2dGb250KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKG1ldHJpY3MpOworICAgIH0KKworICAgIFJl
c3RvcmVEQyhoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMoMCwgaGRjKTsKK30KKworRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2Js
aXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2NnRm9u
dCgwKQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQoreworfQorCitGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisg
ICAgLCBtX2NnRm9udChmb250KQorICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fdXNlR0RJKGZhbHNlKQoreworfQor
CitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YUNHV2luLmNwcAkocmV2aXNpb24gMzAxNTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFu
CiAgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgogICoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxMCArMzUsNiBA
QCB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3Qg
aW50IEJvbGQgPSAoMSA8PCAwKTsKLXN0YXRpYyBjb25zdCBpbnQgSXRhbGljID0gKDEgPDwgMSk7
Ci1zdGF0aWMgY29uc3QgaW50IEJvbGRPYmxpcXVlID0gKDEgPDwgMik7Ci0KIHN0YXRpYyBpbmxp
bmUgVVNIT1JUIHJlYWRCaWdFbmRpYW5Xb3JkKGNvbnN0IEJZVEUqIHdvcmQpIHsgcmV0dXJuICh3
b3JkWzBdIDw8IDgpIHwgd29yZFsxXTsgfQogCiBzdGF0aWMgQ0ZTdHJpbmdSZWYgZ2V0UG9zdFNj
cmlwdE5hbWUoQ0ZTdHJpbmdSZWYgZmFjZU5hbWUsIEhEQyBkYykKQEAgLTExMCwxMDEgKzEwNiwx
OSBAQCBzdGF0aWMgQ0ZTdHJpbmdSZWYgZ2V0UG9zdFNjcmlwdE5hbWUoQ0ZTCiAgICAgcmV0dXJu
IHJlc3VsdC5nZXQoKTsKIH0KIAotc3RhdGljIGludCBDQUxMQkFDSyBlbnVtU3R5bGVzQ2FsbGJh
Y2soY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdP
UkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VO
YW1lKQogewotICAgIGludCAqc3R5bGUgPSByZWludGVycHJldF9jYXN0PGludCo+KGxQYXJhbSk7
Ci0KLSAgICAvLyBGSVhNRTogSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgTHVjaWRhIHdlIGdvIGFo
ZWFkIGFuZCBjb25zaWRlciBhIHdlaWdodCBvZiA2MDAgdG8gYmUgYm9sZC4KLSAgICAvLyBUaGlz
IGRvZXMgbWVhbiB3ZSdsbCBjb25zaWRlciBkZW1pYm9sZCBhbmQgc2VtaWJvbGQgZm9udHMgb24g
d2luZG93cyB0byBhbHNvIGJlIGJvbGQuICBUaGlzCi0gICAgLy8gaXMgcmFyZSBlbm91Z2ggdGhh
dCBpdCBzZWVtcyBsaWtlIGFuIG9rIGhhY2sgZm9yIG5vdy4KLSAgICBpZiAobG9nRm9udC0+bGZX
ZWlnaHQgPj0gNjAwKSB7Ci0gICAgICAgIGlmIChsb2dGb250LT5sZkl0YWxpYykKLSAgICAgICAg
ICAgICpzdHlsZSB8PSBCb2xkT2JsaXF1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKnN0
eWxlIHw9IEJvbGQ7Ci0gICAgfSBlbHNlIGlmIChsb2dGb250LT5sZkl0YWxpYykKLSAgICAgICAg
KnN0eWxlIHw9IEl0YWxpYzsKLQotICAgIHJldHVybiAxOwotfQotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBvYmxpcXVlLCBib29sIHVzZUdESSkKLSAgICA6IG1fZm9udChmb250KQotICAgICwgbV9zaXpl
KHNpemUpCi0gICAgLCBtX2NnRm9udCgwKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGZhbHNlKQot
ICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKGZhbHNlKQotICAgICwgbV91c2VHREkodXNlR0RJKQot
ewotICAgIEhEQyBoZGMgPSBHZXREQygwKTsKLSAgICBTYXZlREMoaGRjKTsKLSAgICAKLSAgICBT
ZWxlY3RPYmplY3QoaGRjLCBmb250KTsKLSAgICBVSU5UIGJ1ZmZlclNpemUgPSBHZXRPdXRsaW5l
VGV4dE1ldHJpY3MoaGRjLCAwLCBOVUxMKTsKLQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYnVm
ZmVyU2l6ZSAhPSAwLCAiQml0bWFwIGZvbnRzIG5vdCBzdXBwb3J0ZWQgd2l0aCBDb3JlR3JhcGhp
Y3MuIik7Ci0KLSAgICBpZiAoYnVmZmVyU2l6ZSAhPSAwKSB7Ci0gICAgICAgIE9VVExJTkVURVhU
TUVUUklDVyogbWV0cmljcyA9IChPVVRMSU5FVEVYVE1FVFJJQ1cqKW1hbGxvYyhidWZmZXJTaXpl
KTsKLQotICAgICAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3NXKGhkYywgYnVmZmVyU2l6ZSwgbWV0
cmljcyk7Ci0gICAgICAgIFdDSEFSKiBmYWNlTmFtZSA9IChXQ0hBUiopKCh1aW50cHRyX3QpbWV0
cmljcyArICh1aW50cHRyX3QpbWV0cmljcy0+b3RtcEZhY2VOYW1lKTsKLQotICAgICAgICBpZiAo
IXVzZUdESSAmJiAoYm9sZCB8fCBvYmxpcXVlKSkgewotICAgICAgICAgICAgTE9HRk9OVCBsb2dG
b250OwotCi0gICAgICAgICAgICBpbnQgbGVuID0gbWluKChpbnQpd2NzbGVuKGZhY2VOYW1lKSwg
TEZfRkFDRVNJWkUgLSAxKTsKLSAgICAgICAgICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUs
IGZhY2VOYW1lLCBsZW4gKiBzaXplb2YoV09SRCkpOwotICAgICAgICAgICAgbG9nRm9udC5sZkZh
Y2VOYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBtZXRy
aWNzLT5vdG1UZXh0TWV0cmljcy50bUNoYXJTZXQ7Ci0gICAgICAgICAgICBsb2dGb250LmxmUGl0
Y2hBbmRGYW1pbHkgPSAwOwotCi0gICAgICAgICAgICBpbnQgc3R5bGVzID0gMDsKLSAgICAgICAg
ICAgIEVudW1Gb250RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCBlbnVtU3R5bGVzQ2FsbGJhY2ss
IHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmc3R5bGVzKSwgMCk7Ci0KLSAgICAgICAgICAgIC8v
IENoZWNrIGlmIHdlIG5lZWQgdG8gc3ludGhlc2l6ZSBib2xkIG9yIG9ibGlxdWUuIFRoZSBydWxl
IHRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzIGhlcmUKLSAgICAgICAgICAgIC8vIGlzIHRoYXQgaWYg
dGhlIHJlcXVlc3RlZCBmb250IGlzIGJvbGQgYW5kIG9ibGlxdWUsIGFuZCBib3RoIGEgYm9sZCBm
b250IGFuZCBhbiBvYmxpcXVlIGZvbnQKLSAgICAgICAgICAgIC8vIGV4aXN0LCB0aGUgYm9sZCBm
b250IHNob3VsZCBiZSB1c2VkLCBhbmQgb2JsaXF1ZSBzeW50aGVzaXplZC4KLSAgICAgICAgICAg
IGlmIChib2xkICYmIG9ibGlxdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGVzID09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHN0eWxlcyAmIEJvbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhldGlj
T2JsaXF1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVzICYgSXRhbGlj
KQotICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY0JvbGQgPSB0cnVlOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChib2xkICYmICghKHN0eWxlcyAmIEJvbGQpKSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9zeW50aGV0aWNCb2xkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAob2Js
aXF1ZSAmJiAhKHN0eWxlcyAmIEl0YWxpYykpCi0gICAgICAgICAgICAgICAgICAgIG1fc3ludGhl
dGljT2JsaXF1ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUcnkgdGhlIGZhY2Ug
bmFtZSBmaXJzdC4gIFdpbmRvd3MgbWF5IGVuZCB1cCBsb2NhbGl6aW5nIHRoaXMgbmFtZSwgYW5k
IENHIGRvZXNuJ3Qga25vdyBhYm91dAotICAgICAgICAvLyB0aGUgbG9jYWxpemF0aW9uLiAgSWYg
dGhlIGNyZWF0ZSBmYWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUuCi0gICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopZmFjZU5hbWUsIHdjc2xlbihmYWNl
TmFtZSkpKTsKLSAgICAgICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUoZnVs
bE5hbWUuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fY2dGb250KSB7Ci0gICAgICAgICAgICBDRlN0
cmluZ1JlZiBwb3N0U2NyaXB0TmFtZSA9IGdldFBvc3RTY3JpcHROYW1lKGZ1bGxOYW1lLmdldCgp
LCBoZGMpOwotICAgICAgICAgICAgaWYgKHBvc3RTY3JpcHROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2NnRm9udCk7Ci0gICAgICAgICAgICB9CisgICAgLy8g
VHJ5IHRoZSBmYWNlIG5hbWUgZmlyc3QuICBXaW5kb3dzIG1heSBlbmQgdXAgbG9jYWxpemluZyB0
aGlzIG5hbWUsIGFuZCBDRyBkb2Vzbid0IGtub3cgYWJvdXQKKyAgICAvLyB0aGUgbG9jYWxpemF0
aW9uLiAgSWYgdGhlIGNyZWF0ZSBmYWlscywgd2UnbGwgdHJ5IHRoZSBQb3N0U2NyaXB0IG5hbWUu
CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZShBZG9wdENGLCBDRlN0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIChjb25zdCBVbmlDaGFyKilmYWNlTmFtZSwgd2NzbGVu
KGZhY2VOYW1lKSkpOworICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1
bGxOYW1lLmdldCgpKTsKKyAgICBpZiAoIW1fY2dGb250KSB7CisgICAgICAgIENGU3RyaW5nUmVm
IHBvc3RTY3JpcHROYW1lID0gZ2V0UG9zdFNjcmlwdE5hbWUoZnVsbE5hbWUuZ2V0KCksIGhkYyk7
CisgICAgICAgIGlmIChwb3N0U2NyaXB0TmFtZSkgeworICAgICAgICAgICAgbV9jZ0ZvbnQgPSBD
R0ZvbnRDcmVhdGVXaXRoRm9udE5hbWUocG9zdFNjcmlwdE5hbWUpOworICAgICAgICAgICAgQVNT
RVJUKG1fY2dGb250KTsKICAgICAgICAgfQotICAgICAgICBmcmVlKG1ldHJpY3MpOwogICAgIH0K
LQotICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKLSAgICBSZWxlYXNlREMoMCwgaGRjKTsKLX0KLQot
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSkKLSAgICA6IG1fZm9udCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAg
LCBtX2NnRm9udCgwKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCi0gICAgLCBtX3N5bnRo
ZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQotewogfQogCiBGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBmb250LCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKQEAgLTIxNyw4ICsxMzEsNCBAQCBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9uCiB7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6
On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRm
b3JtRGF0YUNhaXJvV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLiAg
SXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorICogRm9udE1h
Yy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
cgorICogQ29weXJpZ2h0IChDKSAyMDA4IEJyZW50IEZ1bGdoYW0KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQo
SEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERDIGhkYywgV0NIQVIqIGZhY2VOYW1lKQoreworICAg
IG1fZm9udEZhY2UgPSBjYWlyb193aW4zMl9mb250X2ZhY2VfY3JlYXRlX2Zvcl9oZm9udChmb250
KTsKKyAgICBjYWlyb19tYXRyaXhfdCBzaXplTWF0cml4LCBjdG07CisgICAgY2Fpcm9fbWF0cml4
X2luaXRfaWRlbnRpdHkoJmN0bSk7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJnNpemVN
YXRyaXgsIHNpemUsIHNpemUpOworCisgICAgc3RhdGljIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBm
b250T3B0aW9ucyA9IDA7CisgICAgaWYgKCFmb250T3B0aW9ucykKKyAgICB7CisgICAgICAgZm9u
dE9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgICAgY2Fpcm9fZm9u
dF9vcHRpb25zX3NldF9hbnRpYWxpYXMoZm9udE9wdGlvbnMsIENBSVJPX0FOVElBTElBU19TVUJQ
SVhFTCk7CisgICAgfQorCisgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3Jl
YXRlKG1fZm9udEZhY2UsICZzaXplTWF0cml4LCAmY3RtLCBmb250T3B0aW9ucyk7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRG
YWNlLCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9udCgw
KQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2ZvbnRGYWNlKGZvbnRGYWNlKQorICAgICwg
bV9zY2FsZWRGb250KDApCisgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV91c2VHREkoZmFsc2UpCit7CisgICBjYWly
b19tYXRyaXhfdCBmb250TWF0cml4OworICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRN
YXRyaXgsIHNpemUsIHNpemUpOworICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAgY2Fpcm9fbWF0
cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7CisgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9u
cyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKworICAgLy8gV2UgZm9yY2UgYW50aWFs
aWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRpbmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAvLyB0
eXBvZ3JhcGhpYyBxdWFsaXRpZXMgZm9yIGN1c3RvbSBmb250cyBvbiBhbGwgcGxhdGZvcm1zLgor
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRf
U1RZTEVfTk9ORSk7CisgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25z
LCBDQUlST19BTlRJQUxJQVNfR1JBWSk7CisKKyAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxl
ZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlvbnMpOworICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKK3ZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zY2Fs
ZWRGb250KTsKKworICAgIGNhaXJvX3NldF9zY2FsZWRfZm9udChjciwgbV9zY2FsZWRGb250KTsK
K30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHJldmlzaW9uIDMwNDI1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIsNyArMiw4IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9u
dCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90
aGVyIHRoYW4KICAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCiAgKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQnJlbnQg
RnVsZ2hhbQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw3ICsyNyw2IEBACiAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC0zOSw3NyArMzksNiBAQCBzdGF0aWMgY29uc3QgaW50IEJvbGQgPSAoMSA8PCAw
KTsKIHN0YXRpYyBjb25zdCBpbnQgSXRhbGljID0gKDEgPDwgMSk7CiBzdGF0aWMgY29uc3QgaW50
IEJvbGRPYmxpcXVlID0gKDEgPDwgMik7CiAKLXN0YXRpYyBpbmxpbmUgVVNIT1JUIHJlYWRCaWdF
bmRpYW5Xb3JkKGNvbnN0IEJZVEUqIHdvcmQpIHsgcmV0dXJuICh3b3JkWzBdIDw8IDgpIHwgd29y
ZFsxXTsgfQotCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgZ2V0UG9zdFNjcmlwdE5hbWUoQ0ZTdHJpbmdS
ZWYgZmFjZU5hbWUsIEhEQyBkYykKLXsKLSAgICBjb25zdCBEV09SRCBjTWF4TmFtZVRhYmxlU2l6
ZSA9IDEwMjQgKiAxMDI0OwotCi0gICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+ID4gbmFtZU1hcDsKLQotICAgIC8vIENoZWNrIG91ciBoYXNoIGZpcnN0Lgot
ICAgIFN0cmluZyBmYWNlU3RyaW5nKGZhY2VOYW1lKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHJlc3VsdCA9IG5hbWVNYXAuZ2V0KGZhY2VTdHJpbmcpOwotICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgIHJldHVybiByZXN1bHQuZ2V0KCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIG9idGFpbiB0
aGUgUG9zdFNjcmlwdCBuYW1lIGZyb20gdGhlIG5hbWUgdGFibGUgYW5kIHVzZSBpdCBpbnN0ZWFk
LC4KLSAgICBEV09SRCBidWZmZXJTaXplID0gR2V0Rm9udERhdGEoZGMsICdlbWFuJywgMCwgTlVM
TCwgMCk7IC8vICJuYW1lIiBiYWNrd2FyZHMKLSAgICBpZiAoYnVmZmVyU2l6ZSA9PSAwIHx8IGJ1
ZmZlclNpemUgPT0gR0RJX0VSUk9SIHx8IGJ1ZmZlclNpemUgPiBjTWF4TmFtZVRhYmxlU2l6ZSkK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAKLSAgICBWZWN0b3I8QllURT4gYnVmZmVyVmVjdG9y
KGJ1ZmZlclNpemUpOwotICAgIEJZVEUqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7Ci0g
ICAgaWYgKEdldEZvbnREYXRhKGRjLCAnZW1hbicsIDAsIGJ1ZmZlciwgYnVmZmVyU2l6ZSkgPT0g
R0RJX0VSUk9SKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChidWZmZXJTaXplIDwg
NikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBVU0hPUlQgbnVtYmVyT2ZSZWNvcmRzID0g
cmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgMik7Ci0gICAgVUlOVCBzdHJpbmdzT2Zmc2V0ID0g
cmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgNCk7Ci0gICAgaWYgKGJ1ZmZlclNpemUgPCBzdHJp
bmdzT2Zmc2V0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIEJZVEUqIHN0cmluZ3MgPSBi
dWZmZXIgKyBzdHJpbmdzT2Zmc2V0OwotCi0gICAgLy8gTm93IHdhbGsgZWFjaCBuYW1lIHJlY29y
ZCBsb29raW5nIGZvciBhIE1hYyBvciBXaW5kb3dzIFBvc3RTY3JpcHQgbmFtZS4KLSAgICBVSU5U
IG9mZnNldCA9IDY7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlJlY29yZHM7IGkr
KykgewotICAgICAgICBpZiAoYnVmZmVyU2l6ZSA8IG9mZnNldCArIDEyKQotICAgICAgICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgVVNIT1JUIHBsYXRmb3JtSUQgPSByZWFkQmlnRW5kaWFu
V29yZChidWZmZXIgKyBvZmZzZXQpOwotICAgICAgICBVU0hPUlQgZW5jb2RpbmdJRCA9IHJlYWRC
aWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDIpOwotICAgICAgICBVU0hPUlQgbGFuZ3Vh
Z2VJRCA9IHJlYWRCaWdFbmRpYW5Xb3JkKGJ1ZmZlciArIG9mZnNldCArIDQpOwotICAgICAgICBV
U0hPUlQgbmFtZUlEID0gcmVhZEJpZ0VuZGlhbldvcmQoYnVmZmVyICsgb2Zmc2V0ICsgNik7Ci0g
ICAgICAgIFVTSE9SVCBsZW5ndGggPSByZWFkQmlnRW5kaWFuV29yZChidWZmZXIgKyBvZmZzZXQg
KyA4KTsKLSAgICAgICAgVVNIT1JUIG5hbWVPZmZzZXQgPSByZWFkQmlnRW5kaWFuV29yZChidWZm
ZXIgKyBvZmZzZXQgKyAxMCk7Ci0KLSAgICAgICAgaWYgKHBsYXRmb3JtSUQgPT0gMyAmJiBlbmNv
ZGluZ0lEID09IDEgJiYgbGFuZ3VhZ2VJRCA9PSAweDQwOSAmJiBuYW1lSUQgPT0gNikgewotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIFdpbmRvd3MgUG9zdFNjcmlwdCBuYW1lIGFuZCBpcyB0aGVy
ZWZvcmUgVVRGLTE2LgotICAgICAgICAgICAgLy8gUGFzcyBCaWcgRW5kaWFuIGFzIHRoZSBlbmNv
ZGluZy4KLSAgICAgICAgICAgIGlmIChidWZmZXJTaXplIDwgc3RyaW5nc09mZnNldCArIG5hbWVP
ZmZzZXQgKyBsZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAg
ICByZXN1bHQuYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhOVUxMLCBzdHJpbmdzICsg
bmFtZU9mZnNldCwgbGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjE2QkUsIGZhbHNlKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUlEID09IDEgJiYg
ZW5jb2RpbmdJRCA9PSAwICYmIGxhbmd1YWdlSUQgPT0gMCAmJiBuYW1lSUQgPT0gNikgewotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIE1hYyBQb3N0U2NyaXB0IG5hbWUgYW5kIGlzIHRoZXJlZm9y
ZSBBU0NJSS4KLSAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90
ZXh0Zm9udHMvVFRSZWZNYW4vUk0wNi9DaGFwNm5hbWUuaHRtbAotICAgICAgICAgICAgaWYgKGJ1
ZmZlclNpemUgPCBzdHJpbmdzT2Zmc2V0ICsgbmFtZU9mZnNldCArIGxlbmd0aCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJlc3VsdC5hZG9wdENGKENGU3RyaW5n
Q3JlYXRlV2l0aEJ5dGVzKE5VTEwsIHN0cmluZ3MgKyBuYW1lT2Zmc2V0LCBsZW5ndGgsIGtDRlN0
cmluZ0VuY29kaW5nQVNDSUksIGZhbHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIG9mZnNldCArPSAxMjsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0KQotICAg
ICAgICBuYW1lTWFwLnNldChmYWNlU3RyaW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQu
Z2V0KCk7Ci19Ci0KIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZW51bVN0eWxlc0NhbGxiYWNrKGNvbnN0
IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRU
eXBlLCBMUEFSQU0gbFBhcmFtKQogewogICAgIGludCAqc3R5bGUgPSByZWludGVycHJldF9jYXN0
PGludCo+KGxQYXJhbSk7CkBAIC0xMzEsNyArNjAsMTIgQEAgc3RhdGljIGludCBDQUxMQkFDSyBl
bnVtU3R5bGVzQ2FsbGJhY2soYwogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShI
Rk9OVCBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VH
REkpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAgICAsIG1fc2l6ZShzaXplKQorI2lmIFBMQVRGT1JN
KENHKQogICAgICwgbV9jZ0ZvbnQoMCkKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgICwgbV9m
b250RmFjZSgwKQorICAgICwgbV9zY2FsZWRGb250KDApCisjZW5kaWYKICAgICAsIG1fc3ludGhl
dGljQm9sZChmYWxzZSkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShmYWxzZSkKICAgICAsIG1f
dXNlR0RJKHVzZUdESSkKQEAgLTE3OSwxNyArMTEzLDggQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShIRk9OVAogICAgICAgICAgICAgICAgICAgICBtX3N5bnRoZXRpY09ibGlx
dWUgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVHJ5IHRoZSBmYWNlIG5hbWUgZmly
c3QuICBXaW5kb3dzIG1heSBlbmQgdXAgbG9jYWxpemluZyB0aGlzIG5hbWUsIGFuZCBDRyBkb2Vz
bid0IGtub3cgYWJvdXQKLSAgICAgICAgLy8gdGhlIGxvY2FsaXphdGlvbi4gIElmIHRoZSBjcmVh
dGUgZmFpbHMsIHdlJ2xsIHRyeSB0aGUgUG9zdFNjcmlwdCBuYW1lLgotICAgICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKWZhY2VOYW1lLCB3Y3NsZW4oZmFjZU5hbWUpKSk7
Ci0gICAgICAgIG1fY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKGZ1bGxOYW1lLmdl
dCgpKTsKLSAgICAgICAgaWYgKCFtX2NnRm9udCkgewotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYg
cG9zdFNjcmlwdE5hbWUgPSBnZXRQb3N0U2NyaXB0TmFtZShmdWxsTmFtZS5nZXQoKSwgaGRjKTsK
LSAgICAgICAgICAgIGlmIChwb3N0U2NyaXB0TmFtZSkgewotICAgICAgICAgICAgICAgIG1fY2dG
b250ID0gQ0dGb250Q3JlYXRlV2l0aEZvbnROYW1lKHBvc3RTY3JpcHROYW1lKTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobV9jZ0ZvbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
ICAgIHBsYXRmb3JtRGF0YUluaXQoZm9udCwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CisKICAgICAg
ICAgZnJlZShtZXRyaWNzKTsKICAgICB9CiAKQEAgLTIwMCwxNyArMTI1LDEyIEBAIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCiAgICAgOiBt
X2ZvbnQoMCkKICAgICAsIG1fc2l6ZShzaXplKQorI2lmIFBMQVRGT1JNKENHKQogICAgICwgbV9j
Z0ZvbnQoMCkKLSAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQotICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCi0gICAgLCBtX3VzZUdESShmYWxzZSkKLXsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShzaXpl
KQotICAgICwgbV9jZ0ZvbnQoZm9udCkKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorICAgICwgbV9m
b250RmFjZSgwKQorICAgICwgbV9zY2FsZWRGb250KDApCisjZW5kaWYKICAgICAsIG1fc3ludGhl
dGljQm9sZChib2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBt
X3VzZUdESShmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCShyZXZpc2lvbiAzMDE3NCkJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3Bw
OjMwMTc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9X
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEds
eXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEpCit7CisgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUg
Z2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBj
aGFyYWN0ZXJzLgorICAgIC8vIFdlIHdvbid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgorICAgIGlm
IChidWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemVdOworICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5jZ0ZvbnQoKSwgYnVmZmVyLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBH
bHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07CisgICAgICAgIGlmICghZ2x5cGgpCisg
ICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBn
bHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dX
aW4uY3BwCShyZXZpc2lvbiAzMDE3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBh
Z2VUcmVlTm9kZUNhaXJvV2luLmNwcAkocmV2aXNpb24gMzAxNzQpCShmcm9tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcDozMDE3NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZp
bGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworICAg
IC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBhZ2Ug
c2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4K
KyAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KKyAgICBpZiAoYnVmZmVyTGVu
Z3RoID4gR2x5cGhQYWdlOjpzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBDR0dseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQ
YWdlOjpzaXplXTsKKyAgICB3a0dldEdseXBocyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dG
b250KCksIGJ1ZmZlciwgbG9jYWxHbHlwaEJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGgg
PSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnRE
YXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBoYXZlR2x5cGhzOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNw
cAkocmV2aXNpb24gMzAxNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MiwxNyArNDEs
MzEgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBDR0dseXBo
IGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICB3a0dldEdseXBocyhmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuY2dGb250KCksIGJ1ZmZlciwgbG9jYWxHbHlwaEJ1ZmZlciwg
YnVmZmVyTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOwotICAgICAgICBp
ZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwg
MCwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgo
b2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOworCisgICAgSERDIGRjID0gR2V0REMoKEhXTkQpMCk7CisgICAgU2F2ZURDKGRjKTsKKyAg
ICBTZWxlY3RPYmplY3QoZGMsIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKKwor
ICAgIFRFWFRNRVRSSUMgdG07CisgICAgR2V0VGV4dE1ldHJpY3MoZGMsICZ0bSk7CisKKyAgICBX
T1JEIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplICogMl07CisgICAgRFdPUkQgcmVz
dWx0ID0gR2V0R2x5cGhJbmRpY2VzKGRjLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgbG9jYWxHbHlw
aEJ1ZmZlciwgMCk7CisgICAgYm9vbCBzdWNjZXNzID0gcmVzdWx0ICE9IEdESV9FUlJPUiAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSA9PSBidWZmZXJMZW5ndGg7CisgICAgaWYgKHN1
Y2Nlc3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07CisgICAgICAg
ICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9m
ZnNldCArIGksIDAsIDApOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAg
ICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKyAgICBSZXN0b3JlREMoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMoMCwgZGMpOworCiAgICAg
cmV0dXJuIGhhdmVHbHlwaHM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAJKHJldmlzaW9uIDMwNDI1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgotCi0jaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6
OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewot
ICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIGdseXBoIHBh
Z2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVy
cy4KLSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVy
TGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBDR0dseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5
cGhQYWdlOjpzaXplXTsKLSAgICB3a0dldEdseXBocyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCku
Y2dGb250KCksIGJ1ZmZlciwgbG9jYWxHbHlwaEJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgR2x5cGggZ2x5
cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOwotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgMCwgMCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZv
bnREYXRhKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNp
b24gMzA0MjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMzIgKzU0LDkgQEAgdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICBtX3NjcmlwdENhY2hlID0gMDsKICAgICBtX3Nj
cmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKICAgICBtX2lzU3lzdGVtRm9udCA9IGZhbHNlOwotICAg
IAotICAgIGlmIChtX2ZvbnQudXNlR0RJKCkpIHsKLSAgICAgICAgSERDIGhkYyA9IEdldERDKDAp
OwotICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX2ZvbnQuaGZv
bnQoKSk7Ci0gICAgICAgIE9VVExJTkVURVhUTUVUUklDIG1ldHJpY3M7Ci0gICAgICAgIEdldE91
dGxpbmVUZXh0TWV0cmljcyhoZGMsIHNpemVvZihtZXRyaWNzKSwgJm1ldHJpY3MpOwotICAgICAg
ICBURVhUTUVUUklDJiB0ZXh0TWV0cmljcyA9IG1ldHJpY3Mub3RtVGV4dE1ldHJpY3M7Ci0gICAg
ICAgIG1fYXNjZW50ID0gdGV4dE1ldHJpY3MudG1Bc2NlbnQ7Ci0gICAgICAgIG1fZGVzY2VudCA9
IHRleHRNZXRyaWNzLnRtRGVzY2VudDsKLSAgICAgICAgbV9saW5lR2FwID0gdGV4dE1ldHJpY3Mu
dG1FeHRlcm5hbExlYWRpbmc7Ci0gICAgICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1f
ZGVzY2VudCArIG1fbGluZUdhcDsKLSAgICAgICAgbV94SGVpZ2h0ID0gbV9hc2NlbnQgKiAwLjU2
ZjsgLy8gQmVzdCBndWVzcyBmb3IgeEhlaWdodCBpZiBubyB4IGdseXBoIGlzIHByZXNlbnQuCi0K
LSAgICAgICAgR0xZUEhNRVRSSUNTIGdtOwotICAgICAgICBNQVQyIG1hdCA9IHsgMSwgMCwgMCwg
MSB9OwotICAgICAgICBEV09SRCBsZW4gPSBHZXRHbHlwaE91dGxpbmUoaGRjLCAneCcsIEdHT19N
RVRSSUNTLCAmZ20sIDAsIDAsICZtYXQpOwotICAgICAgICBpZiAobGVuICE9IEdESV9FUlJPUiAm
JiBnbS5nbXB0R2x5cGhPcmlnaW4ueSA+IDApCi0gICAgICAgICAgICBtX3hIZWlnaHQgPSBnbS5n
bXB0R2x5cGhPcmlnaW4ueTsKIAotICAgICAgICBtX3VuaXRzUGVyRW0gPSBtZXRyaWNzLm90bUVN
U3F1YXJlOwotCi0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgICAgICBS
ZWxlYXNlREMoMCwgaGRjKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2Zv
bnQudXNlR0RJKCkpCisgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7CiAKICAgICBDR0ZvbnRS
ZWYgZm9udCA9IG1fZm9udC5jZ0ZvbnQoKTsKICAgICBpbnQgaUFzY2VudCA9IENHRm9udEdldEFz
Y2VudChmb250KTsKQEAgLTE0NCwyNCArMTIxLDEzIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtRGVzdHJveSgpCiAgICAgICAgIENHRm9udFJlbGVhc2UobV9mb250LmNnRm9udCgpKTsK
ICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCBoYXNoIHRoaXMgb24gV2luMzIsIHNvIGl0J3MgZWZm
ZWN0aXZlbHkgb3duZWQgYnkgdXMuCi0gICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Ci0K
LSAgICBTY3JpcHRGcmVlQ2FjaGUoJm1fc2NyaXB0Q2FjaGUpOwotICAgIGRlbGV0ZSBtX3Njcmlw
dEZvbnRQcm9wZXJ0aWVzOworICAgIHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOwogfQogCiBmbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAogewotICAgIGlmIChtX2ZvbnQudXNlR0RJKCkpIHsKLSAgICAgICAgSERDIGhkYyA9IEdldERD
KDApOwotICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX2ZvbnQu
aGZvbnQoKSk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgR2V0Q2hhcldpZHRoSShoZGMs
IGdseXBoLCAxLCAwLCAmd2lkdGgpOwotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250
KTsKLSAgICAgICAgUmVsZWFzZURDKDAsIGhkYyk7Ci0gICAgICAgIHJldHVybiB3aWR0aDsKLSAg
ICB9CisgICAgaWYgKG1fZm9udC51c2VHREkoKSkKKyAgICAgICByZXR1cm4gd2lkdGhGb3JHRElH
bHlwaChnbHlwaCk7CiAKICAgICBDR0ZvbnRSZWYgZm9udCA9IG1fZm9udC5jZ0ZvbnQoKTsKICAg
ICBmbG9hdCBwb2ludFNpemUgPSBtX2ZvbnQuc2l6ZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJ
KHJldmlzaW9uIDMwNDI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxl
Rm9udERhdGFDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDEwIEBACiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4K
ICNpbmNsdWRlIDxtbGFuZy5oPgogI2luY2x1ZGUgPHRjaGFyLmg+CiAKQEAgLTQ1LDU4ICs0OCw4
MyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIG1fc2NyaXB0Q2Fj
aGUgPSAwOwogICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwogICAgIG1faXNTeXN0ZW1G
b250ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fZm9udC51c2VHREkoKSkgewotICAgICAgICBI
REMgaGRjID0gR2V0REMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVj
dChoZGMsIG1fZm9udC5oZm9udCgpKTsKLSAgICAgICAgT1VUTElORVRFWFRNRVRSSUMgbWV0cmlj
czsKLSAgICAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgc2l6ZW9mKG1ldHJpY3MpLCAm
bWV0cmljcyk7Ci0gICAgICAgIFRFWFRNRVRSSUMmIHRleHRNZXRyaWNzID0gbWV0cmljcy5vdG1U
ZXh0TWV0cmljczsKLSAgICAgICAgbV9hc2NlbnQgPSB0ZXh0TWV0cmljcy50bUFzY2VudDsKLSAg
ICAgICAgbV9kZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNjZW50OwotICAgICAgICBtX2xpbmVH
YXAgPSB0ZXh0TWV0cmljcy50bUV4dGVybmFsTGVhZGluZzsKLSAgICAgICAgbV9saW5lU3BhY2lu
ZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOwotICAgICAgICBtX3hIZWlnaHQg
PSBtX2FzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5
cGggaXMgcHJlc2VudC4KIAorICAgIGlmIChtX2ZvbnQudXNlR0RJKCkpCisgICAgICAgcmV0dXJu
IGluaXRHRElGb250KCk7CisKKyAgICBIREMgaGRjID0gR2V0REMoMCk7CisgICAgU2F2ZURDKGhk
Yyk7CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gbV9mb250LnNjYWxl
ZEZvbnQoKTsKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRpcGxpZXIgPSBjYWlyb193aW4z
Ml9zY2FsZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVkRm9udCkgKiBtX2ZvbnQuc2l6
ZSgpOworCisgICAgY2Fpcm9fd2luMzJfc2NhbGVkX2ZvbnRfc2VsZWN0X2ZvbnQoc2NhbGVkRm9u
dCwgaGRjKTsKKworICAgIFRFWFRNRVRSSUMgdGV4dE1ldHJpY3M7CisgICAgR2V0VGV4dE1ldHJp
Y3MoaGRjLCAmdGV4dE1ldHJpY3MpOworICAgIG1fYXNjZW50ID0gbHJvdW5kZih0ZXh0TWV0cmlj
cy50bUFzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyKTsKKyAgICBtX2Rlc2NlbnQgPSBscm91bmRm
KHRleHRNZXRyaWNzLnRtRGVzY2VudCAqIG1ldHJpY3NNdWx0aXBsaWVyKTsKKyAgICBtX3hIZWln
aHQgPSBtX2FzY2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGZvciBub24t
VHJ1ZXR5cGUgZm9udHMuCisgICAgbV9saW5lR2FwID0gbHJvdW5kZih0ZXh0TWV0cmljcy50bUV4
dGVybmFsTGVhZGluZyAqIG1ldHJpY3NNdWx0aXBsaWVyKTsKKyAgICBtX2xpbmVTcGFjaW5nID0g
bV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7CisKKyAgICBPVVRMSU5FVEVYVE1FVFJJ
QyBtZXRyaWNzOworICAgIGlmIChHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaGRjLCBzaXplb2YobWV0
cmljcyksICZtZXRyaWNzKSA+IDApIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIFRydWVUeXBlIGZv
bnQuICBXZSBtaWdodCBiZSBhYmxlIHRvIGdldCBhbiBhY2N1cmF0ZSB4SGVpZ2h0CiAgICAgICAg
IEdMWVBITUVUUklDUyBnbTsKICAgICAgICAgTUFUMiBtYXQgPSB7IDEsIDAsIDAsIDEgfTsKICAg
ICAgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhPdXRsaW5lKGhkYywgJ3gnLCBHR09fTUVUUklDUywg
JmdtLCAwLCAwLCAmbWF0KTsKICAgICAgICAgaWYgKGxlbiAhPSBHRElfRVJST1IgJiYgZ20uZ21w
dEdseXBoT3JpZ2luLnkgPiAwKQotICAgICAgICAgICAgbV94SGVpZ2h0ID0gZ20uZ21wdEdseXBo
T3JpZ2luLnk7Ci0KLSAgICAgICAgbV91bml0c1BlckVtID0gbWV0cmljcy5vdG1FTVNxdWFyZTsK
KyAgICAgICAgICAgIG1feEhlaWdodCA9IGdtLmdtcHRHbHlwaE9yaWdpbi55ICogbWV0cmljc011
bHRpcGxpZXI7CisgICAgfQogCi0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwot
ICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9k
b25lX2ZvbnQoc2NhbGVkRm9udCk7CiAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2lz
U3lzdGVtRm9udCA9IGZhbHNlOworICAgIG1fc2NyaXB0Q2FjaGUgPSAwOworICAgIG1fc2NyaXB0
Rm9udFByb3BlcnRpZXMgPSAwOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2VjdGlvbiBzaG91bGQg
ZGV0ZXJtaW5lIGZvbnQgZGltZW5zaW9ucyAoc2VlIENHIGltcGxlbWVudGF0aW9uKS4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMo
MCwgaGRjKTsKIH0KIAogdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9u
dC5mb250RmFjZSgpKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fZm9udC5zY2Fs
ZWRGb250KCkpOworCisgICAgRGVsZXRlT2JqZWN0KG1fZm9udC5oZm9udCgpKTsKKworICAgIHBs
YXRmb3JtQ29tbW9uRGVzdHJveSgpOwogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewotICAgIGlmIChtX2ZvbnQudXNl
R0RJKCkpIHsKLSAgICAgICAgSERDIGhkYyA9IEdldERDKDApOwotICAgICAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX2ZvbnQuaGZvbnQoKSk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgR2V0Q2hhcldpZHRoSShoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpOwot
ICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICAgICAgUmVsZWFzZURDKDAs
IGhkYyk7Ci0gICAgICAgIHJldHVybiB3aWR0aDsKLSAgICB9CisgICAgaWYgKG1fZm9udC51c2VH
REkoKSkKKyAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7CisKKyAgICBIREMg
aGRjID0gR2V0REMoMCk7CisgICAgU2F2ZURDKGhkYyk7CisKKyAgICBjYWlyb19zY2FsZWRfZm9u
dF90KiBzY2FsZWRGb250ID0gbV9mb250LnNjYWxlZEZvbnQoKTsKKyAgICBjYWlyb193aW4zMl9z
Y2FsZWRfZm9udF9zZWxlY3RfZm9udChzY2FsZWRGb250LCBoZGMpOworCisgICAgaW50IHdpZHRo
OworICAgIEdldENoYXJXaWR0aEkoaGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKTsKIAotICAgIC8v
IEZJWE1FOiBGbGVzaCBvdXQgd2l0aCBDYWlyby93aW4zMiBmb250IGltcGxlbWVudGF0aW9uCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9kb25lX2Zv
bnQoc2NhbGVkRm9udCk7CiAKLSAgICByZXR1cm4gMDsKKyAgICBSZXN0b3JlREMoaGRjLCAtMSk7
CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CisKKyAgICBjb25zdCBkb3VibGUgbWV0cmljc011bHRp
cGxpZXIgPSBjYWlyb193aW4zMl9zY2FsZWRfZm9udF9nZXRfbWV0cmljc19mYWN0b3Ioc2NhbGVk
Rm9udCkgKiBtX2ZvbnQuc2l6ZSgpOworICAgIHJldHVybiB3aWR0aCAqIG1ldHJpY3NNdWx0aXBs
aWVyOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25z
dAoreworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZvbnQoY3IpOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFXaW4uY3BwCShyZXZpc2lvbiAzMDQyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNDIg
QEAgYm9vbCBTaW1wbGVGb250RGF0YTo6c2hvdWxkQXBwbHlNYWNBc2NlbgogICAgIHJldHVybiBn
X3Nob3VsZEFwcGx5TWFjQXNjZW50SGFjazsKIH0KIAordm9pZCBTaW1wbGVGb250RGF0YTo6aW5p
dEdESUZvbnQoKQoreworICAgICBIREMgaGRjID0gR2V0REMoMCk7CisgICAgIEhHRElPQkogb2xk
Rm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKKyAgICAgT1VUTElORVRF
WFRNRVRSSUMgbWV0cmljczsKKyAgICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGhkYywgc2l6ZW9m
KG1ldHJpY3MpLCAmbWV0cmljcyk7CisgICAgIFRFWFRNRVRSSUMmIHRleHRNZXRyaWNzID0gbWV0
cmljcy5vdG1UZXh0TWV0cmljczsKKyAgICAgbV9hc2NlbnQgPSB0ZXh0TWV0cmljcy50bUFzY2Vu
dDsKKyAgICAgbV9kZXNjZW50ID0gdGV4dE1ldHJpY3MudG1EZXNjZW50OworICAgICBtX2xpbmVH
YXAgPSB0ZXh0TWV0cmljcy50bUV4dGVybmFsTGVhZGluZzsKKyAgICAgbV9saW5lU3BhY2luZyA9
IG1fYXNjZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOworICAgICBtX3hIZWlnaHQgPSBtX2Fz
Y2VudCAqIDAuNTZmOyAvLyBCZXN0IGd1ZXNzIGZvciB4SGVpZ2h0IGlmIG5vIHggZ2x5cGggaXMg
cHJlc2VudC4KKworICAgICBHTFlQSE1FVFJJQ1MgZ207CisgICAgIE1BVDIgbWF0ID0geyAxLCAw
LCAwLCAxIH07CisgICAgIERXT1JEIGxlbiA9IEdldEdseXBoT3V0bGluZShoZGMsICd4JywgR0dP
X01FVFJJQ1MsICZnbSwgMCwgMCwgJm1hdCk7CisgICAgIGlmIChsZW4gIT0gR0RJX0VSUk9SICYm
IGdtLmdtcHRHbHlwaE9yaWdpbi55ID4gMCkKKyAgICAgICAgIG1feEhlaWdodCA9IGdtLmdtcHRH
bHlwaE9yaWdpbi55OworCisgICAgIG1fdW5pdHNQZXJFbSA9IG1ldHJpY3Mub3RtRU1TcXVhcmU7
CisKKyAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgIFJlbGVhc2VEQygwLCBo
ZGMpOworCisgICAgIHJldHVybjsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1D
b21tb25EZXN0cm95KCkKK3sKKyAgICAvLyBXZSBkb24ndCBoYXNoIHRoaXMgb24gV2luMzIsIHNv
IGl0J3MgZWZmZWN0aXZlbHkgb3duZWQgYnkgdXMuCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9u
dERhdGE7CisKKyAgICBTY3JpcHRGcmVlQ2FjaGUoJm1fc2NyaXB0Q2FjaGUpOworICAgIGRlbGV0
ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOworfQorCiBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9u
dERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSkgewpAQCAtMTM3
LDYgKzE3MywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAg
UmVsZWFzZURDKDAsIGRjKTsKIH0KIAorZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJ
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgSERDIGhkYyA9IEdldERDKDApOworICAg
IEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIG1fZm9udC5oZm9udCgpKTsKKyAg
ICBpbnQgd2lkdGg7CisgICAgR2V0Q2hhcldpZHRoSShoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgp
OworICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgIFJlbGVhc2VEQygwLCBoZGMp
OworICAgIHJldHVybiB3aWR0aDsKK30KKwogU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVG
b250RGF0YTo6c2NyaXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGlmICghbV9zY3Jp
cHRGb250UHJvcGVydGllcykgewo=
</data>
<flag name="review"
          id="8399"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>